Skip to content

Channel ​

Représente un salon textuel ou vocal sur BloumeChat. Hérite de Base.

Channel est aussi la classe parente de DMChannel — toutes les méthodes documentées ici sont donc également disponibles sur un salon de messages privés.

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 salon.
namestringLe nom du salon.
typestringLe type de salon : "TEXT", "VOICE", "DM", "GROUP_DM", "ANNOUNCEMENT"…
serverIdstring | nullL'identifiant public du serveur parent, ou null pour les DMs/groupes.
webhooksWebhookManager(1.5.0+) Gestionnaire de webhooks scopé à ce salon — channel.webhooks.fetchAll() / .create() / .delete().

Méthodes ​

Messagerie ​

send(content, embeds?): Promise<Message> ​

Envoie un message dans ce salon.

ts
send(
  content: string | { content?: string; embeds?: Array<EmbedBuilder | EmbedPayload | Record<string, unknown>>; replyToId?: string },
  embeds?: Array<EmbedBuilder | EmbedPayload | Record<string, unknown>>
): Promise<Message>
ParamètreTypeRequisDescription
contentstring | MessagePayloadOuiUne chaîne de texte simple, ou un objet { content?, embeds?, replyToId? } pour un message complet.
embedsArray<EmbedBuilder | EmbedPayload | Record<string, unknown>>NonTableau d'EmbedBuilder ou de payloads bruts — utilisé seulement quand content est une chaîne.

Retour : Promise<Message> — le message tel que confirmé par le serveur (avec son id définitif).

Comportement et erreurs :

  • Délègue à client.sendMessage(), qui exige une connexion socket active (lève BloumeChatAuthError sinon).
  • Un contenu vide et aucun embed lève une BloumeChatAuthError ("sendMessage requires non-empty content or at least one embed.") avant même d'émettre sur le socket.
  • La promesse rejette après 10 secondes si le serveur n'a pas confirmé la réception (Error("sendMessage timeout after 10s")).
ts
// Message textuel simple
await channel.send("Salut tout le monde !");

// Avec un embed
import { EmbedBuilder } from "bloumechat";
const embed = new EmbedBuilder().setTitle("Titre").setDescription("Description");
await channel.send("Voici les infos :", [embed]);

// Payload complet avec réponse à un message précis
await channel.send({ content: "Merci !", replyToId: someMessage.id });
js
await channel.send("Salut tout le monde !");

const { EmbedBuilder } = require("bloumechat");
const embed = new EmbedBuilder().setTitle("Titre").setDescription("Description");
await channel.send("Voici les infos :", [embed]);

await channel.send({ content: "Merci !", replyToId: someMessage.id });

fetchMessages(limit?, before?): Promise<Message[]> ​

Récupère l'historique des messages du salon, du plus récent au plus ancien.

ts
fetchMessages(limit = 50, before?: string): Promise<Message[]>
ParamètreTypeRequisDéfautDescription
limitnumberNon50Nombre de messages à récupérer (maximum 100 côté API).
beforestringNon—Identifiant d'un message : ne renvoie que les messages envoyés avant lui — utile pour paginer vers l'arrière.

Retour : Promise<Message[]> — tableau vide si le salon n'a aucun message.

ts
const recent = await channel.fetchMessages(20);
const older = await channel.fetchMessages(20, recent[recent.length - 1]?.id);
js
const recent = await channel.fetchMessages(20);
const older = await channel.fetchMessages(20, recent[recent.length - 1] && recent[recent.length - 1].id);

bulkDelete(messageIds: string[]): Promise<void> ​

Supprime plusieurs messages en une seule requête.

ParamètreTypeRequisDescription
messageIdsstring[]OuiListe des identifiants de messages à supprimer.

Retour : Promise<void>. Nécessite la permission MANAGE_MESSAGES.

ts
const messages = await channel.fetchMessages(100);
const spam = messages.filter((m) => m.author.bot && m.content.includes("http"));
await channel.bulkDelete(spam.map((m) => m.id));
js
const messages = await channel.fetchMessages(100);
const spam = messages.filter((m) => m.author.bot && m.content.includes("http"));
await channel.bulkDelete(spam.map((m) => m.id));

search(query, options?): Promise<Message[]> ​

Effectue une recherche textuelle parmi les messages du salon.

ts
search(query: string, options?: { limit?: number; before?: string; after?: string }): Promise<Message[]>
ParamètreTypeRequisDescription
querystringOuiLe texte à rechercher.
options.limitnumberNonNombre maximum de résultats.
options.beforestringNonLimite la recherche aux messages avant cet identifiant.
options.afterstringNonLimite la recherche aux messages après cet identifiant.

Retour : Promise<Message[]>.

ts
const results = await channel.search("erreur 500", { limit: 10 });
js
const results = await channel.search("erreur 500", { limit: 10 });

fetchPins(): Promise<Message[]> ​

Récupère la liste des messages épinglés dans ce salon.

Retour : Promise<Message[]>.

ts
const pins = await channel.fetchPins();
console.log(`${pins.length} message(s) épinglé(s).`);
js
const pins = await channel.fetchPins();
console.log(`${pins.length} message(s) épinglé(s).`);

Indicateurs de frappe ​

sendTyping(): void ​

Émet un indicateur "en train d'écrire…" dans ce salon, visible pendant quelques secondes côté client.

Retour : void (synchrone — émission socket sans accusé de réception attendu). Lève BloumeChatAuthError si le socket n'est pas connecté.

stopTyping(): void ​

Arrête manuellement l'indicateur de frappe avant son expiration naturelle.

Retour : void. Mêmes conditions d'erreur que sendTyping().

ts
channel.sendTyping();
const result = await computeExpensiveAnswer();
channel.stopTyping();
await channel.send(result);
js
channel.sendTyping();
const result = await computeExpensiveAnswer();
channel.stopTyping();
await channel.send(result);

Voix ​

Référence complète

Voir le guide Salons vocaux et la Référence API — Voix pour l'architecture (maillage WebRTC pair-à-pair), la lecture audio, et tous les événements.

join(options?): Promise<VoiceConnection> (2.1.0+) ​

Rejoint ce salon (doit être de type "VOICE"). Quitte d'abord tout autre salon vocal déjà rejoint.

ts
join(options?: { selfMute?: boolean; selfDeaf?: boolean; timeoutMs?: number }): Promise<VoiceConnection>

Retour : Promise<VoiceConnection>. Lève BloumeChatVoiceError si type !== "VOICE" ou si la confirmation du serveur n'arrive pas avant timeoutMs (défaut 15s).

ts
const connection = await voiceChannel.join();
connection.play("https://example.com/musique.mp3");
js
const connection = await voiceChannel.join();
connection.play("https://example.com/musique.mp3");

leave(): void (2.1.0+) ​

Quitte ce salon vocal si le bot y est actuellement connecté. Ne fait rien sinon (y compris sur un salon non-vocal).

Gestion du salon ​

edit(data): Promise<void> ​

Modifie le nom et/ou la description du salon.

ts
edit(data: { name?: string; description?: string | null }): Promise<void>
ParamètreTypeRequisDescription
data.namestringNonNouveau nom.
data.descriptionstring | nullNonNouvelle description, ou null pour la retirer.

Retour : Promise<void>. Seul this.name est mis à jour localement après succès (la description n'est pas stockée sur l'instance Channel).

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

Raccourci pour edit({ name }).

delete(): Promise<void> ​

Supprime définitivement le salon, avec tout son historique de messages.

Retour : Promise<void>.

duplicate(): Promise<Channel> ​

Duplique le salon, en copiant son type, ses paramètres et ses permissions.

Retour : Promise<Channel> — la nouvelle instance créée.

ts
await channel.setName("annonces-2026");
const copy = await channel.duplicate();
console.log(`Copie créée : ${copy.id}`);
js
await channel.setName("annonces-2026");
const copy = await channel.duplicate();
console.log(`Copie créée : ${copy.id}`);

Invitations ​

createInvite(options?): Promise<GuildInviteDTO> ​

Génère une invitation ciblant spécifiquement ce salon.

ts
createInvite(options?: { maxAge?: number; maxUses?: number }): Promise<GuildInviteDTO>

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 };
}
ParamètreTypeRequisDescription
options.maxAgenumberNonDurée de validité en secondes.
options.maxUsesnumberNonNombre maximum d'utilisations.

Retour : Promise<GuildInviteDTO>. Voir l'encadré sur Invite concernant la différence entre cette forme et une instance Invite.

ts
const invite = await channel.createInvite({ maxAge: 86_400, maxUses: 10 });
console.log(`https://bloumechat.com/invite/${invite.code}`);
js
const invite = await channel.createInvite({ maxAge: 86400, maxUses: 10 });
console.log(`https://bloumechat.com/invite/${invite.code}`);

Permissions ​

fetchPermissionOverrides(): Promise<PermissionOverrideDTO[]> ​

Récupère les surcharges de permissions propres à ce salon (indépendantes de celles de sa catégorie parente).

ts
interface PermissionOverrideDTO {
  id: string;
  type: "ROLE" | "MEMBER";
  targetId: string;
  targetName: string;
  allow: string;
  deny: string;
}

Retour : Promise<PermissionOverrideDTO[]>.

editPermissions(targetId, type, options): Promise<void> ​

Crée ou met à jour une surcharge de permissions pour un rôle ou un membre sur ce salon.

ts
editPermissions(
  targetId: string,
  type: "ROLE" | "MEMBER",
  options: { allow: bigint | string; deny: bigint | string }
): Promise<void>
ParamètreTypeRequisDescription
targetIdstringOuiIdentifiant du rôle ou du membre ciblé.
type"ROLE" | "MEMBER"OuiType de cible.
options.allowbigint | stringOuiMasque des permissions explicitement autorisées.
options.denybigint | stringOuiMasque des permissions explicitement refusées.

Retour : Promise<void>.

ts
import { PermissionFlags } from "bloumechat";

await channel.editPermissions("ROLE_ID", "ROLE", {
  allow: PermissionFlags.VIEW_CHANNELS | PermissionFlags.SEND_MESSAGES,
  deny: PermissionFlags.MENTION_EVERYONE,
});
js
const { PermissionFlags } = require("bloumechat");

await channel.editPermissions("ROLE_ID", "ROLE", {
  allow: PermissionFlags.VIEW_CHANNELS | PermissionFlags.SEND_MESSAGES,
  deny: PermissionFlags.MENTION_EVERYONE,
});

deletePermissionOverride(overrideId: string): Promise<void> ​

Supprime une surcharge de permissions existante par son identifiant.

Retour : Promise<void>.

syncPermissions(): Promise<void> ​

Synchronise les permissions de ce salon avec celles de sa catégorie parente, en écrasant ses surcharges propres.

Retour : Promise<void>.

Webhooks ​

Depuis la 1.5.0 : channel.webhooks

fetchWebhooks()/createWebhook() ci-dessous délèguent maintenant à channel.webhooks (WebhookManager), qui expose aussi cache et delete(id). Les deux formes restent équivalentes.

fetchWebhooks(): Promise<Webhook[]> ​

Récupère tous les webhooks configurés dans ce salon.

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

createWebhook(options): Promise<Webhook> ​

Crée un nouveau webhook dans ce salon.

ts
createWebhook(options: { name: string; avatarUrl?: string }): Promise<Webhook>
ParamètreTypeRequisDescription
options.namestringOuiNom d'affichage du webhook.
options.avatarUrlstringNonAvatar par défaut du webhook.

Retour : Promise<Webhook> — l'instance créée, avec son token disponible immédiatement (seul moment où il l'est, en dehors d'une récupération explicite avec token).

ts
const webhook = await channel.createWebhook({ name: "CI/CD" });
await webhook.send("Déploiement terminé ✅");
js
const webhook = await channel.createWebhook({ name: "CI/CD" });
await webhook.send("Déploiement terminé ✅");

Voir aussi ​

SDK publié sous licence ISC.