Passer au contenu principal
Trois événements concernent les messages : messageCreate, messageUpdate et messageDelete. Un événement messageCreate tourne chaque fois que quelqu’un écrit sur un serveur où se trouve votre bot :
src/events/ping.ts
C’est tout. Par défaut, le fichier ne tourne que pour les messages écrits par des personnes, sur les serveurs : pas pour les bots (le vôtre compris), pas pour les webhooks, et pas pour les messages privés. Donc message.guild, message.channel et message.member sont toujours là, et vous n’écrivez jamais if (message.author.bot) return;.
src/events/levels.ts
La liste complète de ce qu’a un message est dans Message ; les trois événements, avec ce qu’ils donnent, sont dans la référence.

Message Content Intent

Lire ce qu’écrivent les gens est un intent privilégié : messageCreate et messageUpdate ont besoin du Message Content Intent, activé pour votre bot dans le Developer Portal. Sans lui, les messages écrits par les autres arrivent sans leur texte : message.content est vide. chapterjs dev vous dit quand il manque et attend que vous l’activiez, comme pour chaque intent. messageDelete n’en a pas besoin.

Où un fichier écoute

where dit où une déclaration écoute. Écrivez-le à côté de name, et ce que reçoit votre fonction suit :
Le fichier tourne pour les messages des serveurs. Le message est un MemberMessage : guild, channel et member sont toujours là.
src/events/hello.ts
Chaque fichier décide pour lui-même : dans le même dossier, un fichier peut écouter sur les serveurs et un autre en messages privés.
chapterjs dev ne fait tourner votre bot que sur votre serveur de test, donc un fichier avec where: 'dm' ne peut pas y être essayé. Il vous le dit une fois :
Les messages privés atteignent votre bot avec chapterjs start.

Messages des bots et des webhooks

Par défaut, messageCreate et messageUpdate ignorent les messages écrits par des bots (celui-ci compris) et par des webhooks : un bot qui répond aux bots peut finir par se répondre à lui-même, ou à un autre bot, indéfiniment. Pour les recevoir aussi, passez { bots: true } :
src/events/relay.ts
Avec bots: true, le message d’un serveur est un GuildMessage : guild et channel sont toujours là, mais un webhook n’est pas membre du serveur, donc message.member peut être null. Les deux options vont ensemble : { bots: true, where: 'both' } reçoit tout, sous forme de GuildMessage | PrivateMessage.

Un message supprimé

Un message supprimé n’existe plus, donc le message de messageDelete est ce qu’il en reste : son id, le channel où il était, et before, le message lui-même tel qu’il était quand le bot s’en souvenait.
src/events/log.ts
Sur un serveur, guild et message.channel (un GuildTextBasedChannel) sont toujours là. message.before est null quand le bot ne se souvenait pas du message : le bot ne se souvient d’aucun message aujourd’hui, donc utilisez toujours message.id. messageDelete prend where comme les deux autres, et ce que reçoit votre fonction suit : avec 'dm', il n’y a ni guild ni message.guildId du tout ; avec 'both', guild est null pour un message privé et distingue les deux. Il n’a pas d’option bots : un message supprimé n’a plus d’auteur.

Les intents suivent vos options

Discord envoie les messages des serveurs et les messages privés par deux intents différents, et ChapterJS ne demande que ce qu’écoutent vos fichiers : un fichier avec where: 'dm' ne demande que les messages privés, un fichier sans where que les messages des serveurs, et un fichier avec 'both' les deux.

Un salon que le bot ne connaît pas

Un message peut arriver dans un salon que votre bot n’a jamais vu, comme un fil créé avant sa connexion. ChapterJS demande alors ce salon à Discord une fois, avant de lancer vos fichiers, pour que message.channel soit toujours là. Tout ce qui se passe dans ce salon entre-temps attend la même réponse, et est transmis dans l’ordre où cela s’est passé. Quand Discord refuse, l’événement n’est pas transmis et on vous le dit :

Envoyer des messages

Tout ce qu’une réponse peut contenir : texte, embeds, fichiers, sondages.

Ce dont votre bot se souvient

Membres, utilisateurs et messages : ce qui est gardé, et combien cela coûte peu.