discord.js - 有角色授予权限
discord.js - Has role give permission
所以基本上我正在尝试使用 discord.js 制作一种票证类型的 discord 机器人。
概念:有人说 +help 然后它会私信一个成员,该成员说 +onduty 并且扮演类似 "Helper" 的角色。
我需要弄清楚如何检测角色并将其添加到 "on duty" 的集合中。
我想知道是否有人可以帮助我解决这个问题。
非常感谢。
我在我的机器人中做这样的事情的方式(来自我的 example bot's 踢命令的片段):
// 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>
,它将发送给公会中角色为 helper
和 on duty
:
的人
(以我的 Discord 标签为例)
什么是 运行:+help I need some help with something
"帮助命令运行:
用户:Donovan_DMC#1337
内容:我需要一些帮助”
(不带引号)
至于这个
I need to work out how to detect the role and add them to a set who are "on duty".
我假设您的意思是,当具有角色 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);
}
一些文档链接希望能帮助您理解这一点
message
: https://discord.js.org/#/docs/main/stable/class/Message
message.guild
: https://discord.js.org/#/docs/main/stable/class/Message?scrollTo=guild
message.guild.roles
: https://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.
的东西
^ 我已经添加了一些额外的检查,以检查是否已经拥有该角色,并使其成为可以更改前缀的地方
我已经测试过了,效果非常好。
所以基本上我正在尝试使用 discord.js 制作一种票证类型的 discord 机器人。
概念:有人说 +help 然后它会私信一个成员,该成员说 +onduty 并且扮演类似 "Helper" 的角色。
我需要弄清楚如何检测角色并将其添加到 "on duty" 的集合中。
我想知道是否有人可以帮助我解决这个问题。
非常感谢。
我在我的机器人中做这样的事情的方式(来自我的 example bot's 踢命令的片段):
// 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>
,它将发送给公会中角色为 helper
和 on duty
:
的人
(以我的 Discord 标签为例)
什么是 运行:+help I need some help with something
"帮助命令运行:
用户:Donovan_DMC#1337
内容:我需要一些帮助”
(不带引号)
至于这个
I need to work out how to detect the role and add them to a set who are "on duty".
我假设您的意思是,当具有角色 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);
}
一些文档链接希望能帮助您理解这一点
message
: https://discord.js.org/#/docs/main/stable/class/Message
message.guild
: https://discord.js.org/#/docs/main/stable/class/Message?scrollTo=guild
message.guild.roles
: https://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.
的东西
^ 我已经添加了一些额外的检查,以检查是否已经拥有该角色,并使其成为可以更改前缀的地方
我已经测试过了,效果非常好。