如何在没有存在意图的情况下创建转储命令

Posted

技术标签:

【中文标题】如何在没有存在意图的情况下创建转储命令【英文标题】: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 现在正在强制执行以启用该意图。因此,如果不启用意图,您将无法执行此操作。 【参考方案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()

直到你进入白名单


参考

Discord is now enforcing privileged intents How do I list all Members with a Role In Discord.Js Roles and Permissions(这个真的值得一看)

【讨论】:

以上是关于如何在没有存在意图的情况下创建转储命令的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 YAML 在没有新行的情况下转储长行

MySQL:如何在忽略几个数据库的情况下恢复转储

如何在没有此错误的情况下将此 SQL 转储导入 PhpMyAdmin?

当 gcc 中的应用程序在没有 gdb 的情况下崩溃时,如何生成堆栈转储和转储的寄存器值?

Ubuntu终端中文件创建

如何更新 svn 转储