javascript - 代码返回所有成员,而不是角色中的成员
问题描述
这是代码:
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);
解决方案
那是因为您的过滤器函数没有返回成员是否具有角色:它返回一个应解析为角色的 Promise,该角色被解释为true
,因此所有内容都通过了过滤器。
您实际上不需要获取角色,因为您只需要检查该 ID 是否是成员的角色之一:为此,您可以使用GuildMember.roles.cache.has()
,这将返回角色集合是否具有具有该 ID 的角色.
以下是您的操作方法:
message.guild.members.cache.filter(member => member.roles.cache.has('701142571623252018'))
.map(member => member.user.username)
推荐阅读
- java - 使用 Scala-2.13 将 Java 映射转换为 Java 代码中的 Scala 不可变映射
- python - Jquery将json数据添加到html表
- javascript - 如何正确显示框?(算法,用户界面)
- r - 向ggplots添加各种层
- sql - Excel ADO 连接并发如何处理?
- r - 由 ggplot, R 的 geom_smooth 创建的趋势线
- slack - 在 Slack 中将链接展开为视频
- typescript - Redux Thunk 调用另一个 Thunk:缺少属性“类型”
- java - Spock 测试中未返回存根对象方法值
- python-3.x - 带有来自多个位置的输入/输出文件的 Docker 文件