Онлайн сервера discord в названии канала
Возникла такая проблема с ботов discord. Мне нужно, что бы бот выводил количество пользователей онлайн в названии канала. Имеется 2 кода. Первый Не работает вовсе. После запуска бота он показывает правильное значение, а потом это число только растет, не зависимо от реального числа пользователей онлайн.
async function test1() {
bot.channels.find(c => c.id === "ID канала").setName(`В сети: ${bot.guilds.get('ID сервера').presences.size}`);
}; setInterval(test1, 30000)
Второй работает и обновляет информацию корректно, но показывает только тех пользователей, у которых горит зеленый статус. Желтых и красных он не считает.
async function test1() {
bot.channels.find(c => c.id === "ID канала").setName(`В сети: ${bot.guilds.get('ID сервера').members.filter(m => ["online"].includes(m.presence.status)).size}`);
};setInterval(test1, 30000)
Подскажите правильный код, что бы учитывались не только пользователи со статусом "в сети", но и "не активен", "не беспокоить"
const channelId = 'ID канала';
function test1() {
const channel = bot.channels.find(channel => channel.id === channelId);
const allMembers = bot.guilds.get('ID сервера').members;
const notOfflineMembers = allMembers.filter(member => member.status !== 'offline');
channel.setName(`В сети: ${notOfflineMembers.length}`);
}
test1();
setInterval(() => test1(), 30000);
E:\BDOhelp\bot.js:67
const allMembers = bot.guilds.get('674747448534630421').members;
^
TypeError: Cannot read property 'members' of undefined
at test1 (E:\BDOhelp\bot.js:67:57)
at Object.<anonymous> (E:\BDOhelp\bot.js:73:1)
Итоговый вариант:
async function test1() {
bot.channels.find(c => c.id === "ID канала").setName(`Участников: ${bot.guilds.get('ID сервера').members.size}`);
bot.channels.find(c => c.id === "ID канала").setName(`В сети: ${bot.guilds.get('ID сервера').members.filter((member) => !member.user.bot && member.user.presence.status !== 'offline').size}`);
};
setInterval(test1, 30000);
Ответы (1 шт):
Автор решения: MoloF
→ Ссылка
// Подключаем библиотеку - npm install discord.js
const Discord = require('discord.js');
// Инициализируем клиент
const client = new Discord.Client();
// Подгружаем конфигурационный файл с токеном и ID сервера
const config = require('./config.json');
// Авторизуем клиент
client.login(config.token);
// Дожидаемся события ready для подлюкчения бота к серверам
client.on('ready', () => {
setChannelName();
setInterval(setChannelName, 30 * 1000);
});
// Асинхронная функция установки названия сервера
async function setChannelName() {
// Находим наш сервер
const channel = client.guilds.array().find((guild) => guild.id === config.channelID);
// Проверяем найден ли сервер
if (!channel) return;
// Посылаем запрос для получения списка всех участников на сервере
const responseMembers = await channel.fetchMembers();
// Фильтруем коллекцию участников, не бот и не оффлайн.
const notOfflineMembersLength = responseMembers.members.filter(
(member) => !member.user.bot && member.user.presence.status !== 'offline'
).size;
// Устанавливаем название сервера
channel.setName(`В сети: ${notOfflineMembersLength}`);
}