Discord.js V12 如何显示具有特定角色的所有成员?

Posted

技术标签:

【中文标题】Discord.js V12 如何显示具有特定角色的所有成员?【英文标题】:Discord.js V12 how can I show all members with a certain role? 【发布时间】:2020-10-20 02:29:52 【问题描述】:

我正在尝试创建一个命令,该命令将向我显示具有特定角色的所有成员。该命令应该类似于$rolelist,它会在具有TEST ROLE 角色的消息中显示所有成员的显示名称。 如果可以的话,请帮助我:D

client.on('message', async message => 
    if (message.content.startsWith(prefix + "rolelist")) 
        const testRole = message.guild.roles.cache.find(role => role.name == "TEST ROLE");
        const members = message.guild.members.filter(member => member.roles.find(testRole)).map(member => member.user.username)
        message.channel.send(`These people currently have the TEST ROLE: \n$members`)
    )

【问题讨论】:

我的做法是创建一个等于空数组的变量。接下来,使用 forEach 循环,对于服务器的每个成员,您希望 .find() 找到某个角色,如果它在成员的角色中找到该角色,您可以 .push() 将该用户的 ID 放入数组中,否则循环继续。不过这可能行不通,只是我想到的。 【参考方案1】:
client.on('message', async message => 
    if (message.content.startsWith(prefix + "rolelist")) 
        const Role = message.guild.roles.cache.find(role => role.name == "TEST ROLE");
        const Members = message.guild.members.cache.filter(member => member.roles.cache.find(role => role == Role)).map(member => member.user.tag);
        message.channel.send(`Users with $Role.name: $Members`);
    ;
);

由于您使用的是 V12,因此您忘记将 cache 添加到 message.guild.membersmessage.roles

另外,你使用的 find 函数有误。

你不能这样使用它:

member.roles.cache.find(testRole)

这是你应该如何使用它:

members.roles.cache.find(role => role == testRole)

【讨论】:

谢谢,工作。另外我怎样才能让它显示用户的昵称? 您可以使用GuildMembernickname 属性。示例:message.channel.send(member.nickname || member.user.tag)。 (昵称可能未定义。如果是,我们将使用成员的标签。)

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

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

Discord.js v12 中的 role.setPosition()

Discord.js v12 角色添加到提到的用户问题

Discord.js v12 - 如何添加角色?

如何从用户 discord.js v12 中删除所有角色?

如何检查成员是不是可以在 discord.js v12 中被踢/禁止?