【问题标题】:discord.js check if a particualr user ID has a particular role IDdiscord.js 检查特定用户 ID 是否具有特定角色 ID
【发布时间】:2023-03-03 23:18:01
【问题描述】:

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

我有一个数组中的团队(角色),所以我可以循环遍历每个团队。

//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);

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

然后我想要对存储在 Members 数组中的每个成员 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); 

Members arrary 有 6 个 ID,有时我可以让 haseurope 等于 true 6 次,有时是 false 6 次,具体取决于我如何定义 haseurope 变量。上面的示例日志(IDs anonomoised);

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' 角色?

感谢大家的帮助!

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案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
    

    【讨论】:

    • 看起来这段代码获取了所有服务器成员,并检查了他们所有的“欧洲”角色。有没有办法将其限制为仅查找我已经保存在名为“成员”的数组中的用户 ID?当我运行您的示例时,它似乎输出了我们服务器上所有 30 多个成员的成员 ID。
    猜你喜欢
    • 2021-10-25
    • 2019-10-29
    • 2010-12-22
    • 2019-06-16
    • 2020-12-25
    • 2021-10-10
    • 1970-01-01
    • 2021-12-21
    相关资源
    最近更新 更多