【问题标题】:?members command for my discord bot - discord.js我的不和谐机器人的成员命令 - discord.js
【发布时间】:2020-05-10 05:29:27
【问题描述】:

所以我一直在尝试创建一个 ?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 或输入第一个单词时则不会。我已经尝试了几个小时来弄清楚如何做到这一点,我想我应该寻求帮助。

提前致谢!

【问题讨论】:

    标签: discord.js


    【解决方案1】:

    Ping 在通过时会被翻译成代码,official guide 中有很多关于如何解析它们的信息,在将其解析为角色 id 后,您可以使用 members.roles.get(),因为那样是它们的索引。

    至于查找部分名称,您将不得不在您的查找中运行一个函数并使用String.includes

    return member.roles.find(role => role.name.includes(roleName));
    

    当然,这也适用于查找全名,因此它可以替换您现有的行。

    但是,这可能会导致多个角色。但是,对于按整个角色名称进行搜索也是如此,因为对重复的命名角色没有限制。为此,您可能需要反转您的设计并首先通过 message.guild.roles 搜索任何匹配的角色,然后搜索具有找到的角色的成员。

    【讨论】:

    • 当我用此代码替换该行时,即使我输入全名,该命令也不显示成员。
    • @Golden 你使用了你的变量而不是我放的演示字符串?我可能应该在我的示例中这样做,我将进行编辑。
    猜你喜欢
    • 1970-01-01
    • 2021-09-27
    • 2018-11-10
    • 2018-07-21
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 2021-10-21
    相关资源
    最近更新 更多