Anniversaires
Le bot souhaite automatiquement les anniversaires des membres chaque matin.
Fonctionnement
Un cron (birthday-check) s'execute tous les jours a 8h00 (schedule 0 8 * * *, timezone implicite du systeme).
Etapes du cron
Verification du role anniversaire : si
birthdayRoleIdn'est pas configure dansGuildConfig, le bot :- Cherche un role existant nomme
🎂 Anniversaire. - S'il n'existe pas, il le cree avec les parametres :
- Nom :
🎂 Anniversaire - Couleur :
#F1C40F(or) - Hoist :
true(affiche separement dans la liste des membres)
- Nom :
- Sauvegarde l'ID du role dans
GuildConfig.birthdayRoleId.
- Cherche un role existant nomme
Retrait du role des anniversaires d'hier : le role est retire de tous les membres qui le portent encore.
Recuperation des anniversaires du jour : requete sur la table
Birthdayfiltree par jour et mois actuels.Pour chaque anniversaire :
- Verification d'idempotence : si
lastWishedcorrespond a la date du jour, l'anniversaire est ignore (evite les doublons en cas de redemarrage). - Attribution du role
🎂 Anniversaireau membre. - Envoi du message dans le salon configure (
birthdayChannelId) :- Si l'annee de naissance est connue :
🎂🎉 C'est l'anniversaire de @membre (X ans) ! Joyeux anniversaire ! 🎁🥳 - Sinon :
🎂🎉 C'est l'anniversaire de @membre ! Joyeux anniversaire ! 🎁🥳
- Si l'annee de naissance est connue :
- Mise a jour de
lastWishedavec la date du jour.
- Verification d'idempotence : si
Notification admin : un message est envoye dans le salon admin avec le nombre d'anniversaires du jour.
Modele de donnees
La table Birthday est liee a UserProfile (relation 1:1) :
| Champ | Type | Description |
|---|---|---|
day | Int | Jour de naissance |
month | Int | Mois de naissance |
year | Int? | Annee (optionnel, pour calculer l'age) |
timezone | String | Fuseau horaire (defaut Europe/Paris) |
isPublic | Boolean | Visibilite (defaut true) |
lastWished | DateTime? | Date du dernier souhait |
Index : @@index([guildId, month, day]) pour les requetes quotidiennes.
