【问题标题】:Detect if member has a role检测成员是否有角色
【发布时间】:2022-02-16 23:40:25
【问题描述】:

我正在构建一个 Discord 机器人,更具体地说,是一个角色颜色命令。我制作了这个命令的一个版本,它有效。唯一的问题是它的效率极低,它需要大约 5 分钟才能响应。这是因为在执行任何操作之前,机器人必须检查很多“if”语句和其他内容。该文件有 129K+ 行,我的整个编辑程序滞后。我现在有了一个新计划,可能效率更高:

机器人会检查成员是否有任何以“SRC -”开头的角色。 SRC 表示服务器角色颜色,只是每个角色都有的一个专门用于装饰的名称。我所有的颜色角色名称都以“SRC - name”开头,如果检测到,请删除它们。等待此过程,然后添加新颜色。我有 205 个颜色角色。我可以这样做:

 message.guild.members.cache
            .get(user.id)
            .roles.remove(roleone);
 message.guild.members.cache
            .get(user.id)
            .roles.remove(roletwo);

这行得通,但又一次效率低下。删除和添加角色时,Discord 并没有那么快。当我运行测试时,它没有给我任何错误。尽管如此,我还是认为出了点问题,因为我的角色没有改变。当我运行调试并再次检查时,角色终于更新了。更新之前只需要一段时间。我想让这个更有效率。以下是一些代码示例:

角色添加,角色移除后:

if (args[0] === "1") {
            message.guild.members.cache
            .get(user.id)
            .roles.add(roleone);
            message.channel.send(errmsg);
            console.log(logmsg);
else if (args[0] === "2") //etc

所以我的问题是,有人知道如何检测成员是否有任何以name 开头的角色,以便只能删除这些角色吗?

【问题讨论】:

    标签: javascript discord discord.js


    【解决方案1】:

    .remove() 采用 RoleResolvableRoleResolvables 的数组或 RoleResolvables 的 Collection。你可以过滤角色并传入

    const member = message.guild.members.resolve(user.id)
    const roles = member.roles.cache.filter(r => r.name.startsWith(`SRC -`))
    await member.roles.remove(roles) // remove all roles from the member that start with "SRC -"
    

    【讨论】:

    • 谢谢,它成功了。但是你也知道如何计算机器人删除的角色数量吗?我试过roles.length,但没用。
    • @PuffinKwadraat 那将是roles.size
    猜你喜欢
    • 2019-09-07
    • 2020-07-08
    • 2020-09-14
    • 2021-03-29
    • 2020-10-12
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多