Version 2.0.0 - update of everything

This commit is contained in:
raphix committed 2026-10-07 14:04:26 +02:00
1 parent 164a1da009
commit 6017e03eac
85 files changed
+13065 -2107

No files matched your search

+60 -14
View File
@@ -2,30 +2,76 @@ 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, imageUrl) {
const client = bot.getClient()
client.user.setActivity(`${songName} - ${artistName}`,{
type: ActivityType.Listening,
url: imageUrl
});
dlog.log(`Activité mise à jour : ${songName} - ${artistName}`)
function setMusicActivity(songName, artistName) {
applyActivity(`${songName} - ${artistName}`)
}
function idleActivity() {
const client = bot.getClient()
client.user.setActivity("le silence absolu", {
type: ActivityType.Listening
});
dlog.log(`Activité mise à jour : rien`)
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}
module.exports = {getActivity, setMusicActivity, idleActivity, refresh}