因此,我一直在尝试创建一个?members命令,该命令列出具有角色的所有用户。
到目前为止,我已经知道了:
if (message.content.startsWith("?members")) {
let roleName = message.content.split(" ").slice(1).join(" ");
let membersWithRole = message.guild.members.filter(member => {
return member.roles.find("name", roleName);
}).map(member => {
return member.user.username;
})
const embed = new Discord.RichEmbed({
"title": `Members in ${roleName}`,
"description": membersWithRole.join("\n"),
"color": 0xFFFF
});
return message.channel.send(embed);
}
因此,如果您键入角色的确切名称,则它起作用,但在ping或键入第一个单词时,它不起作用。我一直在努力寻找解决方法,我想应该寻求帮助。
谢谢!
答案 0 :(得分:0)
Ping通过时会被翻译成代码,在official guide中有很多有关如何解析它们的信息,在将其解析为角色ID之后,您可以只使用members.roles.get()因为这就是它们的索引依据。
关于查找部分名称,为此您将不得不在查找上运行一个函数并使用String.includes。
return member.roles.find(role => role.name.includes(roleName));
这对于查找课程的全名也是有用的,因此它可以替换您现有的行。
但是,这可能会导致多个角色。但是,对于按整个角色名称进行搜索也是如此,因为对重复命名的角色没有任何限制。为此,您可能需要反转设计并首先通过message.guild.roles搜索任何匹配的角色,然后搜索具有找到的角色的成员。