【问题标题】:Discord.js V12 how can I show all members with a certain role?Discord.js V12 如何显示具有特定角色的所有成员?
【发布时间】: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 放入数组中,否则循环继续。不过这可能行不通,只是我想到的。

标签: javascript discord.js roles


【解决方案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)。 (昵称可能未定义。如果是,我们将使用成员的标签。)
猜你喜欢
  • 1970-01-01
  • 2021-05-02
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
  • 2021-06-20
  • 2022-01-13
  • 2018-07-31
相关资源
最近更新 更多