如何统计属于 Discord.js bot 中某个角色的成员?

时间:2021-02-08 20:52:30

标签: javascript discord discord.js

我正在尝试实现一个功能,该功能会显示分配给某个角色的用户数量。 几个月前,它完美无缺,但在进行了某些更新后,它就无法正常工作了。

let count = message.guild.members.filter(m => m.roles.find(r => r.name === roleName)).size;
message.channel.send(user + " Count of users in " + roleName + ": "+count);

我的代码现在看起来像这样:

let count = message.guild.members.cache.filter(m => m.roles.cache.find(r => r.name === roleName)).size; //These commands are in a module export, message is an object passed as an argument into it
message.channel.send(user + " Count of users in " + roleName + ": "+count);

很容易说它不起作用,它通常返回最近与机器人发送消息或互动的用户数。我尝试使用各种 .fetch() 但它们只是返回:

<块引用>

UnhandledPromiseRejectionWarning:错误 [GUILD_MEMBERS_TIMEOUT]:成员没有及时到达

...或类似的东西。 我试过 guild.members.fetch()/guild.fetch() 之类的。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您需要在应用程序中启用 SERVER MEMBERS INTENTenter image description here

答案 1 :(得分:0)

您不需要获取所有用户或启用服务器成员对此类功能的意图。

您可以向 GET 端点发送 https://discord.com/api/v8/guilds/<guildID>/roles/member-counts 请求。

这将返回如下响应:

{
    "538088986342719490": 1,
    "593404972922830848": 2,
    ...
    // "roleID": memberCount,
}