首页 > 解决方案 > 代码返回所有成员,而不是角色中的成员

问题描述

这是代码:

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);

标签: javascriptnode.jsdiscord.js

解决方案


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

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

以下是您的操作方法:

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

推荐阅读