Skip to content

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

  1. Verification du role anniversaire : si birthdayRoleId n'est pas configure dans GuildConfig, 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)
    • Sauvegarde l'ID du role dans GuildConfig.birthdayRoleId.
  2. Retrait du role des anniversaires d'hier : le role est retire de tous les membres qui le portent encore.

  3. Recuperation des anniversaires du jour : requete sur la table Birthday filtree par jour et mois actuels.

  4. Pour chaque anniversaire :

    • Verification d'idempotence : si lastWished correspond a la date du jour, l'anniversaire est ignore (evite les doublons en cas de redemarrage).
    • Attribution du role 🎂 Anniversaire au 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 ! 🎁🥳
    • Mise a jour de lastWished avec la date du jour.
  5. 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) :

ChampTypeDescription
dayIntJour de naissance
monthIntMois de naissance
yearInt?Annee (optionnel, pour calculer l'age)
timezoneStringFuseau horaire (defaut Europe/Paris)
isPublicBooleanVisibilite (defaut true)
lastWishedDateTime?Date du dernier souhait

Index : @@index([guildId, month, day]) pour les requetes quotidiennes.