Architecture moteur de logs & dispatcher #2

Open
opened 2026-05-31 01:34:27 +02:00 by raphael · 0 comments
Owner

Description

Implémenter l'infrastructure commune au système de logging : dispatcher d’events, couche de configuration DB/cache, constructeur d’embeds standardisés, anti-boucle et rate-limiting par salon.
Aucun event Discord spécifique n’est traité ici, seuls les traits/utilitaires communs sont créés.

Events / Abstractions concernés

Event Discord Struct Serenity Lien docs.rs
Dispatcher générique (enum) Event https://docs.rs/serenity/latest/serenity/model/event/enum.Event.html

Critères d'acceptation

  • Dispatcher LogDispatcher qui reçoit le Context et l'Event et route vers le bon handler.
  • Enum LogCategory défini : Moderation, Member, Message, Voice, Channel, Role, Invite, Thread, Server.
  • Table guild_logs (ou équivalent) : guild_id, category, channel_id, is_enabled, ignored_channels, ignored_roles.
  • Cache en mémoire (DashMap<(GuildId, LogCategory), LogConfig>) pour éviter la DB à chaque event.
  • Utilitaire LogRenderer : construit un CreateEmbed standardisé (couleur par catégorie, timestamp ISO, footer avec ID).
  • Service LogSender : envoi async avec rate-limit par salon (max 5 msg / 5s) et queue interne.
  • Anti-boucle : une action exécutée par le bot dans un salon de log ne génère pas de log.
  • Fallback permission : si le bot n’a pas SendMessages dans le salon de log, la catégorie se désactive et on trace en interne.

Notes d'implémentation

  • Prévoir l’intent MESSAGE_CONTENT pour le futur ticket Messages mais ne pas l’activer ici si inutile.
  • Prévoir l’intent GUILD_MEMBERS pour les futures features membres.
### Description Implémenter l'infrastructure commune au système de logging : dispatcher d’events, couche de configuration DB/cache, constructeur d’embeds standardisés, anti-boucle et rate-limiting par salon. **Aucun event Discord spécifique n’est traité ici**, seuls les traits/utilitaires communs sont créés. ### Events / Abstractions concernés | Event Discord | Struct Serenity | Lien docs.rs | |---------------|-----------------|--------------| | Dispatcher générique (enum) | `Event` | https://docs.rs/serenity/latest/serenity/model/event/enum.Event.html | ### Critères d'acceptation - [ ] Dispatcher `LogDispatcher` qui reçoit le `Context` et l'`Event` et route vers le bon handler. - [ ] Enum `LogCategory` défini : `Moderation`, `Member`, `Message`, `Voice`, `Channel`, `Role`, `Invite`, `Thread`, `Server`. - [ ] Table `guild_logs` (ou équivalent) : `guild_id`, `category`, `channel_id`, `is_enabled`, `ignored_channels`, `ignored_roles`. - [ ] Cache en mémoire (`DashMap<(GuildId, LogCategory), LogConfig>`) pour éviter la DB à chaque event. - [ ] Utilitaire `LogRenderer` : construit un `CreateEmbed` standardisé (couleur par catégorie, timestamp ISO, footer avec ID). - [ ] Service `LogSender` : envoi async avec rate-limit par salon (max 5 msg / 5s) et queue interne. - [ ] Anti-boucle : une action exécutée par le bot dans un salon de log ne génère pas de log. - [ ] Fallback permission : si le bot n’a pas `SendMessages` dans le salon de log, la catégorie se désactive et on trace en interne. ### Notes d'implémentation - Prévoir l’intent `MESSAGE_CONTENT` pour le futur ticket Messages mais ne pas l’activer ici si inutile. - Prévoir l’intent `GUILD_MEMBERS` pour les futures features membres.
raphael added this to the Logs System milestone 2026-05-31 01:34:27 +02:00
raphael self-assigned this 2026-05-31 01:34:27 +02:00
raphael added this to the TTY project 2026-05-31 01:34:27 +02:00
raphael changed title from Architecture du moteur de logs to Architecture moteur de logs & dispatcher 2026-05-31 01:43:01 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
raphael/tty#2
No description provided.