【问题标题】:How to count members belonging to a certain role in Discord.js bot?如何计算 Discord.js 机器人中属于某个角色的成员?
【发布时间】:2021-05-12 12:07:36
【问题描述】:

我正在尝试实现一个函数,该函数会发送消息分配给某个角色的用户数量。 几个月前它运行良好,但在某个更新之后它就停止了正常运行。

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()等等。任何帮助将不胜感激。

【问题讨论】:

    标签: javascript discord discord.js


    【解决方案1】:

    您需要在您的应用程序中启用SERVER MEMBERS INTENT

    【讨论】:

      【解决方案2】:

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

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

      这将返回如下响应:

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

      【讨论】:

      • 此端点不适用于机器人令牌或承载令牌。
      • 是的,很抱歉。
      猜你喜欢
      • 1970-01-01
      • 2021-07-25
      • 2021-05-10
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 2020-11-16
      • 2021-03-14
      相关资源
      最近更新 更多