获取公会成员并过滤他们(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。


青春有我
浏览 140回答 3
3回答

神不在的星期二

你得到的原因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}!`);});

SMILET

您可以做的而不是使用fetch()只是为成员集合分配一个变量。// v12let allmembers = message.guild.members.cache;// v11let 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}!`);

阿晨1998

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();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript