discord.js 检查特定用户 ID 是否具有特定角色 ID

时间:2021-01-12 11:38:34

标签: javascript node.js discord.js

我有一些我想要的代码;获取具有特定角色的所有用户(他们的“团队”)。然后,对于特定团队中的每个用户,我想调查他们拥有的其他一些角色。

我将团队(角色)列在一个数组中,因此我可以遍历每个团队。

//pop a role to work with for this loop
const therole = teams.pop();

//find role for this loop
const Role = message.guild.roles.cache.find(role => role.name == therole );

//filtered by those with therole for the loop, fill members array with users ids with that role
const Members = message.guild.members.cache.filter(member => member.roles.cache.find(role => role == Role)).map(member => member.user.id);

此时我有一个 arrary 成员,其中包含角色为“therole”的用户的成员 ID。这部分有效。

然后我想对存储在成员数组中的每个成员 ID 做的是查找该成员并检查他们是否有其他各种角色(例如,我有一个时区角色)。

所以我开始一个循环

for (var i=Members.length; i--;){

但我被困在如何通过成员数组中的 ID 查找成员并检查他们是否有其他角色。我得到的最接近的是;

var haseurope = message.member.roles.cache.some(r => r.name === 'Europe');

//Debug log
console.log(i + ' The member is:' + Members[i]);        
console.log(i + ' Has Europe is:' + haseurope); 

成员数组有 6 个 ID,有时我可以让 haseurope 等于 true 6 次,有时等于 false 6 次,具体取决于我如何定义 haseurope 变量。上面的示例日志(ID 匿名);

app[worker.1]: 5 The member is:684896007655557000
app[worker.1]: 5 Has Europe is:true
app[worker.1]: 4 The member is:489439004133708000
app[worker.1]: 4 Has Europe is:true
app[worker.1]: 3 The member is:110047003303981000
app[worker.1]: 3 Has Europe is:true
app[worker.1]: 2 The member is:589135008044626000
app[worker.1]: 2 Has Europe is:true
app[worker.1]: 1 The member is:218202002409912000
app[worker.1]: 1 Has Europe is:true
app[worker.1]: 0 The member is:341509003306030000
app[worker.1]: 0 Has Europe is:true

我认为发生的事情是,当我运行 message.member.roles.cache.some(r => r.name === 'Europe'); 时,成员部分不会因循环的每次迭代而改变。不过,我似乎无法做这样的事情;

message.Members[i].roles.cache.some(r => r.name === 'Europe');

我如何检查; “对于Members 数组中的每个ID,此用户ID 是否具有'Europe' 角色?

感谢大家的帮助!

1 个答案:

答案 0 :(得分:1)

let members = message.guild.members.cache.array();
let role = message.guild.roles.cache.find(r => r.name === 'Europe');
for(let member of members) {
   let hasRole = member.roles.cache.has(role.id);
   console.log(`${member.id}: ${hasRole}`);
}

这是一个简单的示例,说明如何找出具有“欧洲”角色的用户。 members 是 GuildMembers 的数组。 role 是角色。然后我使用了一个基本的 foreach 循环。在 hasRole 中,我们检查该成员是否具有该角色。

示例输出:

283929434854129664: true 
292953664492929025: false