Skip to content

Administration de l'XP

Toutes les commandes d'administration de l'XP sont sous /admin et reservees au proprietaire du bot.

/admin give-xp <@user> <amount>

Ajoute de l'XP a un membre.

Actions en base de donnees :

  1. Upsert UserProfile : cree le profil s'il n'existe pas (avec le discordId et username).
  2. Upsert UserXp :
    • Si le profil XP existe : incremente totalXp et weeklyXp du montant.
    • Si le profil XP n'existe pas : cree un nouveau record avec totalXp = amount et weeklyXp = amount.
  3. Le nouveau niveau est calcule via calculateLevel(totalXp).
  4. L'action est tracee dans AuditLog (action ADMIN_GIVE_XP, details : target, amount, newTotal).

/admin remove-xp <@user> <amount>

Retire de l'XP a un membre.

Actions en base de donnees :

  1. Lecture UserProfile : si le profil n'existe pas, erreur.
  2. Lecture UserXp : si pas d'XP, erreur.
  3. Update UserXp :
    • totalXp = Math.max(0, current.totalXp - amount)
    • weeklyXp = Math.max(0, current.weeklyXp - amount)
    • Le total ne descend jamais en dessous de 0.
  4. Le nouveau niveau est recalcule.
  5. L'action est tracee dans AuditLog (action ADMIN_REMOVE_XP).

/admin set-level <@user> <level>

Definit directement le niveau d'un membre.

Actions en base de donnees :

  1. Calcul de l'XP necessaire : itere la formule de niveau pour calculer l'XP cumule exact correspondant au niveau cible :
    xpNeeded = 0
    threshold = 100
    pour chaque i de 0 a level-1 :
      xpNeeded += threshold
      threshold = floor(100 * 1.5^(i+1))
  2. Upsert UserProfile et Upsert UserXp : ecrase totalXp avec xpNeeded.
  3. L'action est tracee dans AuditLog (action ADMIN_SET_LEVEL, details : target, level, xp).

WARNING

Cette commande ecrase le totalXp. Les champs messageXp, voiceXp et weeklyXp ne sont pas modifies, ce qui peut creer une incoherence entre le total et la somme des sous-totaux.

/admin reset-xp <@user>

Remet toutes les valeurs XP d'un membre a zero.

Actions en base de donnees :

  1. Lecture UserProfile : si le profil n'existe pas, erreur.
  2. UpdateMany UserXp : met a zero les champs totalXp, messageXp, voiceXp, weeklyXp, level.
  3. L'action est tracee dans AuditLog (action ADMIN_RESET_XP).

/admin reset-weekly

Force le reset hebdomadaire pour tous les membres du serveur.

Actions en base de donnees :

  1. UpdateMany UserXp : pour tous les records du guildId, met weeklyXp = 0 et weeklyResetAt = new Date().
  2. Le nombre de membres affectes est affiche dans la reponse.
  3. L'action est tracee dans AuditLog (action ADMIN_RESET_WEEKLY, details : affected count).

Cette commande fait la meme chose que le cron automatique du lundi minuit, mais permet de la declencher manuellement.