discord.js - 角色是否允许

时间:2018-05-01 15:29:38

标签: role discord.js

所以基本上我试图使用discord.js制作一种不和谐机器人的票。

这个概念:有人说+帮助然后它DM成员,谁说+ onduty并且扮演类似“帮手”的角色。

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

我想知道是否有人可以帮助我。

非常感谢。

1 个答案:

答案 0 :(得分:0)

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

// 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之类的东西 ^我已经添加了一些额外的检查已经拥有该角色,没有它,并使其成为可以更改前缀的地方
我已经对它进行了测试,效果非常好。