Passer au contenu principal
Les embeds étaient écrits sur place dans Envoyer des messages. Quand le même embed sert à une commande, un événement et un bouton, l’écrire trois fois est une erreur qui attend son heure. Cette page le déplace dans un fichier, puis montre l’autre façon qu’a Discord de mettre en page un message.

Un fichier d’embed

Un embed utilisé à plusieurs endroits se déclare avec embed() et s’exporte. C’est une fonction de ce qu’il affiche, ou l’embed lui-même quand il ne change jamais. Créez src/components/card.ts :
src/components/card.ts
Puis utilisez-le depuis une commande :
src/commands/card.ts
Et depuis l’événement d’accueil, de la même façon : channel.send({ embeds: [card(member)] }). card(member) renvoie l’embed, vérifié par rapport aux limites de Discord au moment de l’envoi. Un fichier d’embed est une fonction comme une autre, à une différence près : il est vérifié et typé comme un embed. Un titre de plus de 256 caractères, une couleur qui n’est pas un nombre, sont des erreurs avec la limite dans le message. Contrairement aux boutons et aux formulaires, un embed n’est jamais cliqué, donc il n’a ni run ni nom à renvoyer : le déclarer en fait seulement une pièce à importer là où un message en a besoin.
member.avatarURL() est l’image du membre, et member.highestRole.color la couleur de son rôle le plus haut, sous forme de nombre ; 0 veut dire pas de couleur, d’où le ||. Le paramètre typé, member: GuildMember, est le seul endroit de ce tutoriel où vous écrivez un type : un fichier d’embed est une fonction de ce que vous voulez lui donner, alors vous dites ce qu’il prend.

Des messages faits de composants

Discord a une seconde façon de mettre en page un message, sans content ni embeds : un message fait uniquement de composants. Des textes, des sections avec une miniature ou un bouton à côté, des galeries d’images, des séparateurs, et des conteneurs avec une ligne de couleur comme un embed. Ils s’écrivent avec des helpers importés de chapterjs, là où est le message :
src/commands/profile-card.ts
Dès qu’un message contient l’une de ces pièces, Discord n’affiche que des composants : content et embeds sont refusés, et le framework le dit avant l’envoi. Mettez le texte dans text(), qui accepte le Markdown, et l’apparence d’un embed dans un container(). Vos boutons et menus y vont aussi, dans une row() ou seuls comme accessoire d’une section. Un message contient 40 composants au plus, ceux qui sont imbriqués compris.

Lequel utiliser

Les embeds sont plus simples et suffisent pour la plupart des choses : un titre, quelques champs, une image. Les messages en composants sont pour les mises en page qu’un embed ne sait pas faire : un bouton à côté d’un paragraphe, plusieurs images en grille, un fichier affiché à un endroit précis. Prenez les embeds par défaut, et passez aux helpers de mise en page quand un embed ne suffit plus.

Récapitulatif

  • Un embed utilisé plusieurs fois est embed(...), exporté : une fonction de ce qu’il affiche, ou l’embed lui-même.
  • text(), section(), container() et les autres construisent un message fait de composants, sans content ni embeds.
  • Les deux sont vérifiés par rapport aux limites de Discord avant tout envoi.

Menus et conversations

Une commande dans le menu du clic droit, et une question qui attend sa réponse.

Guide : Embeds et mise en page

Chaque helper, en bref.