Ajouter un handler
Les handlers ecoutent les evenements du gateway Discord (messages, reactions, voice state, etc.).
Pattern standard
typescript
import type { Client } from 'discord.js';
import { env } from '../../../config/env.js';
import { logger } from '../../../config/logger.js';
import { notifyAdminChannel } from '../../../infrastructure/discord/notifier.js';
const log = logger.child({ module: 'my-handler' });
export function registerMyHandler(client: Client): void {
client.on('eventName', async (arg1, arg2) => {
try {
// 1. Filtrer par guild
if (!arg1.guild || arg1.guild.id !== env.DISCORD_GUILD_ID) return;
// 2. Ignorer les bots
if (arg1.author?.bot || arg1.member?.user.bot) return;
// 3. Logique du handler
// ...
log.debug({ /* context */ }, 'Handler executed');
} catch (err) {
const msg = err instanceof Error ? err.message : String(err);
log.error({ err }, 'Handler error');
await notifyAdminChannel(`Handler error: ${msg}`, 'error').catch(() => null);
}
});
}Regles importantes
- Toujours wrapper dans try/catch : les erreurs non attrapees dans un handler peuvent passer inapercues. Loguer l'erreur et notifier le salon admin.
- Filtrer par guild : verifier que l'evenement provient du bon serveur (
env.DISCORD_GUILD_ID). - Ignorer les bots : eviter les boucles infinies (le bot reagit a ses propres messages).
- Notifier en cas d'erreur : utiliser
notifyAdminChannelavec.catch(() => null)pour eviter une erreur dans la notification elle-meme.
Enregistrement
Dans src/app/bootstrap.ts :
typescript
import { registerMyHandler } from '../modules/<module>/handlers/my.handler.js';
// Dans la fonction bootstrap(), section "Register event handlers"
registerMyHandler(client);Evenements Discord courants
| Evenement | Description | Parametres |
|---|---|---|
messageCreate | Nouveau message | Message |
interactionCreate | Interaction (bouton, modal, slash) | Interaction |
voiceStateUpdate | Changement d'etat vocal | VoiceState, VoiceState |
guildMemberAdd | Nouveau membre rejoint | GuildMember |
guildMemberRemove | Membre quitte | GuildMember |
messageReactionAdd | Reaction ajoutee | MessageReaction, User |
Handlers existants
| Nom | Evenement | Module | Description |
|---|---|---|---|
registerBirthdayHandler | guildMemberAdd | birthdays | Accueil nouveau membre |
registerRsvpHandler | interactionCreate | events | Gestion boutons/modals RSVP |
registerMessageHandler | messageCreate | gamification | Gain d'XP par message |
registerVoiceHandler | voiceStateUpdate | gamification | Tracking sessions vocales |
registerMemberHandler | guildMemberAdd/Remove | moderation | Log arrivees/departs |
registerChatHandler | messageCreate | chat | Reponse IA sur mention |
