const bot = require('./Bot') const dlog = require('loguix').getInstance('Discord') const {ActivityType} = require('discord.js') // Regroupement des mises à jour de présence : pas de clignotement entre deux morceaux, pas de rate limit const REFRESH_DELAY = 1500 // Statuts où le bot "écoute" quelque chose const ACTIVE_STATUS = ["playing", "loading", "stalled"] let refreshTimer = null // Dernière présence envoyée : on n'appelle Discord que si elle change let lastActivity = null function getActivity() { const client = bot.getClient() return client.user.presence.activities[0] } function applyActivity(text) { const client = bot.getClient() if(!client?.user) return false if(text === lastActivity) return true try { client.user.setActivity(text, { type: ActivityType.Listening }); lastActivity = text dlog.log(`Activité mise à jour : ${text}`) return true } catch(e) { dlog.error(`Impossible de mettre à jour l'activité : ${e?.message || e}`) return false } } // Set All type of activities function setMusicActivity(songName, artistName) { applyActivity(`${songName} - ${artistName}`) } function idleActivity() { applyActivity("le silence absolu") } /** * Calcule la présence à partir de TOUS les players (cohérente en multi-serveur) */ function computeActivity() { const { getAllPlayers } = require('../player/Player') const active = getAllPlayers().filter(player => ACTIVE_STATUS.includes(player.status) && player.queue?.current) if(active.length === 0) return "le silence absolu" if(active.length === 1) { const song = active[0].queue.current return `${song.title} - ${song.author}` } return `de la musique sur ${active.length} serveurs` } /** * Demande une mise à jour de la présence (debounce de 1,5 s) */ function refresh() { if(refreshTimer) return refreshTimer = setTimeout(() => { refreshTimer = null try { applyActivity(computeActivity()) } catch(e) { dlog.error(`Erreur lors du calcul de l'activité : ${e?.message || e}`) } }, REFRESH_DELAY) refreshTimer.unref?.() } module.exports = {getActivity, setMusicActivity, idleActivity, refresh}