interaction.reply() répondait avec un texte. Cette page parle de tout ce qu’une réponse peut être d’autre : privée, différée, modifiée, suivie d’une autre. Et du cas que vous rencontrerez tôt ou tard : votre code lève une erreur, et quelqu’un attend de l’autre côté.
Une réponse, puis des suites
Une utilisation d’une commande reçoit une réponse, avecreply(). Ensuite, followUp() envoie un autre message, edit() modifie la réponse, et delete() la supprime. Voici l’ensemble :
Appeler
reply() deux fois est une erreur, et le framework le dit avec la ligne et quoi faire à la place :
content, embeds, files, components… Une page plus loin passe tout cela en revue.
Réponses privées
Parfois, seule la personne devrait voir la réponse : une confirmation, une erreur, un secret. Passezephemeral: true, et Discord montre le message à elle seule, avec une mention « Seul(e) vous pouvez voir ceci » et un moyen de le faire disparaître.
src/commands/secret-number.ts
ephemeral: true sur la commande elle-même plutôt que sur chaque appel. Cela dit aussi au framework, avant même que run ne commence, que tout ce qu’il envoie pour cette commande est pour la personne seule, ce qui compte pour la langue de la réponse dans un chapitre suivant.
src/commands/mynumber.ts
Quand la réponse prend du temps
Discord veut une réponse en moins de 3 secondes, sinon il affiche à la personne « L’application ne répond pas ». Une requête vers un autre site, un gros calcul ou quelques requêtes à Discord à la suite peuvent prendre plus longtemps. Vous n’avez pas à vous en soucier. Après 2 secondes sans réponse, le framework dit à Discord que la réponse arrive : la personne voit « réfléchit… », et votrereply() la complète quand elle arrive, jusqu’à 15 minutes plus tard.
src/commands/slow.ts
/slow : au bout de deux secondes, « réfléchit… », puis la réponse. Si vous préférez afficher « réfléchit… » tout de suite, appelez vous-même interaction.defer() au début de run.
Le fait qu’une réponse différée soit privée 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 le framework diffère pour vous, il ne connaît que ce que déclare la commande.Modifier la réponse
edit() modifie la réponse qui a été envoyée. Seul ce que vous passez change :
src/commands/countdown3.ts
edit() et delete() fonctionnent pendant 15 minutes après l’utilisation de la commande ; au-delà, Discord oublie l’interaction.
Quand votre code échoue
Votre code lèvera une erreur un jour : un bug, ou Discord qui refuse quelque chose. Ce qui se passe alors mérite d’être connu, parce que quelqu’un attend dans Discord.- La personne reçoit une réponse courte et privée : « Something went wrong while running this command. » Si le bot manquait d’une permission, la phrase le dit à la place : « I don’t have the permission to do that here. » Jamais de trace d’erreur, jamais de mot technique. (Ces phrases sont en anglais par défaut ; le chapitre sur les traductions montre comment les traduire.)
- Vous recevez l’erreur dans votre terminal, avec le fichier et la ligne :
- Le bot continue de tourner. Une commande qui échoue n’arrête jamais rien d’autre.
throw new Error('oups') au début de run dans /dice, enregistrez, et utilisez la commande. Puis retirez-le.
Pour gérer un échec vous-même, entourez la partie risquée d’un try / catch. Les erreurs de Discord sont des DiscordApiError, avec un code qui dit ce qui s’est passé ; la page Ce que vous recevez en montre une.
Récapitulatif
reply()une fois, puisfollowUp(),edit(),delete().ephemeral: truerend un message privé ; sur la commande, il rend chaque réponse privée.- Après 2 secondes, le framework diffère pour vous ;
defer()le fait tout de suite. - Quand
runlève une erreur, la personne reçoit une réponse simple, vous recevez le fichier et la ligne, le bot continue.
Ce que vous recevez
Utilisateurs, membres, serveurs, salons : ce qu’ils vous disent et ce qu’ils savent faire.
Guide : Répondre
La même chose, en bref.