检索具有特定角色的用户

时间:2018-11-18 10:13:10

标签: javascript discord.js

最近,我遇到了一个我一直在试图解决的问题,但我一直无法找到一个好的解决方案或解决这个问题。
我的目标是检查一个角色,看看它有多少用户在线。到目前为止,它每1小时检查一次,而我已经做到了,以便一旦bot就绪(通过ready事件)就可以启动。
我一直遇到的问题实际上是检索具有特定角色的在线人员列表,但我不确定该如何进行。我目前有此代码(非常简单,没有太多内容),而且我不太确定该怎么做才能使漫游器检查指定角色的成员并检查其状态,以确保他们在线或不。

如果任何人都可以提供任何帮助或引导我朝正确的方向前进,那就太好了。谢谢。 (此外,当前这是非常基本的代码,什么也没做,这就是我刚开始的工作。我不确定如何找到其余的代码,我已经尝试遍历文档,但是我找不到我需要的。)

function showOnline() {
  let onlinePeople;

  let onlineEmbed = new Discord.RichEmbed()
    .setAuthor(message.author.username, message.author.displayAvatarURL)
    .setColor("#00ff00")
    .setDescription(`${onlinePeople}`)
    .setFooter();
}

setInterval(showPeople, 2000); // 3600000 (1 hour)

1 个答案:

答案 0 :(得分:3)

<Role>.members返回Collection中的GuildMember。 GuildMember类具有presence属性,该属性返回Presence。 Presence类具有status属性,该属性返回“ online” /“ offline” /“ idle” /“ dnd”的字符串。

因此,使用这些属性并通过filter方法对集合进行操作,您可以过滤 成员集合来自角色,其中公会成员存在的状态为“在线”

结果为:<Role>.members.filter(member => member.presence.status === "online"),它返回具有特定角色并且当时处于联机状态的GuildMembers的集合。

然后,您可以使用类似<Collection>.map()的方法从集合中获取所需的属性,例如,如果要从GuildMembers获取用户名,则可以执行<Collection of GuildMembers>.map(member => member.user.username),这将返回用户名数组来自成员集合。