所以基本上我试图使用discord.js制作一种不和谐机器人的票。
这个概念:有人说+帮助然后它DM成员,谁说+ onduty并且扮演类似“帮手”的角色。
我需要弄清楚如何检测角色并将其添加到“值班”的人群中。
我想知道是否有人可以帮助我。
非常感谢。
答案 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>
,它将发送给公会中具有helper
和on 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);
}
一些文档链接可以帮助您理解这一点
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之类的东西
^我已经添加了一些额外的检查已经拥有该角色,没有它,并使其成为可以更改前缀的地方
我已经对它进行了测试,效果非常好。