Stats channels
Le bot affiche des statistiques en temps reel sous forme de salons vocaux verrouilles, organises en categories.
Architecture
Deux categories de salons vocaux sont creees automatiquement :
Categorie "Stats"
| Salon | Contenu |
|---|---|
| Top | Membre avec le plus haut niveau (nom d'affichage resolu) |
| Msgs | Nombre de messages envoyes aujourd'hui |
| Streak | Nombre de jours consecutifs avec au moins un message |
Categorie "Valorant"
Presente uniquement si ENABLE_VALORANT_TRACKER=true.
| Salon (label) | Salon (valeur) |
|---|---|
| Meilleur Rank | Rank + nom du joueur |
| Meilleur K/D | K/D + nom du joueur |
Le meilleur rank est determine par comparaison du rankTierId (ID numerique du palier). Le meilleur K/D est le ratio le plus eleve parmi tous les joueurs caches.
Les donnees Valorant proviennent du cache ValorantTrackerCache, seuls les profils sans erreur sont consideres.
Mise a jour
- Cron toutes les 5 minutes (
*/5 * * * *) : le cronstats-channelsappelleupdateStatsChannels(). - Apres
/valorant stats: les stats channels sont rafraichis en arriere-plan a chaque consultation de stats. - Au demarrage du bot : une mise a jour initiale est effectuee dans le handler
clientReady.
Synchronisation des salons
La synchronisation est basee sur la position des salons dans la categorie :
- Les salons vocaux existants dans la categorie sont tries par position.
- Pour chaque nom de salon attendu :
- S'il existe deja a cette position, son nom est mis a jour si necessaire.
- S'il n'existe pas, un nouveau salon vocal est cree.
- Les salons surnumeraires sont supprimes.
Ce systeme de matching par position (et non par nom) permet de gerer proprement les creations et suppressions dynamiques.
Permissions
Les salons vocaux sont verrouilles pour empecher les membres de s'y connecter :
@everyone :
- Deny: Connect
- Allow: ViewChannelLes membres peuvent donc voir les salons (et donc les statistiques) mais pas se connecter dedans.
Donnees affichees
Nom d'affichage (Top) : le nom est resolu via guild.members.fetch(discordId) pour utiliser le displayName (surnom serveur si defini), tronque a 10 caracteres.
Streak : calcule en remontant jour par jour depuis aujourd'hui. Pour chaque jour, une requete verifie si au moins un MessageStatDaily avec count > 0 existe. Le streak s'arrete au premier jour sans activite (sauf le jour actuel qui peut ne pas encore avoir de messages).
Configuration
Les IDs des categories sont stockes dans GuildConfig :
statsCategoryId: categorie StatsvaloCategoryId: categorie Valorant
Si une categorie n'existe pas ou a ete supprimee, elle est recree automatiquement.
