在 Discord.js 中查找具有角色的所有成员

时间:2021-02-05 19:59:48

标签: node.js discord discord.js

我已经尝试使用每个人所说的字面意思,但它一直给我空数组或未定义的数组。我相信我正在使用 discord.js v12。 我真的很确定我确实有这个角色的成员,并且 roleID 是正确的。为什么这是错误的?将 new_channel 与 channel 进行比较。我认为 find 函数中的 ${} 不是必需的,但这不是问题。直到 roles.cache.get(importantRole.id) 部分它都正确,但我似乎无法从中获取成员。

let importantRole = await new_channel.guild.roles.cache.find(r => r.name === `${new_channel.name}`)
console.log(importantRole.id) // --> gives the right role ID
let membersWithRole = await new_channel.guild.roles.cache.get(importantRole.id).members.map(m=>m.user.id);
console.log(membersWithRole) // --> gives []

1 个答案:

答案 0 :(得分:0)

很可能没有缓存具有该角色的成员。您需要:

  1. 如果您还没有在 Discord 开发者面板上启用 select t.* from t where asset like 'EZ%' and not exists (select 1 from t t2 where t2.account = t.account and (t2.asset like '7%' or t2.asset like '8%') ); 特权意图(如果您的机器人少于 100 个公会,这是一个简单的切换;如果您的机器人拥有超过 100 个公会并且经过验证,您需要申请这些,是为了保护用户隐私),以及
  2. 在 Discord.js 客户端的选项中启用 GUILD_MEMBERS 特权意图(通过传递 GUILD_MEMBERS 传递给 new Client({...}) 的对象
  3. 在此命令/模块/等运行时获取公会的所有成员(仅在绝对必要时执行此操作,而不是间隔执行,因为它会导致额外的 API 调用)

另外,没有必要做 { ws: { intents: [ 'GUILD_MEMBERS' ] } },因为 `${variable}` 做同样的事情。 variable` 语法仅在将变量与字符串 ${...} (= `like${this}`)

合并时才需要

要获取所有公会成员,您可以:

'like' + this

请注意,出于某种原因,在我的测试中,已解决的 promise 的值不能用作有效的 <Guild>.members.fetch() // => Promise<GuildMemberManager> ,因此您应该这样做:

GuildMemberManager