Passer au contenu principal
Tout ce qui peut recevoir un message a un send() : un salon, un utilisateur, un membre, un webhook. Un message est un texte, ou un objet avec tout ce qu’il contient.
src/commands/announce.ts
C’est tout : channel est le salon où la commande a été utilisée, et send() y publie. Le message est vérifié avant de partir (un texte de plus de 2000 caractères, trop d’embeds…) : une erreur est une erreur dans votre code avec un message clair, pas un refus de Discord.
Chaque champ que prend un message est dans Options des messages, et tout ce qu’a un message que vous recevez est dans Message.

Où va un message

Ils prennent tous la même chose. Un texte :
Ou un objet, quand le message a plus qu’un texte, ou est envoyé autrement :
Un message a besoin d’au moins un contenu, un embed, un fichier, un composant, un sticker ou un sondage. Tout le reste est facultatif, et chaque send() renvoie le Message envoyé, pour que vous puissiez y réagir, l’épingler ou le modifier plus tard.

Répondre

message.reply() répond à un message dans son salon : Discord affiche le message auquel il répond au-dessus du vôtre.
Une réponse notifie l’auteur du message par défaut. Pour répondre sans notifier, passez allowedMentions :
send() peut aussi répondre : passez le message (ou son identifiant) en replyTo.

Les embeds

Un embed est un encadré avec un titre, une description, des champs, une image, un pied… Passez-en jusqu’à 10 dans embeds :
Discord limite ce que contient un embed (256 caractères pour un titre, 25 champs, 6000 caractères pour tous les embeds d’un message…). Dépasser une limite lève une erreur avant tout envoi, avec le champ et la limite dans le message :
Les limites sont listées dans Limites des embeds.

Fichiers

Les images et documents qu’envoie votre bot vivent dans le dossier public/ de votre projet, à côté de src/. asset() en choisit un : votre éditeur liste chaque fichier du dossier pendant que vous tapez, et un chemin qui n’existe pas est souligné.
src/commands/chart.ts
Le fichier est lu au moment de l’envoi du message, jamais avant. Un fichier envoyé sous un autre nom prend name ; spoiler: true le cache jusqu’à ce qu’on clique dessus. Deux fichiers d’un même message ne peuvent pas avoir le même nom : Discord les distingue par lui. Dans chapterjs dev, un fichier ajouté à public/ est proposé par l’éditeur tout de suite :
Un fichier fabriqué par votre code (un graphique dessiné à la volée, un texte) se donne avec son contenu : un texte, un Buffer, un Uint8Array, un ArrayBuffer ou un Blob. Jusqu’à 10 fichiers par message, de public/ ou fabriqués, au total. Un texte trop long pour un message peut aller dans un fichier à la place :

Les mentions

Une mention est un texte : écrivez-la dans content avec les helpers de ChapterJS, ou avec ce que donne une structure mise dans un texte (${member}, ${channel}, ${role}).
Par défaut, un message notifie tous ceux qu’il mentionne, rôles et @everyone compris. allowedMentions dit qui reçoit vraiment une notification, quoi que contienne le texte :
  • parse est la liste des sortes de mentions du texte qui notifient : ['users'], ['roles'], ['everyone'], ou [] pour personne.
  • users et roles listent les identifiants qui peuvent être notifiés, quoi que dise parse.
Les helpers (userMention, roleMention, channelMention, timestamp…) sont listés dans Helpers.

Les sondages

Un sondage est une question avec jusqu’à 10 réponses. Les gens votent dans Discord ; le sondage se ferme au bout de duration heures (24 par défaut).

Modifier

message.edit() modifie un message écrit par le bot : son texte, ses embeds, ses composants, ses fichiers, et l’affichage des aperçus de ses liens. Seul ce que vous passez change.
Un message écrit par quelqu’un d’autre ne peut pas être modifié. Ce qu’accepte edit() est listé dans MessageEditOptions.

Supprimer

message.delete() supprime un message ; la raison va dans le journal d’audit du serveur.
Pour en supprimer beaucoup d’un coup, channel.bulkDelete() prend des messages ou des identifiants et renvoie combien ont été supprimés. Discord refuse de supprimer en masse les messages de plus de deux semaines : ils sont laissés de côté.

Réagir

message.react() ajoute une réaction du bot : un emoji standard, ou un emoji personnalisé du serveur, tel que Discord l’écrit (<:name:id>) ou comme l’un de guild.emojis.
message.reactions liste les réactions d’un message, avec leur nombre ; fetchReactionUsers() demande qui a réagi avec un emoji. removeReaction() retire la réaction du bot (ou d’un utilisateur donné), clearReactions() retire toutes les réactions, ou toutes celles d’un emoji.

Épingler

message.pin() et message.unpin() épinglent et désépinglent un message dans son salon ; channel.fetchPins() liste les messages épinglés, le dernier épinglé en premier.

Lire l’historique

channel.fetchMessages() demande à Discord les derniers messages d’un salon, du plus récent au plus ancien, 100 au plus par appel. before, after et around choisissent d’où lire, pour remonter plus loin :
channel.fetchMessage(id) récupère un message par son identifiant. channel.messages est ce dont le bot se souvient du salon sans demander à Discord : vide par défaut, puisque la plupart des bots ne relisent jamais un vieux message. Voir ce dont le bot se souvient.
Un message que vous recevez dans un événement est déjà un Message : pas besoin de le récupérer pour y répondre, y réagir ou le supprimer.

Boutons, menus et mise en page

Un message peut contenir des boutons et des menus déroulants, déclarés avec button() et select(), qui lancent votre code quand on les utilise, et être construit avec des textes, des sections, des galeries et des conteneurs au lieu d’un texte et d’embeds :
src/commands/vote.ts
src/components/yes.ts
components ne prend que ce que ChapterJS a fabriqué, jamais du JSON : les identifiants qui distinguent un clic sont écrits par le framework. Comment les écrire est dans Boutons, Menus déroulants, Formulaires et Embeds et mise en page.

Événements sur les messages

Réagir quand un message est envoyé, modifié ou supprimé.

Options des messages

Chaque champ que prend un message, avec les limites.