我是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。对不起,我的英语不好,我不是母语人士
答案 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;