最近,我遇到了一个我一直在试图解决的问题,但我一直无法找到一个好的解决方案或解决这个问题。
我的目标是检查一个角色,看看它有多少用户在线。到目前为止,它每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)
答案 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)
,这将返回用户名数组来自成员集合。