Événements simples
| Événement | Quand | Données |
|---|---|---|
memberJoin | Un membre arrive | ctx.member |
memberLeave | Un membre part | ctx.member |
messageCreate | Un message est envoyé (pas par un bot) | ctx.member, ctx.message |
messageDelete | Un message est supprimé | ctx.message |
reactionAdd | Une réaction est ajoutée | ctx.member, ctx.reaction, ctx.message |
voiceJoin / voiceLeave | Un membre entre ou sort d’un vocal | ctx.member, ctx.voice.channelId |
roleAdded | Un membre reçoit un rôle | ctx.member, ctx.role |
boost | Un membre booste le serveur | ctx.member |
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.
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.