获取公会成员并对其进行过滤(Discord.js)

时间:2020-10-14 08:59:58

标签: javascript node.js discord.js

我是Discord.js的新手,正在尝试使服务器信息命令如下图所示。我陷入需要获取所有公会成员并按当前状态和bot属性对其进行过滤的时刻。我读了https://discordjs.guide/popular-topics/common-questions.html,它说我需要获取所有公会成员:

msg.guild.members.fetch().then(fetchedMembers => {
    const totalOnline = fetchedMembers.filter(member => member.presence.status === 'online');
    msg.channel.send(`There are currently ${totalOnline.size} members online in this guild!`);
});

我的命令以嵌入方式发送,我将过滤后的成员计数添加到变量中,然后将此值插入到嵌入字段中。如果我在then()块内部将嵌入发送到通道,则它正在工作,嵌入字段已正确添加。但是我需要添加有关行会的其他信息,例如频道数,所有者,区域等。如果我从then()中创建字段,而不是计数,我会得到undefined

P.S。对不起,我的英语不好,我不是母语人士

2 个答案:

答案 0 :(得分:0)

获得undefined的原因是因为fetch()是一个异步函数,这意味着它在后台完成,一旦完成,就会调用回调then。 / p>

您不能将其放在then()块之外,因为这样,您的代码将在fetch()完成之前执行,并使用结果更新变量,此外,totalOnline变量是在该块内部创建的,因此无论在哪种情况下都无法工作,因为它是该作用域内的局部变量。

本文可能会使您更容易理解:https://www.freecodecamp.org/news/async-await-javascript-tutorial/

您可以在该范围内使用其他所需的信息。 例如:

msg.guild.members.fetch().then(fetchedMembers => {
    const totalOnline = fetchedMembers.filter(member => member.presence.status === 'online');
    msg.channel.send(`There are currently ${totalOnline.size} members online in ${msg.guild.name}!`);
});

答案 1 :(得分:0)

除了使用<!DOCTYPE html> <head> <title>CSS</title> <link rel="stylesheet" href="style.css"> </head> <body> <input type="text" maxlength="10"> </body> </html>之外,您可以做的只是向成员集合分配一个变量。

fetch()

一旦有了它,就可以对其进行过滤并将其放入嵌入或消息等中。

// v12
let allmembers = message.guild.members.cache;

// v11
let allmembers = message.guild.members;