Passer au contenu principal
Sur Discord, les gens font plus qu’écrire : ils réagissent aux messages, votent dans des sondages, rejoignent des salons vocaux. Chacune de ces choses est aussi un événement, avec son nom. Cette page en ajoute deux à votre bot, un marque-page qui fonctionne avec une réaction et un bonjour en vocal, et montre ce qui les distingue : certains événements arrivent avec moins qu’un message.

Un marque-page avec une réaction

Créez src/events/bookmark.ts :
src/events/bookmark.ts
Enregistrez-le, puis réagissez 🔖 à n’importe quel message de votre serveur de test : le bot vous envoie son lien en privé. Pas d’interrupteur à activer cette fois :
Les réactions ne sont pas privilégiées : Discord ne les considère pas comme personnelles, contrairement à ce que les gens écrivent. La fonction reçoit la reaction et le serveur, guild, et prend dans la réaction ce dont elle a besoin : emoji, member, channel, messageId. emoji est l’emoji de la réaction. Pour un emoji standard, emoji.name est le caractère lui-même ('🔖') ; un emoji personnalisé d’un serveur a un nom et un id.

Sûr par défaut, encore

Les règles de la page précédente valent ici : par défaut, un fichier de réactions tourne pour les personnes, sur les serveurs. Les réactions des bots sont laissées de côté, le vôtre compris, donc le fichier ne réagit jamais à ce qu’il fait lui-même ; bots: true les laisse entrer. Et comme le fichier écoute sur les serveurs, guild, et le channel et le member de la réaction, sont toujours là, sans ?. à écrire. where: 'dm' ou where: 'both' changent cela exactement comme pour les messages.

Seulement un identifiant pour le message

Regardez ce que contient la réaction : messageId, pas un message. Quand quelqu’un réagit, Discord envoie qui a réagi et avec quoi, mais pas le message : il peut avoir des années. Et votre bot ne se souvient d’aucun message. La réaction donne donc son identifiant, et reaction.message vaut null. Souvent, l’identifiant suffit : le lien ci-dessus est construit avec, sans rien demander à Discord. Quand vous avez vraiment besoin du message, demandez-le : await channel.fetchMessage(messageId). Faites-le après les vérifications, jamais pour chaque réaction. reactionRemove va plus loin : Discord n’envoie que l’identifiant de qui a retiré sa réaction. ChapterJS demande à Discord qui c’est la première fois, puis s’en souvient, donc reaction.user est toujours là ; reaction.member n’est là que quand le bot se souvient de ce membre.

Bonjour en vocal

Créez src/events/greeter.ts :
src/events/greeter.ts
Rejoignez un salon vocal de votre serveur de test : le bot écrit dans le chat de ce salon. Chaque salon vocal a un chat écrit, et voice.channel est un VoiceChannel auquel vous pouvez envoyer des messages. La fonction reçoit voice (qui, où, et son état vocal) et le serveur, guild. Discord dit seulement à un bot que « l’état vocal de quelqu’un a changé ». ChapterJS se souvient de qui est dans quel salon, compare, et vous donne quatre événements au lieu d’un :

Et les autres

Les sondages (pollVoteAdd), la saisie (typingStart), les bannissements (banAdd), le journal d’audit, les invitations, les emojis, les événements programmés, les fils et les présences fonctionnent tous de la même façon : un event() avec le nom de l’événement, et ce que reçoit votre fonction typé d’après lui. Le Guide a une page pour chaque famille.

Points d’attention

  • Une réaction donne un identifiant, pas un message. Construisez ce que vous pouvez avec les identifiants ; ne demandez le message que quand vous en avez besoin.
  • Les réactions sont fréquentes. Comme pour les messages, mettez la vérification en premier et légère, et return tôt.
  • Les présences sont privilégiées, et lourdes. presenceUpdate a besoin du Presence Intent et arrive à chaque changement de chaque membre : ne l’ajoutez que si votre bot en a vraiment besoin.
  • Les bonjours en vocal peuvent être bruyants. Quelqu’un qui se reconnecte cinq fois est salué cinq fois : gardez le message court, ou ne l’écrivez que dans certains salons.

Récapitulatif

  • reactionAdd, reactionRemove, pollVoteAdd, typingStart, les événements vocaux et les autres se déclarent avec event(), comme memberJoin.
  • Les réactions ignorent par défaut les bots et les messages privés, comme les messages ; bots et where changent cela.
  • Chaque événement donne ce dont il parle et guild : reaction, vote, voice… Certains ne contiennent que des identifiants : reaction.messageId est toujours là, reaction.message vaut null ; user est demandé une fois à Discord quand il le faut.
  • Quatre événements vocaux distinguent une arrivée, un départ, un changement de salon et un changement d’état.

Jouer en vocal

Faire rejoindre un salon vocal à votre bot, et y jouer un son.

Guide : Réactions, sondages et saisie

Les mêmes événements, en bref.