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 :
- Upsert
UserProfile: cree le profil s'il n'existe pas (avec lediscordIdetusername). - Upsert
UserXp:- Si le profil XP existe : incremente
totalXpetweeklyXpdu montant. - Si le profil XP n'existe pas : cree un nouveau record avec
totalXp = amountetweeklyXp = amount.
- Si le profil XP existe : incremente
- Le nouveau niveau est calcule via
calculateLevel(totalXp). - L'action est tracee dans
AuditLog(actionADMIN_GIVE_XP, details : target, amount, newTotal).
/admin remove-xp <@user> <amount>
Retire de l'XP a un membre.
Actions en base de donnees :
- Lecture
UserProfile: si le profil n'existe pas, erreur. - Lecture
UserXp: si pas d'XP, erreur. - 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.
- Le nouveau niveau est recalcule.
- L'action est tracee dans
AuditLog(actionADMIN_REMOVE_XP).
/admin set-level <@user> <level>
Definit directement le niveau d'un membre.
Actions en base de donnees :
- 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)) - Upsert
UserProfileet UpsertUserXp: ecrasetotalXpavecxpNeeded. - L'action est tracee dans
AuditLog(actionADMIN_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 :
- Lecture
UserProfile: si le profil n'existe pas, erreur. - UpdateMany
UserXp: met a zero les champstotalXp,messageXp,voiceXp,weeklyXp,level. - L'action est tracee dans
AuditLog(actionADMIN_RESET_XP).
/admin reset-weekly
Force le reset hebdomadaire pour tous les membres du serveur.
Actions en base de donnees :
- UpdateMany
UserXp: pour tous les records duguildId, metweeklyXp = 0etweeklyResetAt = new Date(). - Le nombre de membres affectes est affiche dans la reponse.
- L'action est tracee dans
AuditLog(actionADMIN_RESET_WEEKLY, details : affected count).
Cette commande fait la meme chose que le cron automatique du lundi minuit, mais permet de la declencher manuellement.
