Commandes, options et clics droits

Mode code

Les commandes se déclarent dans l’onglet Commandes et listes. Les options avancées (choix, sous-commandes, autocomplétion, limites) s’écrivent en JSON.

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 :

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] }
]
ChampDétail
nameMinuscules, chiffres, - et _, 32 caractères
typestring, integer, number, boolean, user, channel, role, mentionable, attachment, subcommand, group
descriptionObligatoire, 100 caractères
requiredLes options obligatoires viennent avant les facultatives
choicesJusqu’à 25 { name, value } (texte ou nombre)
autocompletetrue pour proposer des choix pendant la saisie (pas avec choices)
min, maxBornes d’un nombre
minLength, maxLengthLongueur d’un texte
channelTypesTypes 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

JSON
[
  { "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" }
]
JavaScript
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

JavaScript
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

JavaScript
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.targetClic droit sur un membreClic droit sur un message
ContenuLe 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.

Commandes, options et clics droits · Documentation Opale