Passer au contenu principal
L’interaction que reçoit votre fonction est ce qui vous permet de répondre. interaction.reply() prend ce que prend n’importe quel message : un texte, ou un objet avec des embeds, des fichiers, des composants…
src/commands/secret.ts
C’est tout : Discord affiche la réponse sous la commande, avec le nom de la personne qui l’a utilisée.
Tout ce qu’a une interaction est dans la référence. Ce qu’accepte reply() est listé dans InteractionReplyOptions.

Les cinq méthodes

Les réponses sont envoyées l’une après l’autre, dans l’ordre où elles ont été demandées : vous pouvez appeler reply() et followUp() sans attendre que la première se termine, et elles arrivent dans cet ordre. Une commande répond une fois. Un second reply() lève une erreur, et dit quoi faire à la place :
De même, edit() et followUp() ont d’abord besoin d’une réponse : « There is no answer to edit yet: call interaction.reply() first. » et « A follow-up comes after an answer: call interaction.reply() first. »

Réponses que seule la personne voit

Passez ephemeral: true à reply() ou followUp() pour ne montrer ce message qu’à la personne qui a utilisé la commande. Personne d’autre ne le voit, et elle peut le faire disparaître. Pour rendre chaque réponse d’une commande éphémère, mettez ephemeral: true sur la commande elle-même. Chaque reply() et followUp() peut encore dire le contraire avec son propre ephemeral :
src/commands/roll.ts

Quand la réponse prend du temps

Discord veut une réponse en moins de 3 secondes. Vous n’avez pas à vous en soucier : après 2 secondes sans réponse, ChapterJS dit à Discord que la réponse arrive, la personne voit « réfléchit… », et votre reply() la complète, jusqu’à 15 minutes plus tard.
src/commands/report.ts
Appelez vous-même interaction.defer() si vous voulez que « réfléchit… » apparaisse tout de suite, ou pour choisir à quoi ressemble la réponse :
src/commands/lookup.ts
interaction.deferred dit si la réponse est encore à venir, et interaction.answered si elle a été envoyée ou promise.
Le fait qu’une réponse différée soit éphémère se décide au moment où elle est différée. Pour une commande lente dont la réponse doit être privée, mettez ephemeral: true sur la commande, ou appelez vous-même interaction.defer({ ephemeral: true }) : quand ChapterJS diffère pour vous, il ne connaît que ce que dit la commande.

Modifier ou supprimer la réponse

edit() modifie la réponse qui a été envoyée. Seul ce que vous passez change :
src/commands/countdown.ts
delete() la retire. Les deux fonctionnent pendant 15 minutes après l’utilisation de la commande.

Quand votre fonction échoue

Une erreur n’arrête jamais le bot. La personne reçoit une réponse courte et privée, et vous recevez l’erreur dans votre terminal avec le fichier et la ligne :
Ce que lit la personne dépend de ce qui s’est passé : Si la commande avait déjà répondu, la mauvaise nouvelle arrive dans un autre message privé ; si la réponse était en attente (« réfléchit… »), elle devient la réponse. Les deux phrases peuvent être traduites : voir Ce que le bot répond de lui-même.
Gardez la ligne de votre code : enchaînez avec await, pas avec .then(). Une erreur dans quelque chose que vous avez attendu est signalée avec la ligne qui l’a attendu.

Une fonction qui ne répond jamais

Une commande doit répondre. Quand run se termine sans appeler reply() (ou defer()), la personne voit « L’application ne répond pas », et votre terminal dit quelle commande :

Traductions

Afficher la commande dans la langue de chaque personne.

Envoyer des messages

Embeds, fichiers, sondages : tout ce qu’une réponse peut contenir.