Skip to content

Guild ​

Représente un serveur (guilde) sur BloumeChat. Hérite de Base.

C'est le point d'entrée principal pour toute la gestion administrative d'un serveur : salons, catégories, rôles, membres, bannissements, invitations, émojis, journal d'audit, boosts et notifications.

Notation des signatures

Les signatures sont écrites en notation TypeScript, mais s'appellent à l'identique en JavaScript — voir Utiliser le SDK en JavaScript.

Propriétés ​

PropriétéTypeDescription
idstringL'identifiant public (Snowflake) du serveur.
namestringLe nom du serveur.
iconstring | nullL'URL de l'icône du serveur, ou null s'il n'y en a pas.
ownerIdstringL'identifiant public du propriétaire du serveur. Résolu soit directement depuis data.ownerId, soit en recherchant l'entrée isOwner: true dans la liste des membres reçue — l'API /servers n'expose pas ce champ directement autrement.
memberCountnumberLe nombre approximatif de membres présents (0 si absent des données reçues).
rolesRoleManagerLe gestionnaire de rôles scopé à ce serveur, accessible via guild.roles.cache / guild.roles.create() / etc.
invitesInviteManager(1.5.0+) Gestionnaire d'invitations scopé à ce serveur — guild.invites.fetchAll() / .create() / .delete().
emojisEmojiManager(1.5.0+) Gestionnaire d'émojis personnalisés scopé à ce serveur — guild.emojis.fetchAll() / .create() / .delete().

Getters ​

GetterTypeDescription
membersMemberManagerLe gestionnaire global des membres, commun à tout le client (pas scopé par serveur — filtrez par member.serverId === guild.id si besoin).
channelsCollection<string, Channel>Les salons du serveur actuellement en cache dans client.channels, filtrés par serverId. Ne déclenche aucune requête réseau — appelez guild.fetchChannels() d'abord si le cache peut être incomplet.

channels ne reflète que le cache

Ce getter filtre client.channels.cache, pas une source de vérité serveur. Juste après le login, ou si vous n'avez jamais appelé fetchChannels()/fetchCategories() pour ce serveur, il peut renvoyer une collection vide même si le serveur a des salons.

Méthodes ​

Gestion du serveur ​

setName(name: string): Promise<void> ​

Renomme le serveur.

ParamètreTypeRequisDescription
namestringOuiLe nouveau nom.

Retour : Promise<void>. Met à jour this.name localement après succès.

edit(data): Promise<Guild> ​

Modifie une ou plusieurs propriétés du serveur en un seul appel.

ts
edit(data: { name?: string; imageUrl?: string | null }): Promise<Guild>
ParamètreTypeRequisDescription
data.namestringNonNouveau nom.
data.imageUrlstring | nullNonNouvelle icône, ou null pour la retirer.

Retour : Promise<Guild> — l'instance courante (this), mise à jour.

ts
await guild.edit({ name: "Mon Serveur 2.0", imageUrl: "https://cdn.example.com/icon.png" });
js
await guild.edit({ name: "Mon Serveur 2.0", imageUrl: "https://cdn.example.com/icon.png" });

leave(): Promise<void> ​

Fait quitter le serveur par le bot.

Retour : Promise<void>.

delete(): Promise<void> ​

Supprime définitivement le serveur. Le bot doit en être le propriétaire.

Retour : Promise<void>. Rejette si le bot n'est pas propriétaire du serveur.

Gestion des salons ​

fetchChannels(): Promise<Channel[]> ​

Récupère tous les salons du serveur auprès de l'API et met à jour le cache global client.channels.

Retour : Promise<Channel[]>.

createChannel(options): Promise<Channel> ​

Crée un nouveau salon (textuel ou vocal) dans le serveur, avec possibilité de définir des surcharges de permissions initiales.

ts
createChannel(options: {
  name: string;
  type: "TEXT" | "VOICE";
  categoryId?: string;
  isPrivate?: boolean;
  permissionOverwrites?: { id: string; type: "ROLE" | "MEMBER"; allow: bigint | string; deny: bigint | string }[];
}): Promise<Channel>
ParamètreTypeRequisDescription
options.namestringOuiNom du salon.
options.type"TEXT" | "VOICE"OuiType de salon.
options.categoryIdstringNonIdentifiant de la catégorie parente.
options.isPrivatebooleanNonRend le salon privé dès la création.
options.permissionOverwritesArray<{ id, type, allow, deny }>NonSurcharges de permissions appliquées séquentiellement juste après la création (un appel channel.editPermissions() par entrée).

Retour : Promise<Channel> — le salon créé.

ts
import { PermissionFlags } from "bloumechat";

const newChannel = await guild.createChannel({
  name: "vip-room",
  type: "TEXT",
  isPrivate: true,
  permissionOverwrites: [
    { id: "ROLE_ID", type: "ROLE", allow: PermissionFlags.VIEW_CHANNELS, deny: 0n },
  ],
});
js
const { PermissionFlags } = require("bloumechat");

const newChannel = await guild.createChannel({
  name: "vip-room",
  type: "TEXT",
  isPrivate: true,
  permissionOverwrites: [
    { id: "ROLE_ID", type: "ROLE", allow: PermissionFlags.VIEW_CHANNELS, deny: 0n },
  ],
});

Les surcharges initiales sont appliquées séquentiellement, pas atomiquement

Si permissionOverwrites contient plusieurs entrées, elles sont posées l'une après l'autre via des appels réseau successifs après la création du salon. Une défaillance réseau au milieu de la liste laisse le salon dans un état partiellement configuré (salon créé, certaines surcharges appliquées, d'autres non) — vérifiez le résultat avec channel.fetchPermissionOverrides() en cas de doute.

Gestion des membres & bannissements ​

searchMembers(query: string): Promise<MemberSearchResultDTO[]> ​

Recherche des membres du serveur par nom d'utilisateur (recherche partielle, insensible à la casse côté serveur).

ts
interface MemberSearchResultDTO {
  publicId: string;
  name: string;
  tag: string;
  image: string | null;
  isBot: boolean;
  isOwner: boolean;
  roles: Array<{ publicId: string; name: string; color: string | null; hoist: boolean; position: number }>;
}
ParamètreTypeRequisDescription
querystringOuiLe texte à rechercher.

Retour : Promise<MemberSearchResultDTO[]>.

ts
const results = await guild.searchMembers("jean");
js
const results = await guild.searchMembers("jean");

fetchBans(): Promise<BanDTO[]> ​

Récupère la liste des utilisateurs actuellement bannis du serveur.

ts
interface BanDTO {
  publicId: string;
  reason: string | null;
  createdAt: string;
  user: { publicId: string; name: string; tag: string; image: string | null };
}

Retour : Promise<BanDTO[]>.

unbanMember(userId: string): Promise<void> ​

Lève le bannissement d'un utilisateur, via le socket.

ParamètreTypeRequisDescription
userIdstringOuiL'identifiant public de l'utilisateur banni.

Retour : Promise<void> (résout dès l'émission socket). Lève BloumeChatAuthError si le socket n'est pas disponible.

ts
const bans = await guild.fetchBans();
const target = bans.find((b) => b.user.name === "ancien-troll");
if (target) await guild.unbanMember(target.user.publicId);
js
const bans = await guild.fetchBans();
const target = bans.find((b) => b.user.name === "ancien-troll");
if (target) await guild.unbanMember(target.user.publicId);

Gestion des rôles ​

fetchRoles(): Promise<Role[]> ​

Récupère tous les rôles du serveur et remplace intégralement le cache guild.roles.cache (vidé puis repeuplé).

Retour : Promise<Role[]>.

createRole(options): Promise<Role> ​

Crée un nouveau rôle dans le serveur.

ts
createRole(options: { name: string; color?: string; permissions?: bigint | string; hoist?: boolean }): Promise<Role>
ParamètreTypeRequisDescription
options.namestringOuiNom du rôle.
options.colorstringNonCouleur hexadécimale (ex. "#ff0000").
options.permissionsbigint | stringNonMasque de permissions initial.
options.hoistbooleanNonAffiche séparément dans la liste des membres.

Retour : Promise<Role> — également ajouté à guild.roles.cache.

editRole(roleId, options): Promise<Role> ​

Modifie un rôle existant.

ts
editRole(roleId: string, options: { name?: string; color?: string | null; permissions?: bigint | string; hoist?: boolean }): Promise<Role>

Retour : Promise<Role> — l'instance mise à jour, également synchronisée dans guild.roles.cache.

deleteRole(roleId: string): Promise<void> ​

Supprime un rôle du serveur et le retire de guild.roles.cache.

Retour : Promise<void>.

ts
import { PermissionFlags } from "bloumechat";

const role = await guild.createRole({
  name: "Modérateur",
  color: "#f97316",
  permissions: PermissionFlags.KICK_MEMBERS | PermissionFlags.MANAGE_MESSAGES,
  hoist: true,
});

await guild.editRole(role.id, { color: "#ea580c" });
await guild.deleteRole(role.id);
js
const { PermissionFlags } = require("bloumechat");

const role = await guild.createRole({
  name: "Modérateur",
  color: "#f97316",
  permissions: PermissionFlags.KICK_MEMBERS | PermissionFlags.MANAGE_MESSAGES,
  hoist: true,
});

await guild.editRole(role.id, { color: "#ea580c" });
await guild.deleteRole(role.id);

Invitations ​

Depuis la 1.5.0 : guild.invites

fetchInvites()/createInvite() ci-dessous délèguent maintenant à guild.invites (InviteManager), qui expose en plus cache et delete(code). Les deux formes restent équivalentes ; guild.invites est la plus complète.

fetchInvites(): Promise<GuildInviteDTO[]> ​

Récupère la liste complète des invitations actives sur le serveur (appelle l'API avec ?all=true en interne — sans ce paramètre, l'endpoint ne renverrait que l'invitation du seul appelant).

ts
interface GuildInviteDTO {
  code: string;
  expiresAt: string | null;
  maxUses?: number | null;
  uses?: number;
  inviter?: { publicId: string; name: string; image: string | null; tag: string };
  channel?: { publicId: string; name: string };
}

Retour : Promise<GuildInviteDTO[]>.

createInvite(channelId, options?): Promise<GuildInviteDTO> ​

Génère une invitation pour un salon spécifique du serveur.

ts
createInvite(channelId: string, options?: { maxAge?: number; maxUses?: number }): Promise<GuildInviteDTO>
ParamètreTypeRequisDescription
channelIdstringOuiLe salon cible de l'invitation.
options.maxAgenumberNonDurée de validité en secondes.
options.maxUsesnumberNonNombre maximum d'utilisations.

Retour : Promise<GuildInviteDTO>.

Préférez channel.createInvite() si vous avez déjà l'objet salon

guild.createInvite(channelId, options) et channel.createInvite(options) appellent le même endpoint — le second est plus direct si vous manipulez déjà une instance Channel.

Catégories ​

fetchCategories(): Promise<Category[]> ​

Récupère toutes les catégories du serveur, avec leurs salons imbriqués.

Retour : Promise<Category[]> — voir Category.

createCategory(name: string): Promise<Category> ​

Crée une nouvelle catégorie dans le serveur.

ParamètreTypeRequisDescription
namestringOuiNom de la catégorie.

Retour : Promise<Category>.

ts
const category = await guild.createCategory("Support");
const channel = await guild.createChannel({ name: "tickets", type: "TEXT", categoryId: category.id });
js
const category = await guild.createCategory("Support");
const channel = await guild.createChannel({ name: "tickets", type: "TEXT", categoryId: category.id });

Émojis ​

Depuis la 1.5.0 : guild.emojis

fetchEmojis()/deleteEmoji() ci-dessous délèguent maintenant à guild.emojis (EmojiManager), qui expose aussi create() pour uploader un nouvel émoji — capacité qui n'existait pas via Guild directement.

fetchEmojis(): Promise<Emoji[]> ​

Récupère tous les émojis personnalisés du serveur.

Retour : Promise<Emoji[]> — voir Emoji.

deleteEmoji(emojiId: string): Promise<void> ​

Supprime un émoji personnalisé par son identifiant public.

Retour : Promise<void>.

Journal d'audit ​

fetchAuditLogs(options?): Promise<AuditLogEntryDTO[]> ​

Récupère les entrées du journal d'audit du serveur.

ts
fetchAuditLogs(options?: { limit?: number; action?: string }): Promise<AuditLogEntryDTO[]>

interface AuditLogEntryDTO {
  publicId: string;
  actionType: string;
  targetType: string;
  targetId: string;
  details: unknown;
  executor: { publicId: string; name: string; tag: string; image: string | null } | null;
  createdAt: string;
}
ParamètreTypeRequisDéfautDescription
options.limitnumberNon50Nombre d'entrées à récupérer.
options.actionstringNon—Filtre par type d'action.

Retour : Promise<AuditLogEntryDTO[]>.

ts
const logs = await guild.fetchAuditLogs({ limit: 20, action: "MEMBER_KICK" });
js
const logs = await guild.fetchAuditLogs({ limit: 20, action: "MEMBER_KICK" });

Boosts ​

boost(): Promise<void> ​

Applique l'un des boosts disponibles du bot à ce serveur. Nécessite que le bot dispose d'au moins un crédit de boost.

Retour : Promise<void>. Rejette si aucun crédit de boost n'est disponible.

URL personnalisée (Vanity URL) ​

fetchVanityURL(): Promise<string | null> ​

Récupère le code d'URL personnalisée du serveur (fonctionnalité nécessitant des boosts actifs).

Retour : Promise<string | null> — null si aucune URL personnalisée n'est configurée.

ts
const vanity = await guild.fetchVanityURL();
console.log(vanity ? `bloumechat.com/${vanity}` : "Pas d'URL personnalisée.");
js
const vanity = await guild.fetchVanityURL();
console.log(vanity ? `bloumechat.com/${vanity}` : "Pas d'URL personnalisée.");

Notifications & état de lecture ​

markAsRead(): Promise<void> ​

Marque l'intégralité du serveur (tous ses salons) comme lu pour le bot.

Retour : Promise<void>.

setNotifications(settings): Promise<void> ​

Met à jour les préférences de notification du bot pour ce serveur.

ts
setNotifications(settings: { muted?: boolean; muteUntil?: string | null; mentionsOnly?: boolean }): Promise<void>
ParamètreTypeRequisDescription
settings.mutedbooleanNonCoupe toutes les notifications du serveur.
settings.muteUntilstring | nullNonCoupe les notifications jusqu'à une date ISO donnée.
settings.mentionsOnlybooleanNonNe notifie que sur mention directe.

Retour : Promise<void>.

ts
await guild.setNotifications({ mentionsOnly: true });
await guild.markAsRead();
js
await guild.setNotifications({ mentionsOnly: true });
await guild.markAsRead();

Exemple complet ​

Mise en place d'un serveur de support avec catégorie dédiée, rôle et salon privé :

ts
import { PermissionFlags } from "bloumechat";

const category = await guild.createCategory("Support");

const supportRole = await guild.createRole({
  name: "Support",
  color: "#3b82f6",
  permissions: PermissionFlags.VIEW_CHANNELS | PermissionFlags.SEND_MESSAGES | PermissionFlags.MANAGE_MESSAGES,
});

await guild.createChannel({
  name: "tickets",
  type: "TEXT",
  categoryId: category.id,
  isPrivate: true,
  permissionOverwrites: [
    { id: supportRole.id, type: "ROLE", allow: PermissionFlags.VIEW_CHANNELS, deny: 0n },
  ],
});

console.log(`Serveur "${guild.name}" configuré avec ${guild.memberCount} membre(s).`);
js
const { PermissionFlags } = require("bloumechat");

const category = await guild.createCategory("Support");

const supportRole = await guild.createRole({
  name: "Support",
  color: "#3b82f6",
  permissions: PermissionFlags.VIEW_CHANNELS | PermissionFlags.SEND_MESSAGES | PermissionFlags.MANAGE_MESSAGES,
});

await guild.createChannel({
  name: "tickets",
  type: "TEXT",
  categoryId: category.id,
  isPrivate: true,
  permissionOverwrites: [
    { id: supportRole.id, type: "ROLE", allow: PermissionFlags.VIEW_CHANNELS, deny: 0n },
  ],
});

console.log(`Serveur "${guild.name}" configuré avec ${guild.memberCount} membre(s).`);

Voir aussi ​

  • Channel / Category — structures des salons créés via cette page.
  • Role / RoleManager — gestion fine des rôles au-delà des raccourcis Guild.
  • InviteManager / EmojiManager — guild.invites / guild.emojis, la forme complète (1.5.0+).
  • Member — modération individuelle (kick, ban, gestion des rôles).
  • GuildManager — cache global accessible via client.guilds, fetch()/fetchAll()/create().
  • Guide Permissions — comprendre permissionOverwrites et la hiérarchie catégorie/salon.

SDK publié sous licence ISC.