@sayme0w

Почему не уменьшается значение в баннере дискорд?

Бот для отображения количества людей в голосовых каналах на сервере, при подключении в голосовой канал число увеличивается, но при отключении от канала не уменьшается.

const Discord = require('discord.js');
const Canvas = require('canvas')
const fs = require('fs').promises;
const client = new Discord.Client({
    intents: [
        Discord.Intents.FLAGS.GUILD_VOICE_STATES,
        Discord.Intents.FLAGS.GUILDS
    ]
});

client.on('ready', () => {
    console.log('ready');
    setInterval(changeBanner, 30000)
});

async function changeBanner() {
    const images = await fs.readdir('images');
    const guild = client.guilds.cache.get('ID СЕРВЕРА');
    const number = await getVoiceMembers(guild);
    const banner = await editBanner(image, getVoiceMembers(guild));
    await guild.setBanner(banner);
}

function getVoiceMembers(guild) {
    let count = 0;
    guild.voiceStates.cache.each(() => count++)
    return count
    
}

async function editBanner(image, number) {
    const canvas = Canvas.createCanvas(960, 540);
    const context = canvas.getContext('2d');
    const background = await Canvas.loadImage(image);
    context.drawImage(background, 0, 0, canvas.width, canvas.height);
    context.font = '130px bebas neue bold';
    context.fillStyle = '#000';
    context.fillText(`${number}`, 240, 470);
    context.fillStyle = '#fff';
    context.fillText(`${number}`, 238, 468);
    return canvas.toBuffer();
}

client.login("token")
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
Syjalo
@Syjalo
Представьте себе бота
При выходе из голосового канала VoiceState не удаляется из кэша, его канал просто становится null.
Просто посчитайте VoiceState с каналами.
<Guild>.voiceStates.cache.reduce((acc, state) => state.channelId ? acc + 1 : acc, 0);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы