EmbedBuilder
Classe utilitaire fluente permettant de construire des embeds riches à envoyer dans les salons ou via un webhook. Toutes les méthodes de construction renvoient this, ce qui permet de les chaîner.
EmbedBuilder n'hérite pas de Base — c'est une classe autonome, sans référence à un client, instanciable indépendamment de toute connexion.
Notation des signatures
Les signatures sont écrites en notation TypeScript, mais s'appellent à l'identique en JavaScript — voir Utiliser le SDK en JavaScript.
import { EmbedBuilder } from "bloumechat";
const embed = new EmbedBuilder();const { EmbedBuilder } = require("bloumechat");
const embed = new EmbedBuilder();Constructeur
new EmbedBuilder(data?: EmbedPayload)| Paramètre | Type | Requis | Description |
|---|---|---|---|
data | EmbedPayload | Non | Charge utile initiale, utile pour pré-remplir le builder à partir d'un embed déjà sérialisé (par exemple reçu via message.embeds[0]). |
// Repartir d'un embed existant pour le modifier
const embed = new EmbedBuilder(message.embeds[0]).setColor("#ef4444");const embed = new EmbedBuilder(message.embeds[0]).setColor("#ef4444");Types associés
interface EmbedAuthor {
name: string;
url?: string;
iconUrl?: string;
}
interface EmbedFooter {
text: string;
iconUrl?: string;
}
interface EmbedField {
name: string;
value: string;
inline?: boolean;
}
interface EmbedPayload {
title?: string;
description?: string;
url?: string;
timestamp?: string;
color?: number | string;
footer?: EmbedFooter;
image?: { url: string };
thumbnail?: { url: string };
author?: EmbedAuthor;
fields?: EmbedField[];
}Méthodes
Toutes les méthodes ci-dessous renvoient this (le builder), sauf toJSON().
setTitle(title: string | null): this
Définit le titre de l'embed, affiché en gras en tête. Passer null retire le titre (supprime la clé title de la charge utile).
embed.setTitle("Rapport système");embed.setTitle("Rapport système");setDescription(description: string | null): this
Définit le corps de texte principal (la description). Passer null la retire.
setURL(url: string | null): this
Définit l'URL cliquable associée au titre (le titre devient un lien). Sans titre défini, cette URL n'a pas d'effet visuel. Passer null la retire.
setTimestamp(timestamp?: Date | number | null): this
Définit l'horodatage affiché en bas de l'embed (aux côtés du footer).
| Paramètre | Type | Requis | Description |
|---|---|---|---|
timestamp | Date | number | null | Non | Si omis (undefined), utilise l'heure actuelle (new Date()). Si null, retire l'horodatage. Sinon, converti via new Date(timestamp).toISOString(). |
embed.setTimestamp(); // heure actuelle
embed.setTimestamp(Date.now()); // depuis un timestamp epoch
embed.setTimestamp(new Date(2026, 0, 1)); // date explicite
embed.setTimestamp(null); // retire l'horodatageembed.setTimestamp();
embed.setTimestamp(Date.now());
embed.setTimestamp(new Date(2026, 0, 1));
embed.setTimestamp(null);setColor(color: number | string | null): this
Définit la couleur de la barre latérale gauche de l'embed.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
color | number | string | null | Oui | Une couleur hexadécimale sous forme de chaîne ("#5e72e4", converti automatiquement en entier), un entier direct (0x5e72e4 ou 6189796), ou null pour réinitialiser. |
embed.setColor("#5e72e4"); // chaîne hex avec dièse
embed.setColor(0x5e72e4); // entier hex
embed.setColor(null); // retire la couleurembed.setColor("#5e72e4");
embed.setColor(0x5e72e4);
embed.setColor(null);Seules les chaînes préfixées par # sont converties
Si vous passez une chaîne qui ne commence pas par # (par exemple un nom de couleur CSS comme "red"), elle est stockée telle quelle sans conversion — le rendu dépend alors du client BloumeChat, qui n'interprète que les entiers ou les chaînes hexadécimales #rrggbb. Préférez toujours #rrggbb ou un entier.
setFooter(options: EmbedFooter | null): this
Définit le texte de bas de page et, optionnellement, une petite icône à côté.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
options.text | string | Oui (si non null) | Le texte du footer. |
options.iconUrl | string | Non | URL d'une icône affichée à gauche du texte. |
embed.setFooter({ text: "Généré automatiquement", iconUrl: "https://cdn.bloume.chat/bot.png" });embed.setFooter({ text: "Généré automatiquement", iconUrl: "https://cdn.bloume.chat/bot.png" });setImage(url: string | null): this
Définit une grande image affichée en bas du corps de l'embed. Passer null la retire.
setThumbnail(url: string | null): this
Définit une vignette (petite image) affichée en haut à droite de l'embed. Passer null la retire.
setAuthor(options: EmbedAuthor | null): this
Définit la ligne d'auteur affichée tout en haut de l'embed, au-dessus du titre.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
options.name | string | Oui (si non null) | Nom affiché. |
options.url | string | Non | Rend le nom cliquable. |
options.iconUrl | string | Non | Petite icône ronde affichée devant le nom. |
embed.setAuthor({
name: message.author.username,
iconUrl: message.author.avatar ?? undefined,
});embed.setAuthor({
name: message.author.username,
iconUrl: message.author.avatar || undefined,
});addFields(...fields: EmbedField[]): this
Ajoute un ou plusieurs champs à la suite des champs existants (ne remplace pas les champs déjà définis).
| Paramètre | Type | Description |
|---|---|---|
fields | EmbedField[] (rest) | Chaque champ : { name: string, value: string, inline?: boolean }. inline: true place plusieurs champs côte à côte si la largeur d'affichage le permet. |
embed.addFields(
{ name: "CPU", value: "20%", inline: true },
{ name: "Mémoire", value: "4.2 Go", inline: true },
{ name: "Uptime", value: "3 jours", inline: false }
);embed.addFields(
{ name: "CPU", value: "20%", inline: true },
{ name: "Mémoire", value: "4.2 Go", inline: true },
{ name: "Uptime", value: "3 jours", inline: false }
);setFields(...fields: EmbedField[]): this
Remplace tous les champs actuels par la nouvelle liste fournie (contrairement à addFields, qui accumule).
// Réinitialise complètement les champs à chaque rafraîchissement
embed.setFields({ name: "Statut", value: "En ligne ✅" });embed.setFields({ name: "Statut", value: "En ligne ✅" });spliceFields(index: number, deleteCount: number, ...fields: EmbedField[]): this
Insère, remplace ou supprime des champs à un index donné — sémantique identique à Array.prototype.splice.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
index | number | Oui | Position de départ. |
deleteCount | number | Oui | Nombre de champs à retirer à partir de index (0 pour une insertion pure). |
fields | EmbedField[] (rest) | Non | Champs à insérer à la place. |
// Remplace le 2e champ (index 1) par un nouveau, sans toucher aux autres
embed.spliceFields(1, 1, { name: "RAM", value: "8 Go" });
// Insère un champ en tête sans rien supprimer
embed.spliceFields(0, 0, { name: "Version", value: "1.4.0" });embed.spliceFields(1, 1, { name: "RAM", value: "8 Go" });
embed.spliceFields(0, 0, { name: "Version", value: "1.4.0" });toJSON(): EmbedPayload
Sérialise le builder en un objet EmbedPayload brut, prêt à être envoyé par le SDK ou par un appel fetch direct (par exemple webhook.send(), qui n'accepte pas les instances d'EmbedBuilder directement).
Retour : EmbedPayload — une copie superficielle de l'état interne ({ ...this.data }), pas une référence live.
const payload = embed.toJSON();
console.log(payload.title, payload.color);const payload = embed.toJSON();
console.log(payload.title, payload.color);Vous n'avez généralement pas besoin d'appeler toJSON() vous-même
channel.send(), message.reply() et message.edit() acceptent directement une instance EmbedBuilder dans leur tableau embeds et appellent toJSON() en interne. toJSON() n'est nécessaire explicitement que pour des appels bas niveau comme webhook.send().
Exemple complet
import { EmbedBuilder } from "bloumechat";
const embed = new EmbedBuilder()
.setTitle("Rapport système")
.setDescription("Statistiques des serveurs de jeu.")
.setColor("#5e72e4")
.setThumbnail("https://cdn.bloume.chat/logo.png")
.addFields(
{ name: "CPU", value: "20%", inline: true },
{ name: "Mémoire", value: "4.2 Go", inline: true }
)
.setTimestamp()
.setFooter({ text: "Généré automatiquement" });
await message.reply({ content: "Rapport complet :", embeds: [embed] });const { EmbedBuilder } = require("bloumechat");
const embed = new EmbedBuilder()
.setTitle("Rapport système")
.setDescription("Statistiques des serveurs de jeu.")
.setColor("#5e72e4")
.setThumbnail("https://cdn.bloume.chat/logo.png")
.addFields(
{ name: "CPU", value: "20%", inline: true },
{ name: "Mémoire", value: "4.2 Go", inline: true }
)
.setTimestamp()
.setFooter({ text: "Généré automatiquement" });
await message.reply({ content: "Rapport complet :", embeds: [embed] });Voir aussi
- Channel.send() / Message.reply() / Message.edit() — méthodes qui acceptent un
EmbedBuilderdirectement. - Webhook.send() — nécessite un appel explicite à
.toJSON(). - Message — la propriété
embedssur un message reçu.
