为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

青春有我 2023-05-11 14:41:15
我是 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。
查看完整描述

3 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

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

你不能把它放在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}!`);

});


查看完整回答
反对 回复 2023-05-11
?
SMILET

TA贡献1796条经验 获得超4个赞

您可以做的而不是使用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}!`);



查看完整回答
反对 回复 2023-05-11
?
阿晨1998

TA贡献2037条经验 获得超6个赞

let members = (await guild.members.fetch())

    .filter(m => m._roles.includes(ROLE_ID));


let member_ids = members.map(m => m.user.id);


let member_count = members.size();


查看完整回答
反对 回复 2023-05-11
  • 3 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信