/ping pendant la visite. Écrivez maintenant une commande à vous, /dice, qui lance un dé. Ce sont quatre lignes de logique, et c’est l’occasion de comprendre chaque partie d’un fichier de commande : ce qu’il déclare, ce que reçoit run, et ce qui se passe quand quelque chose ne va pas.
Le fichier
Créezsrc/commands/dice.ts :
src/commands/dice.ts
/dice sur votre serveur de test. Elle est là, avec sa description sous son nom, et elle répond.
Ligne par ligne
import { command } from 'chapterjs'. La fonction qui fabrique une commande. Elle prend un objet qui décrit la commande et renvoie quelque chose que le framework reconnaît comme tel.
export default. Le fichier remet sa commande au framework en l’exportant. Le framework charge chaque fichier de src/ et garde ce qu’ils exportent de fabriqué avec command(), event(), button()… : un export par défaut ou un export nommé (export const dice = command(...)), peu importe. Ce qui est exporté et n’est rien de tout ça est à vous.
description. Le texte que Discord affiche sous le nom dans le menu /, de 1 à 100 caractères. En plus de run, c’est la seule chose dont une commande a besoin. (Un chapitre plus loin la déplace dans les fichiers de langue.)
async run({ interaction, user }). La fonction qui tourne quand quelqu’un utilise la commande. Elle reçoit un objet, et vous en sortez ce dont vous avez besoin : ici interaction, l’utilisation de la commande, et user, la personne qui l’a utilisée. Les pages suivantes passent en revue tout ce que contient cet objet.
interaction.reply(...). La réponse. Discord l’affiche sous la commande, avec le nom de la personne qui l’a utilisée.
await. Envoyer la réponse est une requête à Discord, qui prend du temps. await l’attend, et permet au framework de savoir quand votre fonction a vraiment terminé. Mettez toujours await devant ce que vous demandez à Discord : une erreur dans une requête que vous n’avez pas attendue est signalée sans la ligne de votre code qui l’a causée.
La commande doit répondre
Discord attend une réponse à chaque utilisation d’une commande, et affiche à la personne « L’application ne répond pas » quand rien ne vient. Essayez : commentez la lignereply, enregistrez, et utilisez /dice.
Ce qui est vérifié avant que Discord ne le voie
Discord a des règles pour les commandes : un nom est en minuscules, avec uniquement des lettres, des chiffres,- et _, 32 caractères au plus ; une description fait de 1 à 100 caractères ; et ainsi de suite. En enfreindre une ferait refuser par Discord toute la liste de vos commandes. Alors le framework vérifie chaque fichier quand il le charge, et explique avec vos mots.
Changez name en 'Dice' et enregistrez :
description et enregistrez :
command() n’accepte que ce qui existe.
Pourquoi des commandes slash et pas des messages
Un type de bot plus ancien lit chaque message et réagit à ceux qui commencent par!, comme !dice. ChapterJS ne le fait pas pour les commandes, et Discord le déconseille, pour de bonnes raisons :
- Une commande slash est découvrable : les gens tapent
/et voient ce que sait faire le bot, avec des descriptions et des options, sans lire une page d’aide. - Discord valide ce que tapent les gens avant de l’envoyer au bot : une option manquante ou une mauvaise valeur n’atteint jamais votre code.
- Lire chaque message demande le Message Content Intent, un intent privilégié, alors que les commandes slash n’ont besoin de rien.
- Discord n’affiche une commande qu’aux personnes qui ont les permissions qu’elle demande.
Récapitulatif
- Une commande est
command({ name, description, run }), exportée depuis n’importe quel fichier desrc/. runreçoit un objet ; sortez-eninteraction,useret le reste.await interaction.reply(...)répond ; une commande qui ne répond pas déclenche un avertissement avec le fichier.- Chaque règle de Discord est vérifiée au chargement du fichier, avec un message qui dit quoi écrire.
Options
Laisser les gens choisir le nombre de faces, et le recevoir typé.
Guide : Commandes
Sous-commandes, permissions, messages privés, en bref.