Skip to content

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.

ts
import { EmbedBuilder } from "bloumechat";
const embed = new EmbedBuilder();
js
const { EmbedBuilder } = require("bloumechat");
const embed = new EmbedBuilder();

Constructeur ​

ts
new EmbedBuilder(data?: EmbedPayload)
ParamètreTypeRequisDescription
dataEmbedPayloadNonCharge utile initiale, utile pour pré-remplir le builder à partir d'un embed déjà sérialisé (par exemple reçu via message.embeds[0]).
ts
// Repartir d'un embed existant pour le modifier
const embed = new EmbedBuilder(message.embeds[0]).setColor("#ef4444");
js
const embed = new EmbedBuilder(message.embeds[0]).setColor("#ef4444");

Types associés ​

ts
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).

ts
embed.setTitle("Rapport système");
js
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ètreTypeRequisDescription
timestampDate | number | nullNonSi omis (undefined), utilise l'heure actuelle (new Date()). Si null, retire l'horodatage. Sinon, converti via new Date(timestamp).toISOString().
ts
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'horodatage
js
embed.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ètreTypeRequisDescription
colornumber | string | nullOuiUne couleur hexadécimale sous forme de chaîne ("#5e72e4", converti automatiquement en entier), un entier direct (0x5e72e4 ou 6189796), ou null pour réinitialiser.
ts
embed.setColor("#5e72e4");  // chaîne hex avec dièse
embed.setColor(0x5e72e4);   // entier hex
embed.setColor(null);       // retire la couleur
js
embed.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ètreTypeRequisDescription
options.textstringOui (si non null)Le texte du footer.
options.iconUrlstringNonURL d'une icône affichée à gauche du texte.
ts
embed.setFooter({ text: "Généré automatiquement", iconUrl: "https://cdn.bloume.chat/bot.png" });
js
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ètreTypeRequisDescription
options.namestringOui (si non null)Nom affiché.
options.urlstringNonRend le nom cliquable.
options.iconUrlstringNonPetite icône ronde affichée devant le nom.
ts
embed.setAuthor({
  name: message.author.username,
  iconUrl: message.author.avatar ?? undefined,
});
js
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ètreTypeDescription
fieldsEmbedField[] (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.
ts
embed.addFields(
  { name: "CPU", value: "20%", inline: true },
  { name: "Mémoire", value: "4.2 Go", inline: true },
  { name: "Uptime", value: "3 jours", inline: false }
);
js
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).

ts
// Réinitialise complètement les champs à chaque rafraîchissement
embed.setFields({ name: "Statut", value: "En ligne ✅" });
js
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ètreTypeRequisDescription
indexnumberOuiPosition de départ.
deleteCountnumberOuiNombre de champs à retirer à partir de index (0 pour une insertion pure).
fieldsEmbedField[] (rest)NonChamps à insérer à la place.
ts
// 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" });
js
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.

ts
const payload = embed.toJSON();
console.log(payload.title, payload.color);
js
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 ​

ts
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] });
js
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 ​

SDK publié sous licence ISC.