Passer au contenu principal
Jusqu’ici, 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, avec reply(). 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 :
Chacune de ces méthodes prend ce que prend n’importe quel message : un texte, ou un objet avec 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. Passez ephemeral: 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
Quand toutes les réponses d’une commande sont privées, mettez 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 votre reply() la complète quand elle arrive, jusqu’à 15 minutes plus tard.
src/commands/slow.ts
Utilisez /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.
Essayez : ajoutez throw new Error('oups') au début de run dans /dice, enregistrez, et utilisez la commande. Puis retirez-le.
Gardez la ligne de votre code dans l’erreur : 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.
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, puis followUp(), edit(), delete().
  • ephemeral: true rend 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 run lè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.