如何在没有存在意图的情况下创建转储命令
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基本上
这是获取特定role
的所有members
的更短/更简单的方法:
message.guild.roles.cache.find(r => r.name === 'Name of your role').members.map(m => m.user.tag);
或者,您也可以使用role
的ID
来检索它:
message.guild.roles.cache.get('your role Id').members.map(m => m.user.tag);
两者都将返回 array
或 user 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(这个真的值得一看)【讨论】:
以上是关于如何在没有存在意图的情况下创建转储命令的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有此错误的情况下将此 SQL 转储导入 PhpMyAdmin?