// ===== STATS CHANNELS FORM ===== (async function () { const channelSelect = document.getElementById("stats-channel-select"); const typeSelect = document.getElementById("stats-type-select"); const roleGroup = document.getElementById("stats-role-group"); const roleSelect = document.getElementById("stats-role-select"); const formatInput = document.getElementById("stats-format-input"); const addBtn = document.getElementById("add-stats-channel"); const listContainer = document.getElementById("stats-channels-list"); const statTypeNames = { members: "👥 Membres (total)", humans: "👤 Membres (sans bots)", bots: "🤖 Bots", online: "🟢 En ligne", voice: "🎤 En vocal", roles: "🎭 Rôles", channels: "📺 Salons", boosts: "🚀 Boosts", boost_level: "💎 Niveau boost", role_members: "🏷️ Membres avec rôle" }; // Afficher/masquer le sélecteur de rôle typeSelect.addEventListener("change", () => { if (typeSelect.value === "role_members") { roleGroup.style.display = "block"; } else { roleGroup.style.display = "none"; } // Mettre à jour le format par défaut const formats = { members: "👥 Membres: {stat}", humans: "👤 Humains: {stat}", bots: "🤖 Bots: {stat}", online: "🟢 En ligne: {stat}", voice: "🎤 En vocal: {stat}", roles: "🎭 Rôles: {stat}", channels: "📺 Salons: {stat}", boosts: "🚀 Boosts: {stat}", boost_level: "💎 Niveau: {stat}", role_members: "🏷️ Rôle: {stat}" }; formatInput.value = formats[typeSelect.value] || "📊 {stat}"; }); // Charger les salons vocaux async function loadVoiceChannels() { try { const res = await fetch(`/api/bot/get-voice-channels/${guildId}`); const channels = await res.json(); channelSelect.innerHTML = ''; channels.forEach(ch => { const opt = document.createElement("option"); opt.value = ch.id; opt.textContent = "🔊 " + ch.name; channelSelect.appendChild(opt); }); } catch (err) { console.error("Erreur chargement salons vocaux:", err); } } // Charger les rôles async function loadRoles() { try { const res = await fetch(`/api/bot/get-roles/${guildId}`); const roles = await res.json(); roleSelect.innerHTML = ''; roles.forEach(role => { const opt = document.createElement("option"); opt.value = role.id; opt.textContent = role.name; roleSelect.appendChild(opt); }); } catch (err) { console.error("Erreur chargement rôles:", err); } } // Charger la liste des salons configurés async function loadStatsChannels() { try { const res = await fetch(`/api/bot/get-stats-channels/${guildId}`); const channels = await res.json(); if (channels.length === 0) { listContainer.innerHTML = '
Aucun salon configuré.
'; return; } // Récupérer les infos des salons vocaux pour afficher les noms const voiceRes = await fetch(`/api/bot/get-voice-channels/${guildId}`); const voiceChannels = await voiceRes.json(); const voiceMap = {}; voiceChannels.forEach(ch => voiceMap[ch.id] = ch.name); // Récupérer les rôles const rolesRes = await fetch(`/api/bot/get-roles/${guildId}`); const roles = await rolesRes.json(); const rolesMap = {}; roles.forEach(r => rolesMap[r.id] = r.name); listContainer.innerHTML = channels.map(ch => { const channelName = voiceMap[ch.channel_id] || "Salon inconnu"; const typeName = statTypeNames[ch.stat_type] || ch.stat_type; const roleInfo = ch.stat_type === "role_members" && ch.role_id ? ` (${rolesMap[ch.role_id] || "Rôle inconnu"})` : ""; return `${ch.format}