这是代码:
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);
答案 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)
});
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')