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.members
和 message.roles
。
另外,你使用的 find 函数有误。
你不能这样使用它:
member.roles.cache.find(testRole)
这是你应该如何使用它:
members.roles.cache.find(role => role == testRole)
【讨论】:
谢谢,工作。另外我怎样才能让它显示用户的昵称? 您可以使用GuildMember
的nickname
属性。示例:message.channel.send(member.nickname || member.user.tag)
。 (昵称可能未定义。如果是,我们将使用成员的标签。)以上是关于Discord.js V12 如何显示具有特定角色的所有成员?的主要内容,如果未能解决你的问题,请参考以下文章
Discord.js 如何列出具有特定角色的所有成员的显示名称