Embeds de Message
Si vous avez été sur Discord un peu, il y a des chances que vous ayez vu ces messages spéciaux, souvent envoyés par des bots. Ils peuvent avoir une bordure colorée, des images intégrées, des champs de texte et d'autres propriétés fantaisistes.
Dans la section suivante, nous expliquerons comment composer un embed, l'envoyer, et ce que vous devez être conscient pendant ce temps.
Aperçu de l'Embed
Voici un exemple de ce à quoi un embed peut ressembler. Nous allons examiner la construction des embeds dans la prochaine partie de ce guide.
Utiliser le constructeur d'embed
discord.js dispose de la classe utilitaire EmbedBuilder pour la construction et la manipulation faciles des embeds.
// au sommet de votre fichier
const { EmbedBuilder } = require('discord.js');
// dans une commande, un écouteur d'événement, etc.
const exampleEmbed = new EmbedBuilder()
.setColor(0x0099ff)
.setTitle('Un titre')
.setURL('https://discord.js.org/')
.setAuthor({ name: 'Un nom', iconURL: 'https://i.imgur.com/AfFp7pu.png', url: 'https://discord.js.org' })
.setDescription('Une description ici')
.setThumbnail('https://i.imgur.com/AfFp7pu.png')
.addFields(
{ name: 'Titre de champ régulier', value: 'Une valeur ici' },
{ name: '\u200B', value: '\u200B' },
{ name: 'Titre de champ en ligne', value: 'Une valeur ici', inline: true },
{ name: 'Titre de champ en ligne', value: 'Une valeur ici', inline: true },
)
.addFields({ name: 'Titre de champ en ligne', value: 'Une valeur ici', inline: true })
.setImage('https://i.imgur.com/AfFp7pu.png')
.setTimestamp()
.setFooter({ text: 'Du texte de pied ici', iconURL: 'https://i.imgur.com/AfFp7pu.png' });
channel.send({ embeds: [exampleEmbed] });Vous n'avez pas besoin d'inclure tous les éléments présentés ci-dessus. Si vous souhaitez un embed plus simple, omettez-en.
La méthode .setColor() accepte une ColorResolvable, par exemple un entier, une chaîne de couleur HEX, un tableau de valeurs RVB ou des chaînes de couleur spécifiques.
Pour ajouter un champ vierge à l'embed, vous pouvez utiliser .addFields({ name: '\u200b', value: '\u200b' }).
L'exemple ci-dessus chaîne les méthodes de manipulation à l'objet EmbedBuilder nouvellement créé.
Si vous souhaitez modifier l'embed en fonction de conditions, vous devez le référencer en tant que constante exampleEmbed (pour notre exemple).
const exampleEmbed = new EmbedBuilder().setTitle('Un titre');
if (message.author.bot) {
exampleEmbed.setColor(0x7289da);
}Utiliser un objet embed
const exampleEmbed = {
color: 0x0099ff,
title: 'Un titre',
url: 'https://discord.js.org',
author: {
name: 'Un nom',
icon_url: 'https://i.imgur.com/AfFp7pu.png',
url: 'https://discord.js.org',
},
description: 'Une description ici',
thumbnail: {
url: 'https://i.imgur.com/AfFp7pu.png',
},
fields: [
{
name: 'Titre de champ régulier',
value: 'Une valeur ici',
},
{
name: '\u200b',
value: '\u200b',
inline: false,
},
{
name: 'Titre de champ en ligne',
value: 'Une valeur ici',
inline: true,
},
{
name: 'Titre de champ en ligne',
value: 'Une valeur ici',
inline: true,
},
{
name: 'Titre de champ en ligne',
value: 'Une valeur ici',
inline: true,
},
],
image: {
url: 'https://i.imgur.com/AfFp7pu.png',
},
timestamp: new Date().toISOString(),
footer: {
text: 'Du texte de pied ici',
icon_url: 'https://i.imgur.com/AfFp7pu.png',
},
};
channel.send({ embeds: [exampleEmbed] });Vous n'avez pas besoin d'inclure tous les éléments présentés ci-dessus. Si vous souhaitez un embed plus simple, omettez-en.
Si vous souhaitez modifier l'objet embed en fonction de conditions, vous devez le référencer directement (comme exampleEmbed pour notre exemple). Vous pouvez ensuite (ré)attribuer les valeurs des propriétés comme avec n'importe quel autre objet.
const exampleEmbed = { title: 'Un titre' };
if (message.author.bot) {
exampleEmbed.color = 0x7289da;
}Attacher des images
Vous pouvez télécharger des images avec votre message intégré et les utiliser comme source pour les champs embed qui supportent les URL d'images en construisant un AttachmentBuilder à partir d'eux pour envoyer en tant qu'option de message aux côtés de l'embed. Le paramètre de pièce jointe prend une BufferResolvable ou Stream incluant l'URL d'une image externe.
Vous pouvez ensuite référencer et utiliser les images dans l'embed lui-même avec attachment://fileName.extension.
Si vous prévoyez d'attacher la même image à plusieurs reprises, considérez l'hébergement en ligne et la fourniture de l'URL dans le champ embed respectif à la place. Cela rend également votre bot plus rapide car il n'a pas besoin de télécharger l'image avec chaque réponse selon son dépendance.
Utiliser l'EmbedBuilder
const { AttachmentBuilder, EmbedBuilder } = require('discord.js');
// ...
const file = new AttachmentBuilder('../assets/discordjs.png');
const exampleEmbed = new EmbedBuilder().setTitle('Un titre').setImage('attachment://discordjs.png');
channel.send({ embeds: [exampleEmbed], files: [file] });Utiliser un objet embed
const { AttachmentBuilder } = require('discord.js');
// ...
const file = new AttachmentBuilder('../assets/discordjs.png');
const exampleEmbed = {
title: 'Un titre',
image: {
url: 'attachment://discordjs.png',
},
};
channel.send({ embeds: [exampleEmbed], files: [file] });Si les images ne s'affichent pas dans l'embed mais en dehors, vérifiez bien votre syntaxe pour vous assurer qu'elle est comme indiquée ci-dessus.
Renvoi et édition
Nous allons maintenant expliquer comment éditer le contenu des messages intégrés et renvoyer un embed reçu.
Renvoi d'un embed reçu
Pour transférer un embed reçu, vous le récupérez du tableau d'embed des messages (message.embeds) et le transmettez à l'EmbedBuilder, puis il peut être édité avant d'être renvoyé.
Nous créons un nouvel Embed à partir de EmbedBuilder ici car les embeds sont immuables (leurs valeurs ne peuvent pas être modifiées directement).
const receivedEmbed = message.embeds[0];
const exampleEmbed = EmbedBuilder.from(receivedEmbed).setTitle('Nouveau titre');
channel.send({ embeds: [exampleEmbed] });Édition du contenu du message intégré
Pour éditer le contenu d'un embed, vous devez transmettre une nouvelle structure EmbedBuilder ou un objet embed à la méthode .edit() des messages.
const exampleEmbed = new EmbedBuilder().setTitle('Un titre').setDescription('Description après l\'édition');
message.edit({ embeds: [exampleEmbed] });Si vous souhaitez construire les nouvelles données embed sur un modèle embed précédemment envoyé, assurez-vous de lire les mises en garde de la section précédente.
Notes
- Pour afficher les champs côte à côte, vous avez besoin d'au moins deux champs consécutifs définis sur
inline - L'horodatage s'ajustera automatiquement au fuseau horaire en fonction de l'appareil de l'utilisateur
- Les mentions de toute sorte dans les embeds ne s'afficheront correctement que dans les descriptions embed et les valeurs de champ
- Les mentions dans les embeds ne déclencheront pas de notification
- Les embeds permettent les liens masqués (par exemple
[Guide](https://discordjs.guide/ 'texte de survol optionnel')), mais uniquement dans la description et les valeurs des champs - Discord peut supprimer les caractères du contenu des messages. Consultez la documentation pour plus d'informations
Limites des embeds
Il y a quelques limites à connaître lors de la planification de vos embeds en raison des limites de l'API. Voici une référence rapide à laquelle vous pouvez revenir :
- Les titres embed sont limités à 256 caractères
- Les descriptions embed sont limitées à 4096 caractères
- Il peut y avoir jusqu'à 25 champs
- Le nom d'un champ est limité à 256 caractères et sa valeur à 1024 caractères
- Le texte de pied est limité à 2048 caractères
- Le nom de l'auteur est limité à 256 caractères
- La somme de tous les caractères de toutes les structures embed dans un message ne doit pas dépasser 6000 caractères
- 10 embeds peuvent être envoyés par message
Source : Documentation API Discord
Intents Gateway
Les Intents Gateway ont été introduits par Discord afin que les développeurs de bots puissent choisir quels événements leur bot reçoit en fonction des données..
Partiels
Les Structures Partielles ont été introduites dans la bibliothèque dans la version 12 et sont optionnellement reçues chaque fois qu'il y a données...