Skip to content

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"

SalonContenu
TopMembre avec le plus haut niveau (nom d'affichage resolu)
MsgsNombre de messages envoyes aujourd'hui
StreakNombre de jours consecutifs avec au moins un message

Categorie "Valorant"

Presente uniquement si ENABLE_VALORANT_TRACKER=true.

Salon (label)Salon (valeur)
Meilleur RankRank + nom du joueur
Meilleur K/DK/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 cron stats-channels appelle updateStatsChannels().
  • 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 :

  1. Les salons vocaux existants dans la categorie sont tries par position.
  2. 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.
  3. 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: ViewChannel

Les 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 Stats
  • valoCategoryId : categorie Valorant

Si une categorie n'existe pas ou a ete supprimee, elle est recree automatiquement.