【问题标题】:How to create dump command without presence intents如何在没有存在意图的情况下创建转储命令
【发布时间】:2021-07-20 08:51:25
【问题描述】:

我正在创建一个dump command,这是我的代码:

let role = message.mentions.roles.first() || message.guild.roles.cache.get(args[1]);

let oop = message.guild.members.cache.filter((member) => {
    return member.roles.cache.get(role.id);
  })
  .map((member) => {
    return member.user.tag;
  });

message.channel.send(`${oop.join("\n")}`);

我无法打开它,因为我的机器人已经过验证,而且 Discord 不会批准我的请求,因为他们不会只为 1 个小命令授予意图

我也知道你可以使用来获取成员

guild.members.fetch()

但是guild.members.fetch()guild.members.cache 花费的时间更长,所以你需要使用await 和/或.then()

我只是不知道如何在我的代码中实现它。

我不确定是否有办法,但如果有,请告诉我:D。

【问题讨论】:

  • 什么是转储命令?
  • @Radnerus when I do !dump 它将显示所有具有该角色的人。
  • Discord 现在正在强制执行以启用该意图。因此,如果不启用意图,您将无法执行此操作。

标签: javascript node.js discord discord.js


【解决方案1】:

基本上

这是获取特定role 的所有members 的更短/更简单的方法:

message.guild.roles.cache.find(r => r.name === 'Name of your role').members.map(m => m.user.tag);

或者,您也可以使用roleID 来检索它:

message.guild.roles.cache.get('your role Id').members.map(m => m.user.tag);

两者都将返回 arrayuser tags。之后你可以.join()这个数组为你想要/需要的任何格式,例如:

const roleMemberList = message.guild.roles.cache.get('12345678910').members.map(m => m.user.tag).join('\n');

输出如下所示:

"Member1
 Member2
 Member3"

但是……

根据docs,您必须启用privileged intents 才能从cache 获取用户。如果 Discord 没有将您的机器人列入白名单,您可能需要考虑将其他 use cases 用于 intents

所以我猜你必须硬着头皮使用

guild.members.fetch()

直到你进入白名单


参考

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2023-02-24
    相关资源
    最近更新 更多