我正在尝试创建一个机器人,该机器人检查服务器用户的活动状态并返回他们。我在从用户那里检索活动状态时遇到了麻烦,我什至不知道是否可能。
const Discord = require('discord.js');
const client = new Discord.Client();
const token ='nah';
const PREFIX = '//';
function Statuscheck() {
///Code for retrieval of the status check would go here
console.log('set');///So I know the timer works
}
client.on('ready', () =>{
console.log('Bot is running...');
})
client.on('ready', () =>{
setInterval(Statuscheck, 10000)//runs the check funtion evrey 10s to keep up to date
})
client.login(token);
答案 0 :(得分:1)
首先,我对机器人所在的所有公会进行了 for循环。在此循环中,我遍历所有guildMembers 。我将每个guildMember
的状态放入新数组中,并在循环结束时添加到对象中。
也许这听起来确实很复杂,但是如果您了解 Javascript的基础,并不是很复杂。
(我不确定您是否想要用户状态(在线/离线/ dnd / idle )或游戏状态。是否想要游戏状态,将 status.push(m.user.presence.status)
行更改为 status.push(m.user.presence.game)
)
尝试使用以下代码:
const Discord = require('discord.js');
const client = new Discord.Client();
const token = 'nah';
const PREFIX = '//';
async function statuscheck() {
const statusArray = {};
await client.guilds.array().forEach(async g => {
const status = [];
await g.members.array().forEach(m => {
status.push(m.user.presence.status);
});
statusArray[g.id] = status;
});
console.log('set'); // /So I know the timer works
return statusArray;
}
client.on('ready', () => {
console.log('Bot is running...');
});
client.on('ready', async client => {
setInterval(await statuscheck(client), 10000); // runs the check funtion evrey 10s to keep up to date
});
client.login(token);