【问题标题】:Discord Return Specified user's activity statusDiscord 返回指定用户的活动状态
【发布时间】:2019-08-28 00:53:48
【问题描述】:

我正在尝试创建一个机器人来检查服务器用户的活动状态并返回它们。我实际上无法从用户那里检索活动状态,我什至不知道这是否可能。

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);

【问题讨论】:

    标签: bots discord discord.js


    【解决方案1】:

    首先,我做了一个 for 循环遍历所有公会 机器人所在的位置。在这个循环中,我通过所有 guildMembers 执行另一个循环。我将每个 guildMember 的状态推送到一个 new Array 中,我在循环末尾添加了 an Object。 也许这听起来很复杂,但如果您了解 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);
    

    【讨论】:

    • 你好。是的,我正在尝试获取活动状态(在线、空闲和离线),这绝对是朝着正确方向迈出的一大步。当我运行你的代码时,我得到了这个错误link。我要去看看它,但自从我上次编码以来已经有很长时间了。之前提到的类似问题link 返回每​​个用户的基本信息以及他们的活动状态。我需要指定要监视的用户是否可以使用它?如果没有,我可以使用你给我的东西。 :)
    • 很抱歉发生了这个问题,您能否告诉我您的 index.js 中的第 26 行,以便我知道我必须在哪里查找问题? :) 谢谢! @巴比
    • 我通过将 setInterval(await statuscheck(client), 10000); 更改为 setInterval(() => statuscheck(client), 10000); 对回调错误进行了排序。我已经解决了这个问题,但是我还有很多其他问题,我不知道如何解决,所以我要回答我的问题并打开一个新问题来解决这个问题。 ty
    • 不客气! :) 介意接受我的回答吗? @巴比
    猜你喜欢
    • 2021-04-24
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多