Discord.js 获取所有具有特定角色的成员

Posted

技术标签:

【中文标题】Discord.js 获取所有具有特定角色的成员【英文标题】:Discord.js Get all members that have a specific role 【发布时间】:2021-11-17 02:35:47 【问题描述】:

我正在尝试获取具有特定角色的所有成员。每当我运行命令时,我只会得到我自己和机器人(如果机器人具有角色),但我在服务器中有 4 个其他人具有相同的角色,但他们都没有出现。如果我获取所有成员,它们会显示得很好。

有人知道为什么会这样吗?

代码:

client.on('message', message => 
    if (message.content === prefix + 'add') 
        let list = client.guilds.cache.get("889906947711701022");
        let role1 = list.roles.cache.get('890636907904639027').members.map(m => m.user.id);
        console.log(role1);
    
);

控制台日志:

[ '227896530835603458' ]

【问题讨论】:

【参考方案1】:

尝试获取所有成员,您当前的输出只是缓存的成员。

client.on('message', async message => 
    if (message.content === prefix + 'add') 
        let list = client.guilds.cache.get("889906947711701022");

        try 
           await list.members.fetch();

           let role1 = list.roles.cache.get('890636907904639027').members.map(m => m.user.id);
           console.log(role1);
         catch (err) 
           console.error(err);
        
    
);

您需要启用 GuildMember 的 Intent。

【讨论】:

【参考方案2】:

你可以试试这个:

let list = message.guild.members.cache.filter(m => m.roles.cache.get('890636907904639027'));
// console.log(list);

list 应该拥有所有具有该角色的公会成员。

【讨论】:

显示“Collection(1) [Map] ”并且“1”是我。没有任何意义:(

以上是关于Discord.js 获取所有具有特定角色的成员的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js 如何列出具有特定角色的所有成员的显示名称

如何在“就绪”时找到所有具有特定角色的成员?不和谐.js

如何检查具有特定角色的成员是不是存在于 discord.js 的特定语音通道中

discord.js - 从所有成员中删除特定角色

如何在 Discord.Js 中列出所有具有角色的成员

如何向所有具有角色的成员发送消息(discord.js)