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é | Type | Description |
|---|---|---|
id | string | L'identifiant public (Snowflake) du serveur. |
name | string | Le nom du serveur. |
icon | string | null | L'URL de l'icône du serveur, ou null s'il n'y en a pas. |
ownerId | string | L'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. |
memberCount | number | Le nombre approximatif de membres présents (0 si absent des données reçues). |
roles | RoleManager | Le gestionnaire de rôles scopé à ce serveur, accessible via guild.roles.cache / guild.roles.create() / etc. |
invites | InviteManager | (1.5.0+) Gestionnaire d'invitations scopé à ce serveur — guild.invites.fetchAll() / .create() / .delete(). |
emojis | EmojiManager | (1.5.0+) Gestionnaire d'émojis personnalisés scopé à ce serveur — guild.emojis.fetchAll() / .create() / .delete(). |
Getters
| Getter | Type | Description |
|---|---|---|
members | MemberManager | Le gestionnaire global des membres, commun à tout le client (pas scopé par serveur — filtrez par member.serverId === guild.id si besoin). |
channels | Collection<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ètre | Type | Requis | Description |
|---|---|---|---|
name | string | Oui | Le 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.
edit(data: { name?: string; imageUrl?: string | null }): Promise<Guild>| Paramètre | Type | Requis | Description |
|---|---|---|---|
data.name | string | Non | Nouveau nom. |
data.imageUrl | string | null | Non | Nouvelle icône, ou null pour la retirer. |
Retour : Promise<Guild> — l'instance courante (this), mise à jour.
await guild.edit({ name: "Mon Serveur 2.0", imageUrl: "https://cdn.example.com/icon.png" });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.
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ètre | Type | Requis | Description |
|---|---|---|---|
options.name | string | Oui | Nom du salon. |
options.type | "TEXT" | "VOICE" | Oui | Type de salon. |
options.categoryId | string | Non | Identifiant de la catégorie parente. |
options.isPrivate | boolean | Non | Rend le salon privé dès la création. |
options.permissionOverwrites | Array<{ id, type, allow, deny }> | Non | Surcharges 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éé.
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 },
],
});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).
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ètre | Type | Requis | Description |
|---|---|---|---|
query | string | Oui | Le texte à rechercher. |
Retour : Promise<MemberSearchResultDTO[]>.
const results = await guild.searchMembers("jean");const results = await guild.searchMembers("jean");fetchBans(): Promise<BanDTO[]>
Récupère la liste des utilisateurs actuellement bannis du serveur.
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ètre | Type | Requis | Description |
|---|---|---|---|
userId | string | Oui | L'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.
const bans = await guild.fetchBans();
const target = bans.find((b) => b.user.name === "ancien-troll");
if (target) await guild.unbanMember(target.user.publicId);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.
createRole(options: { name: string; color?: string; permissions?: bigint | string; hoist?: boolean }): Promise<Role>| Paramètre | Type | Requis | Description |
|---|---|---|---|
options.name | string | Oui | Nom du rôle. |
options.color | string | Non | Couleur hexadécimale (ex. "#ff0000"). |
options.permissions | bigint | string | Non | Masque de permissions initial. |
options.hoist | boolean | Non | Affiche 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.
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>.
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);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).
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.
createInvite(channelId: string, options?: { maxAge?: number; maxUses?: number }): Promise<GuildInviteDTO>| Paramètre | Type | Requis | Description |
|---|---|---|---|
channelId | string | Oui | Le salon cible de l'invitation. |
options.maxAge | number | Non | Durée de validité en secondes. |
options.maxUses | number | Non | Nombre 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ètre | Type | Requis | Description |
|---|---|---|---|
name | string | Oui | Nom de la catégorie. |
Retour : Promise<Category>.
const category = await guild.createCategory("Support");
const channel = await guild.createChannel({ name: "tickets", type: "TEXT", categoryId: category.id });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.
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ètre | Type | Requis | Défaut | Description |
|---|---|---|---|---|
options.limit | number | Non | 50 | Nombre d'entrées à récupérer. |
options.action | string | Non | — | Filtre par type d'action. |
Retour : Promise<AuditLogEntryDTO[]>.
const logs = await guild.fetchAuditLogs({ limit: 20, action: "MEMBER_KICK" });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.
const vanity = await guild.fetchVanityURL();
console.log(vanity ? `bloumechat.com/${vanity}` : "Pas d'URL personnalisée.");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.
setNotifications(settings: { muted?: boolean; muteUntil?: string | null; mentionsOnly?: boolean }): Promise<void>| Paramètre | Type | Requis | Description |
|---|---|---|---|
settings.muted | boolean | Non | Coupe toutes les notifications du serveur. |
settings.muteUntil | string | null | Non | Coupe les notifications jusqu'à une date ISO donnée. |
settings.mentionsOnly | boolean | Non | Ne notifie que sur mention directe. |
Retour : Promise<void>.
await guild.setNotifications({ mentionsOnly: true });
await guild.markAsRead();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é :
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).`);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
permissionOverwriteset la hiérarchie catégorie/salon.
