data, who, update(). Ce qui est nouveau, ce sont les options, et ce que run en reçoit.
Un menu avec vos options
Créezsrc/components/pet.ts (un menu se déclare avec select() et s’exporte, depuis n’importe quel fichier de src/) :
src/components/pet.ts
src/commands/pet.ts
value dans le fichier : c’est 'cat' | 'dog' | 'axolotl', pas un string. Le framework l’a typé d’après les options, donc une faute de frappe dans une comparaison (value === 'cta') est soulignée. values est la liste de tout ce qui a été choisi, pour les menus qui en permettent plusieurs.
Le menu n’a pas de data, donc il se met tel quel dans le message : components: [pet]. Un menu prend une rangée entière à lui seul.
Trois façons d’écrire les options
Jusqu’à 25 options.
min et max disent combien peuvent être choisies (1 par défaut) : avec max: 3, values en contient jusqu’à trois, et min: 0 permet de ne rien choisir.
Des menus remplis par Discord
Avec untype, vous ne déclarez aucune option : Discord remplit le menu avec le serveur. 'user', 'role', 'mentionable' (utilisateurs et rôles) ou 'channel'. values est alors une liste de User, Role, User | Role ou Channel :
src/components/helper-role.ts
channelTypes restreint ce qui est listé : channelTypes: [ChannelType.GuildText] n’affiche que les salons textuels, avec ChannelType importé de chapterjs.
Ce avec quoi un menu est affiché
Là où vous mettez le menu dans un message, un second argument change ce qui est affiché :placeholder, disabled, et defaults, ce qui est sélectionné quand le menu apparaît (les valeurs des options, ou les identifiants des utilisateurs, rôles ou salons) :
src/commands/pet-default.ts
data les prend en premier : menu({ page: 2 }, { defaults: ['cat'] }).
Points d’attention
- Un menu répond comme un bouton :
update()pour modifier son message,reply()pour un nouveau, en moins de 3 secondes (le framework diffère au bout de 2). valueest le premier choix,valuestous les choix. Avecmax: 1, ils disent la même chose.- Un vieux message dont l’export a été renommé répond « This menu is not available any more. », comme un bouton.
Récapitulatif
- Un menu est
select({ ... }), exporté, avec desoptionsou untype. valueetvaluessont typés d’après les options, ou sont des structures pour untype.defaults,placeholderetdisabledse règlent là où le menu est mis dans un message.
Les formulaires
Demander du texte et des choix dans une fenêtre qui s’ouvre dans Discord.
Guide : Menus déroulants
La même chose, en bref.