Version 2.0.0 - update of everything
This commit is contained in:
85 files changed
+13065
-2107
No files matched your search
+60
-14
@@ -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}
|
||||
Reference in new issue
Block a user