Passer au contenu principal
Un événement est quelque chose qui se passe sur Discord. Pour réagir à l’un d’eux, déclarez-le avec event() dans n’importe quel fichier de src/, et exportez-le :
src/events/welcome.ts
C’est tout. chapterjs dev trouve la déclaration et lance votre fonction chaque fois que quelqu’un rejoint votre serveur de test. Rien à enregistrer, aucune liste à tenir à jour, et aucun type à écrire : votre éditeur sait déjà que member est un GuildMember et guild un Guild. Chaque événement donne les deux mêmes choses : ce dont il parle (member ici, message, role, reaction, voice…) et le serveur où il s’est produit, guild. Rien d’autre, plus t quand votre projet a des langues. Ce que donne chaque événement est listé dans un seul tableau de la référence.

Le nom est l’événement

  • name est l’événement. C’est l’un des événements, et votre éditeur les propose pendant que vous tapez ; un autre mot est souligné, et signalé avec le nom d’événement le plus proche quand le fichier se charge.
  • Une déclaration est une réaction. L’endroit du fichier et son nom sont à vous : src/events/welcome.ts, ou src/welcome/welcome.ts, ou src/welcome.ts, ou à côté de la commande qu’il accompagne, comme le fait le modèle tickets. Déclarez-en autant que vous voulez, dans un fichier ou plusieurs : elles tournent toutes.
  • L’import est le même partout. name est ce qui dit à event ce que reçoit votre fonction : un membre pour 'memberJoin', un rôle pour 'roleDelete'. La même ligne, import { event } from 'chapterjs', fonctionne dans chaque fichier.

Plusieurs réactions à un événement

Quand un événement se produit, chaque déclaration de cet événement tourne, en même temps et sans ordre particulier. L’une n’attend jamais l’autre, et une qui échoue n’arrête jamais les autres. Utilisez une déclaration par chose que fait votre bot : welcome, log, roles… Quand deux étapes doivent se faire l’une après l’autre, gardez-les dans la même fonction :
src/events/roles.ts
Chaque déclaration d’un événement reçoit la même chose, et peut la lire mais pas la modifier : y affecter une valeur (context.role = ...) lève une erreur, signalée comme n’importe quelle autre.

Ce qui ne manque jamais

Votre fonction reçoit des structures que vous pouvez lire et utiliser. Sur un serveur, ce qui doit exister est toujours là, sans ?. à écrire :
  • member.guild, role.guild, channel.guild pour un salon de serveur, member.highestRole ;
  • guild.me (votre bot en tant que membre du serveur), guild.everyoneRole ;
  • message.guild, message.member et message.channel dans les événements sur les messages.
Ils restent là pendant que votre fonction tourne, même si la personne part ou que le salon est supprimé entre-temps : votre fonction les garde tels qu’ils étaient. Le bot garde aussi guild.me à part de ce dont il se souvient, donc il est là dans un serveur de n’importe quelle taille. Ce qui peut être null est ce qui peut vraiment ne pas exister : un salon sans catégorie (channel.parent), un message jamais modifié (message.editedAt), un nombre de membres que Discord n’a jamais envoyé (guild.memberCount), un message supprimé dont le bot ne se souvenait pas (message.before dans messageDelete).

Ce qui a été supprimé

Les événements sur quelque chose qui n’existe plus donnent la chose elle-même telle qu’elle était :
  • roleDelete : role est toujours là, le bot connaît chaque rôle de ses serveurs.
  • channelDelete : channel est le salon ou le fil tel qu’il était.
  • guildLeave : guild est le serveur tel qu’il était.
  • memberLeave : user est le compte de la personne partie, toujours là.
src/events/goodbye.ts

L’événement ready

ready tourne une fois par démarrage, quand le bot est connecté et connaît chaque serveur où il se trouve. Ce n’est pas un événement de Discord : rien ne peut le relancer, et enregistrer un fichier dans chapterjs dev ne le lance jamais une seconde fois.
src/events/online.ts

Options

Certains événements prennent des options, écrites à côté de name. Chaque déclaration décide pour elle-même : deux réactions au même événement peuvent avoir des options différentes, et ce que reçoit votre fonction les suit.
src/events/relay.ts
Une option vaut true ou false, ou un mot d’une liste. Votre éditeur ne propose que les options de l’événement nommé, et une option qui n’existe pas, ou une mauvaise valeur, est soulignée, puis signalée au chargement du fichier, avant que le bot ne le lance. Les événements qui ont des options sont les événements sur les messages et les réactions, sondages et saisie.

Intents : rien à lister

Discord n’envoie à un bot que les événements qu’il a demandés, par les intents. Vous ne les écrivez jamais : ChapterJS les déduit des événements que vos fichiers déclarent, et vous le dit à la connexion :
Quand vous enregistrez un fichier qui en demande davantage, chapterjs dev se reconnecte tout seul :
Trois des intents dont vos fichiers peuvent avoir besoin sont privilégiés : Discord vous demande de les activer vous-même, dans le Developer Portal. Quand l’un manque, chapterjs dev nomme les fichiers qui en ont besoin et vous donne le lien, puis attend :
La commande n’attend que lorsqu’elle tourne dans un terminal. Lancée par un autre programme, elle s’arrête avec la même explication.

Quand votre fonction échoue

Une erreur dans une de vos fonctions n’arrête jamais le bot, ni les autres fichiers. Elle est affichée dans votre terminal avec le fichier et la ligne, que ce soit un bug de votre part ou Discord qui refuse ce que vous avez demandé :
Pour gérer un échec vous-même, utilisez try / catch : voir Erreurs.

En dev, seulement votre serveur de test

chapterjs dev fait tourner votre bot sur votre serveur de test uniquement : ce qui se passe dans les autres serveurs et en messages privés est ignoré, et les intents qui ne servent qu’aux messages privés ne sont pas demandés. Avec chapterjs start, votre bot entend chaque serveur où il se trouve et les messages privés aussi.
Chaque événement, avec ce que reçoit votre fonction, est dans la référence. Les types de event() sont dans event().

Toutes les sortes d’événements

Au-delà des membres, des rôles, des salons et des serveurs eux-mêmes, vos fichiers peuvent réagir :
  • Aux messages : envoyés, modifiés, supprimés. Voir Messages.
  • Aux réactions, aux sondages et à la saisie : une réaction ajoutée ou retirée, un vote, quelqu’un qui écrit. Voir Réactions, sondages et saisie.
  • Au vocal : quelqu’un qui rejoint, quitte, change de salon, coupe son micro ou lance un stream. Voir Vocal.
  • À la modération et au serveur : bannissements, journal d’audit, invitations, emojis, événements programmés, qui est dans un fil, présences. Voir Modération et serveur.

Messages

Serveurs ou messages privés, bots ou personnes : les événements sur les messages et leurs options.

Ce dont votre bot se souvient

Pourquoi lire un serveur ou un membre ne coûte rien, et comment la mémoire reste sous contrôle.