javascript - 获取公会成员并过滤他们(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
。
PS对不起我的英语不好,我不是母语人士
解决方案
你得到的原因undefined
是因为fetch()
它是一个异步函数,这意味着它是在后台完成的,一旦完成,then
就会调用回调。
您不能将它放在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}!`);
});
推荐阅读
- mysql - 如何对数据进行分组?
- html - 反正有没有专门针对css文本中的数字?
- java - 正则表达式查找不同的数据库字段
- android - android P 中的优先级存储桶究竟会如何影响我的应用程序中的后台作业/任务?
- nuget-package - nuspec.xsd 存储库类型
- html - 连续元素的 CSS 或 XPath 选择器
- java - 如何从字符串中删除整数部分?
- chromecast - 如何在 CAF Receiver 中获取 DASH 资产的可用比特率和质量级别信息?
- assembly - 我可以从 asm(例如 mips asm)生成 llvm 字节码吗?
- node.js - z shell 问题,运行别名并得到这个“zsh: parse error near `}'”