Déclarer
Dans Commandes et listes, chaque élément a un type : Commande slash, Clic droit sur un membre ou Clic droit sur un message. Le bouton Déclarer au-dessus du code ajoute ce que ton code utilise sans l’avoir déclaré. « Réservée aux gestionnaires du serveur » cache la commande aux autres.
Options
Clique sur Options avancées pour éditer les options en JSON :
[
{ "name": "ville", "type": "string", "description": "La ville", "required": true, "autocomplete": true },
{ "name": "jours", "type": "integer", "description": "Prévision sur combien de jours", "min": 1, "max": 7 },
{ "name": "unite", "type": "string", "description": "Unité", "choices": [{ "name": "Celsius", "value": "c" }, { "name": "Fahrenheit", "value": "f" }] },
{ "name": "salon", "type": "channel", "description": "Où publier", "channelTypes": [0, 5] }
]| Champ | Détail |
|---|---|
name | Minuscules, chiffres, - et _, 32 caractères |
type | string, integer, number, boolean, user, channel, role, mentionable, attachment, subcommand, group |
description | Obligatoire, 100 caractères |
required | Les options obligatoires viennent avant les facultatives |
choices | Jusqu’à 25 { name, value } (texte ou nombre) |
autocomplete | true pour proposer des choix pendant la saisie (pas avec choices) |
min, max | Bornes d’un nombre |
minLength, maxLength | Longueur d’un texte |
channelTypes | Types de salons acceptés (0 texte, 2 vocal, 4 catégorie, 5 annonces, 13 conférence, 15 forum) |
Dans le code, ctx.args.ville. Pour un membre, un salon ou un rôle : son identifiant. Pour un fichier : son adresse.
Sous-commandes
[
{ "name": "jouer", "type": "subcommand", "description": "Lancer une radio", "options": [
{ "name": "station", "type": "string", "description": "La radio", "required": true, "choices": [{ "name": "FIP", "value": "fip" }] }
] },
{ "name": "stop", "type": "subcommand", "description": "Couper la radio" }
]module.uses('icecast.radiofrance.fr');
const STATIONS = { fip: 'https://icecast.radiofrance.fr/fip-midfi.mp3' };
module.command('radio', async (ctx) => {
if (ctx.subcommand === 'stop') return ctx.voice.leave();
await ctx.voice.play(STATIONS[ctx.args.station] ?? STATIONS.fip, { channel: ctx.config.vocal });
await ctx.reply('Radio lancée.');
});Un group contient des sous-commandes : /musique reglages volume. On ne mélange pas sous-commandes et options simples au même niveau.
Autocomplétion
module.autocomplete('meteo', async (ctx) => {
const villes = ['Paris', 'Lyon', 'Marseille', 'Lille', 'Bordeaux'];
return villes.filter((v) => v.toLowerCase().startsWith(ctx.focused.value.toLowerCase()));
});Renvoie jusqu’à 25 choix (textes, ou { name, value }), ou appelle ctx.suggest([...]). ctx.focused.name dit quelle option est en cours de saisie, ctx.args contient les autres.
Clics droits
module.userMenu('Infos du membre', async (ctx) => {
await ctx.reply(ctx.target.name + ' est là depuis ' + ctx.target.joinedDays + ' jours.');
});
module.messageMenu('Signaler', async (ctx) => {
await ctx.send(ctx.config.staff, ctx.member.mention + ' signale : ' + ctx.target.content + '\n' + ctx.target.url);
await ctx.reply('Merci, le staff est prévenu.');
});| ctx.target | Clic droit sur un membre | Clic droit sur un message |
|---|---|---|
| Contenu | Le membre visé (mêmes champs que ctx.member) | id, content, channelId, url, authorId, authorName, attachments |
Nom du menu : 32 caractères, lettres, chiffres et espaces. 5 par type et par module. ctx.member est celui qui fait le clic droit.