【问题标题】:discord.js - Has role give permissiondiscord.js - 有角色授予权限
【发布时间】:2018-10-11 15:43:59
【问题描述】:

所以基本上我正在尝试使用 discord.js 制作一种不和谐机器人。

概念:有人说+help,然后给一个说+onduty的成员发消息,他的角色类似于“帮助者”。

我需要弄清楚如何检测角色并将其添加到“值班”的集合中。

我想知道是否有人可以帮助我解决这个问题。

非常感谢。

【问题讨论】:

    标签: role discord.js


    【解决方案1】:

    我在机器人中执行此类操作的方式(来自我的example bot's kick 命令的片段):

    // This command should be limited to staff. In this example we just hardcode the role names.
    // Please read up on Array.some() to understand this bit: 
    // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some
    if(!message.member.roles.some(r=>["STAFF","Helper"].includes(r.name))) {
        return message.reply("Sorry, you don't have permissions to use this!");
    }
    

    一些关于此的文档:

    https://discord.js.org/#/docs/main/stable/class/Message?scrollTo=member https://discord.js.org/#/docs/main/stable/class/GuildMember?scrollTo=roles

    message.member.roles 包含成员角色的集合

    我们可以使用.some()来遍历它们,看看用户是否有角色
    .some():https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/some

    所以要遍历所有公会成员,看看他们是否有helper,然后,如果他们也有on duty

    // assuming the Message is in a variable called message
    
    var gm=Array.from(message.guild.members);
    for(var member in gm) {
        if(gm[member].roles.some(r=>["Helper"].includes(r.name))) {
            if(gm[member].roles.some(r=>["on duty"].includes(r.name))) {
                gm[member].send(`Help command ran:\nUser: ${message.author.tag}\nContent: ${message.content.replace("+help ","")}`);
            }
        }
    }
    

    如果用户运行命令+help <what they need help with>,它将发送给公会中具有helperon duty 角色的人:

    (以我的 Discord 标签为例)


    运行了什么:+help I need some help with something

    "帮助命令运行:
    用户:Donovan_DMC#1337
    内容:我需要一些帮助” (不带引号)

    至于这个

    我需要弄清楚如何检测角色并将其添加到“值班”的集合中。

    我假设您的意思是,当角色为 helper 的人运行命令 +onduty 时,他们将获得角色 on duty

    var roleid=message.guild.roles.find("name","on duty").id;
    if(message.member.roles.some(r=>["Helper"].includes(r.name))) {
        message.member.addRole(roleid);
    }
    


    一些文档链接,希望能帮助您理解这一点
    messagehttps://discord.js.org/#/docs/main/stable/class/Message
    message.guildhttps://discord.js.org/#/docs/main/stable/class/Message?scrollTo=guild
    message.guild.roleshttps://discord.js.org/#/docs/main/stable/class/Guild?scrollTo=roles

    对于删除角色,它几乎完全相同

    var roleid=message.guild.roles.find("name","on duty").id;
    if(message.member.roles.some(r=>["Helper"].includes(r.name))) {
        message.member.removeRole(roleid);
    }
    



    总之,一个基本的机器人你可以有类似this的东西。
    ^ 我已经添加了一些额外的检查,以检查是否已经拥有该角色,并使其前缀可以更改

    我已经测试过了,效果很好。

    【讨论】:

    • 忘记在 pastebin 帖子中声明客户端,更新了 pastebin 帖子。
    • 非常感谢,这真的很有帮助。
    • 我看到一个问题你把作者或类似的东西而不是作者。稍后我会在 iPad 上进行测试。非常感谢您的帮助;如果我发表了这篇文章,我会相信你。 ?(注意:别担心我不会完全复制脚本,我会编辑部分内容哈哈)
    • 我看到了(我没有正确阅读)。它说我在参数列表之后的某处缺少一个括号。我会加你不和谐,因为这可能更容易说话。我的名字是 ProfBlox#9546。我会成为你的朋友。
    • 我已经跟踪了这个错误,我手工构建了它,忘记关闭一些东西,正如你所说,autor 而不是author,我现在已经对其进行了全面测试并且它有效正如所说。 (更新的 pastebin 链接;新的粘贴)
    猜你喜欢
    • 2019-05-16
    • 2021-04-10
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 2017-02-03
    相关资源
    最近更新 更多