Les helpers
| Objet | Contient |
|---|---|
ctx.messages | get, list, edit, delete, bulkDelete, react, unreact, clearReactions, reactions, pin, unpin, pins, crosspost, endPoll, pollVoters |
ctx.channels | get, list, create, edit, delete, setPermissions, removePermissions, createThread, addToThread, removeFromThread, typing, activeThreads, setVoiceStatus |
ctx.roles | list, get, create, edit, delete, move, counts |
ctx.members | get, fetch, list, search, edit, move, disconnect, mute, deafen, untimeout, unban, bans, banMany, voiceState, prune |
ctx.guild | fetch, edit, auditLog, invites, welcomeScreen, onboarding, widget |
ctx.emojis, ctx.stickers, ctx.sounds | list, get, create, edit, delete |
ctx.events | list, get, users, create, edit, delete (événements programmés) |
ctx.invites | create, get, delete, list |
ctx.webhooks | create, list, edit, delete, send |
ctx.automod | list, get, create, edit, delete |
Les objets renvoyés sont ceux de l’API Discord (noms en snake_case, comme channel_id). Le détail de chaque fonction est dans la référence du SDK.
module.messageMenu('Archiver', async (ctx) => {
const msg = ctx.target;
await ctx.messages.pin({ channelId: msg.channelId, id: msg.id });
await ctx.reply('Message épinglé.');
});
module.command('nettoyer', async (ctx) => {
const derniers = await ctx.messages.list(ctx.interaction.channelId, { limit: 50 });
const bots = derniers.filter((m) => m.author.bot);
if (bots.length >= 2) await ctx.messages.bulkDelete(ctx.interaction.channelId, bots);
await ctx.reply(bots.length + ' messages de bots supprimés.');
});Accès direct
ctx.discord appelle n’importe quelle route autorisée de l’API Discord v10. Le chemin commence par /.
const salon = await ctx.discord.get('/channels/' + ctx.config.salon);
await ctx.discord.patch('/channels/' + ctx.config.salon, { topic: 'Mis à jour par le module' });
await ctx.discord.put('/channels/' + ctx.config.salon + '/permissions/' + ctx.member.id, { type: 1, allow: '1024' });
const journal = await ctx.discord.get('/guilds/' + ctx.server.id + '/audit-logs', { limit: 10 });
await ctx.discord.request('DELETE', '/channels/' + idFil, { reason: 'Fil terminé' });| Option | Rôle |
|---|---|
query | Paramètres d’adresse (?limit=10) |
reason | Raison notée dans le journal d’audit |
files | Fichiers joints |
Ce qui est vérifié
- Confinement : l’identifiant du serveur doit être celui de l’installation ; les salons, webhooks et invitations sont vérifiés.
- Permission : chaque route demande sa permission (voir la liste des routes). Un chemin construit dynamiquement doit être déclaré avec
module.uses. - Contenu : rôles et permissions de salon dangereux refusés, membres protégés, @everyone filtré, identifiants de composants préfixés.
- Débit : 300 appels par minute pour chaque serveur où le module est installé.