L’API Discord

Mode code

Un module en code a accès à presque toute l’API Discord du serveur où il est installé : messages, salons, fils, rôles, membres, émojis, événements, invitations, webhooks, AutoMod, journal d’audit…

Les helpers

ObjetContient
ctx.messagesget, list, edit, delete, bulkDelete, react, unreact, clearReactions, reactions, pin, unpin, pins, crosspost, endPoll, pollVoters
ctx.channelsget, list, create, edit, delete, setPermissions, removePermissions, createThread, addToThread, removeFromThread, typing, activeThreads, setVoiceStatus
ctx.roleslist, get, create, edit, delete, move, counts
ctx.membersget, fetch, list, search, edit, move, disconnect, mute, deafen, untimeout, unban, bans, banMany, voiceState, prune
ctx.guildfetch, edit, auditLog, invites, welcomeScreen, onboarding, widget
ctx.emojis, ctx.stickers, ctx.soundslist, get, create, edit, delete
ctx.eventslist, get, users, create, edit, delete (événements programmés)
ctx.invitescreate, get, delete, list
ctx.webhookscreate, list, edit, delete, send
ctx.automodlist, 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.

JavaScript
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 /.

JavaScript
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é' });
OptionRôle
queryParamètres d’adresse (?limit=10)
reasonRaison notée dans le journal d’audit
filesFichiers 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é.
L’API Discord · Documentation Opale