/dice lance toujours un dé à six faces. Laissez les gens choisir : /dice sides:20. C’est une option : quelque chose que la personne remplit après le nom de la commande, que Discord demande dans son menu et envoie à votre bot avec la commande.
Déclarer une option
Ajoutezoptions à la commande. Chaque clé est le nom d’une option, chaque valeur dit ce qu’elle est :
src/commands/dice.ts
/dice : Discord propose maintenant sides, refuse une valeur inférieure à 2 ou supérieure à 100 avant même qu’elle n’atteigne votre bot, et vous laisse ne pas la remplir.
Trois choses à remarquer dans run :
optionsest nouveau dans l’objet que reçoitrun. Il contient ce que la personne a rempli, sous les noms que vous avez déclarés.options.sidesest un nombre, et l’éditeur le sait. Survolez-le :number | undefined. Vous avez déclarétype: 'integer', alors le framework l’a typé pour vous. Rien à convertir, rien à vérifier.undefinedest là parce que l’option est facultative. Une option est facultative sauf si elle ditrequired: true, et votre code doit gérer son absence :?? 6le fait. Retirez le?? 6et l’éditeur soulignesidesdansMath.random() * sides: « possibly undefined ». C’est tout l’intérêt des types : l’erreur est attrapée dans l’éditeur, pas par une personne qui utilise la commande.
Chaque type d’option
type dit ce que Discord demande, et décide de ce que reçoit run :
Chaque option a un
type et une description (de 1 à 100 caractères, affichée sous son nom dans le menu). Les noms suivent les mêmes règles que les noms de commandes : minuscules, lettres, chiffres, - et _.
Une option utilisateur : /whois
Une option de typeuser vous donne la personne sous forme d’objet, pas de texte. Créez src/commands/whois.ts :
src/commands/whois.ts
required: true veut dire que Discord refuse d’envoyer la commande sans elle, donc options.who est toujours là : survolez-le, c’est un User, sans undefined. Un User a un nom, un avatar, la date de création du compte, et plus encore : la page suivante parle de ce que ces objets vous donnent.
Les choix
Quand les valeurs possibles sont connues à l’avance,choices transforme l’option en une liste dans laquelle la personne choisit, et la valeur que reçoit votre code est typée comme l’un des choix :
src/commands/dice.ts
choices: ['red', 'green']) utilise le même texte pour les deux. Entre 1 et 25 choix.
Des suggestions pendant la frappe
choices a besoin des valeurs à l’avance. Quand elles viennent d’ailleurs, ou changent, autocomplete laisse votre bot les suggérer pendant que la personne tape : Discord interroge votre fonction toutes les quelques frappes, et affiche ce qu’elle renvoie. Faisons connaître à /dice les dés de quelques jeux :
src/commands/dice-game.ts
{ name, value } pour afficher un texte et en recevoir un autre. Discord en affiche 25 au plus, et les attend 3 secondes.
Une suggestion n’est qu’une aide : la personne peut taper autre chose, et run reçoit ce qu’elle a tapé. Vérifiez-le, quand ça compte.
Points d’attention
- Les options obligatoires d’abord. Discord les veut avant les facultatives. Vous pouvez les écrire dans n’importe quel ordre : le framework les trie pour vous.
- Seule la saisie de la personne est validée par Discord.
min,max,minLength,maxLengthetchoicessont appliqués par Discord avant que votre code ne tourne. Ce que vous faites de la valeur, c’est à vous de le vérifier. - 25 options au plus par commande. S’il vous en faut plus, vous voulez probablement plusieurs commandes.
- Une erreur dans une déclaration est attrapée au chargement du fichier, avec un message qui dit quoi écrire. Un
typequi n’existe pas, un champ que le type n’a pas, unminau-dessus dumax: chacun a son message, et l’éditeur souligne la plupart d’entre eux en premier.
Récapitulatif
optionsdéclare ce que les gens remplissent ;runreçoitoptions.name, typé d’après la déclaration.- Facultatif par défaut : gérez
undefined, ou ditesrequired: true. - Les options
user,roleetchannelvous donnent des objets, pas des identifiants. choicesfabrique une liste, et type la valeur comme l’un des choix.autocompletesuggère des valeurs pendant que la personne tape, depuis votre propre code.
Répondre
Réponses privées, réponses lentes, et ce que voit la personne quand votre code échoue.
Guide : Options
Chaque champ de chaque type d’option.