Javascript 获取帮会成员并过滤他们(Discord.js)

Javascript 获取帮会成员并过滤他们(Discord.js),javascript,node.js,discord.js,Javascript,Node.js,Discord.js,我是Discord.js的新手,正在尝试使用下图所示的服务器信息命令。我陷入了一个需要获取所有公会成员并按当前状态和bot属性筛选他们的时刻。我读到上面说我需要把所有的公会成员都找来: msg.guild.members.fetch().then(fetchedMembers=>{ const totalOnline=fetchedMembers.filter(member=>member.presence.status===“online”); msg.channel.send(`目前有${t

我是Discord.js的新手,正在尝试使用下图所示的服务器信息命令。我陷入了一个需要获取所有公会成员并按当前状态和
bot
属性筛选他们的时刻。我读到上面说我需要把所有的公会成员都找来:

msg.guild.members.fetch().then(fetchedMembers=>{
const totalOnline=fetchedMembers.filter(member=>member.presence.status===“online”);
msg.channel.send(`目前有${totalOnline.size}会员在线加入这个公会!`);
});
我的命令以嵌入的形式发送,我将过滤后的成员计数添加到变量中,然后将该值插入到嵌入字段中。如果我将embed发送到then()块内的一个通道,它就工作了,嵌入字段被正确添加。但是我需要添加关于公会的其他信息,例如频道数量、所有者、地区等。如果我使用then()创建字段,而不是使用未定义的计数


另外,对不起,我的英语很差,我不是一个母语为英语的人。您之所以得到
未定义的
,是因为
fetch()
是一个异步函数,这意味着它是在后台完成的,一旦完成,就会调用回调

您不能将其置于
then()
块之外,因为这样您的代码将在
fetch()
完成并用结果更新变量之前执行,除此之外,
totalOnline
变量是在该块内创建的,因此它不会在该块之外工作,因为它是该范围内的局部变量

这篇文章可能更容易理解:

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

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}!`);
});

您可以不使用
fetch()
而只为成员集合分配一个变量

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

// v11
let allmembers = message.guild.members;
一旦你有了它,你可以过滤它,并把它放入一个嵌入式或消息等

const totalOnline = allmembers.filter(member => member.presence.status === 'online');

message.channel.send(`There are currently ${totalOnline.size} members online in ${message.guild.name}!`);

非常感谢。我要读这篇文章,我想它应该会有帮助。