Passer au contenu principal
Votre fonction peut poser une question, puis attendre ce qui suit dans le salon : channel.waitForMessage() donne le prochain message qui convient, ou null quand le temps est écoulé.
src/commands/capital.ts
C’est tout : la première personne qui écrit « Paris » (quelles que soient les majuscules) gagne, et après 30 secondes sans cela, le bot donne la réponse. Les messages des bots ne comptent jamais, et rien d’autre dans votre bot n’attend pendant ce temps : les autres commandes et événements continuent.
Chaque méthode et option est dans la référence : salons pour les messages, messages pour les clics et les réactions.

Qui et quoi

Attendre la réponse de la personne qui a utilisé la commande :
src/commands/nickname.ts
Une fonction donnée à matches qui lève une erreur termine l’attente avec cette erreur, levée là où vous attendez : la personne reçoit une réponse simple et vous recevez l’erreur avec sa ligne, comme pour tout ce que fait votre fonction.

Plusieurs messages

channel.collectMessages() prend les mêmes options et rassemble chaque message qui convient jusqu’à ce que within passe, ou que max soient arrivés. Elle les donne, dans l’ordre, peut-être aucun.
src/commands/brainstorm.ts

Un clic

message.waitForClick() attend un clic sur un bouton ou un menu d’un message : celui que donne reply(), par exemple. Le clic qu’elle donne se répond comme dans le run d’un bouton, avec click.interaction.
src/commands/reset.ts
  • Un bouton ou un menu qui n’est qu’attendu n’a pas besoin de run. Une fois que plus rien ne l’attend, un clic dessus répond à la personne qu’il n’est plus disponible.
  • Un clic pris par une attente n’exécute pas le run de son bouton. Un clic que l’attente ne prend pas (une autre personne, avec from) l’exécute comme d’habitude.
  • click.is(yes) dit lequel a été cliqué ; click.data est ce que porte le bouton, click.values ce qui a été choisi dans un menu.
  • Sans réponse dans les 2 secondes, le bot ne change rien à l’écran pour vous, si bien que la personne ne voit jamais « This interaction failed ». Vous pouvez encore répondre avec click.interaction.followUp() ou edit().

Une réaction

message.waitForReaction() attend une réaction ajoutée à un message : d’une personne avec from, avec un emoji avec emoji ('👍', ou un emoji personnalisé par son nom).
src/commands/agree.ts
La réaction du bot lui-même ne compte jamais.

Ce dont elle a besoin

Attendre ne demande rien à déclarer : les intents suivent votre code, comme ceux de vos événements.
  • Attendre des messages demande à Discord les messages des serveurs et des messages privés, et leur texte : l’intent privilégié Message Content Intent. Quand il n’est pas activé, chapterjs dev le dit, nomme votre fichier et donne le lien du Developer Portal.
  • Attendre une réaction demande les réactions.
  • Attendre un clic ne demande rien.

Bon à savoir

  • Une attente vit tant que votre bot tourne : un redémarrage, ou l’arrêt de chapterjs dev, la termine sans rien (null, ou ce qu’un rassemblement a déjà reçu). Un enregistrement dans chapterjs dev la garde.
  • Tout ce qui concerne un serveur arrive au même processus de votre bot : une attente fonctionne pareil dans un gros bot.
  • La réponse à l’interaction reste due dans les 3 secondes : répondez d’abord (reply()), puis attendez. Attendre avant de répondre est répondu pour vous par « le bot réfléchit », comme toute fonction lente.

Tester

Dans un scénario, bot.use() rend la main dès que votre fonction attend, et ce que fait le test ensuite est ce qu’elle attend : bot.say(), bot.click(), bot.select(), bot.react(). Le temps ne passe pas dans le serveur de test : bot.endWaits() termine chaque attente comme si son temps était écoulé.
src/commands/capital.test.ts

Boutons

Des boutons avec leur propre run, qui fonctionnent pendant des semaines.

Tester

Vérifier ce que répond votre bot, sans Discord.