代码返回所有成员,而不是角色中的成员

时间:2020-06-10 16:08:17

标签: javascript node.js discord.js

这是代码:

let getMembers = message.guild.members.cache.filter(member => {
    return message.guild.roles.fetch('701142571623252018');
}).map(member => {
    return member.user.username;
});

它返回服务器中的所有成员,但不返回应该扮演的特定角色的成员。

这是我的完整代码:

    const targetRole = message.guild.roles.cache.get('701142571623252018');
    if (!targetRole) return console.log('No role found')
    const members = message.guild.members.cache.filter((member) => !member.roles.cache.some((role) => role.id === targetRole.id)).map(m => m.user.username)

    const players = new Discord.MessageEmbed()
      .setColor('#6B238E')
      .setTitle("Players:")
      .setDescription(members);

    message.channel.send(players);
    //console.log(members);

2 个答案:

答案 0 :(得分:3)

这是因为您的筛选器函数没有返回该成员是否具有该角色:它返回的是应分解为角色的Promise,它被解释为true,因此所有内容都通过了筛选器。

您实际上不需要获取角色,因为您只需要检查该ID是否是该成员的角色之一:为此,您可以使用GuildMember.roles.cache.has(),它将返回是否角色集合具有该ID的角色。

这是您的操作方式:

message.guild.members.cache.filter(member => member.roles.cache.has('701142571623252018'))
  .map(member => member.user.username)

答案 1 :(得分:0)

您可以使用filter和方法collection.some来检查成员是否具有角色。

bot.on('message', (message) => {
    const targetRole = message.guild.roles.cache.get('ROLE ID');
    if (!targetRole) return console.log('No role found')
    const members = message.guild.members.cache.filter((member) => member.roles.cache.some((role) => role.id === targetRole.id)).map(m => m.user.username)
});

V2

const Discord = require('discord.js')
const bot = new Discord.Client();

bot.on('message', (message) => {
    const targetRole = message.guild.roles.cache.get('648157497051447317');
    if (!targetRole) return console.log('No role found')
    const members = message.guild.members.cache.filter((member) => member.roles.cache.some((role) => role.id === targetRole.id)).map(m => m.user.username)
    console.log(members)
});

bot.login('TOKEN HERE')