Les événements

Mode code

module.on(événement, fn) réagit à ce qui se passe sur le serveur. Les événements simples remplissent ctx.member, ctx.message… ; les événements avancés donnent les données brutes de Discord dans ctx.event.

Événements simples

ÉvénementQuandDonnées
memberJoinUn membre arrivectx.member
memberLeaveUn membre partctx.member
messageCreateUn message est envoyé (pas par un bot)ctx.member, ctx.message
messageDeleteUn message est suppriméctx.message
reactionAddUne réaction est ajoutéectx.member, ctx.reaction, ctx.message
voiceJoin / voiceLeaveUn membre entre ou sort d’un vocalctx.member, ctx.voice.channelId
roleAddedUn membre reçoit un rôlectx.member, ctx.role
boostUn membre booste le serveurctx.member
JavaScript
module.on('messageCreate', async (ctx) => {
  if (/discord\.gg\//i.test(ctx.message.content) && !ctx.member.roles.includes(ctx.config.staff)) {
    await ctx.deleteMessage();
    await ctx.dm(ctx.member, 'Les invitations sont interdites ici.');
  }
});

Événements avancés

Ils transmettent le paquet Discord brut dans ctx.event (format de l’API, en snake_case). ctx.member est rempli quand l’auteur est connu. La liste complète indique chacun.

JavaScript
module.on('auditLogEntry', async (ctx) => {
  if (ctx.event.action_type !== 22) return;
  await ctx.send(ctx.config.logs, '🔨 <@' + ctx.event.target_id + '> banni par <@' + ctx.event.user_id + '> : ' + (ctx.event.reason ?? 'sans raison'));
});

module.on('messageUpdate', async (ctx) => {
  await ctx.log('Message modifié dans <#' + ctx.event.channel_id + '> : ' + ctx.event.content);
});

Limites

Un module reçoit au plus 240 événements avancés par minute sur chaque serveur ; au-delà, ils sont ignorés et le journal le signale. Les messages des bots ne déclenchent pas messageCreate, et les événements avancés provoqués par Opale lui-même sont ignorés.

Les événements · Documentation Opale