如何创建只有具有其中一个角色的人才能使用的命令?
How to create a command that only who have one of the roles can use?
let staffrole = ['383874699941117952', '149622819158884353', '149622998180036608'];
如何创建只有拥有其中一个角色的人才能使用的命令?
谢谢!
开始看这个...不太了解 discord space 但是有一个示例机器人和一个 hello world ping,还发现这个非常可爱 Github gist如何构建相当于命令 switch 语句的内容相当不错。在这里做很多猜测——作为对未来问题的注释,添加一些关于你正在尝试做的事情的代码将非常有帮助——一个变量设置为数组没什么可继续的...
看了@Raymond Zhang 说的,因为,是的,我就是这么做的...
这直接来自我链接的 Github 要点 ->
...
if(command === "kick") {
if(!message.member.roles.some(r=>["Administrator","Moderator"].includes(r.name)) )
return message.reply("Sorry, you don't have permissions to use this!");
...
我已经对此进行了测试并且效果很好,尽管它检查的是角色名称而不是数字。如果您更新您的答案以解释您的过程,这将有所帮助。更多信息 = 更好的答案。 :)
您可以做的是,在消息事件中,您 运行 命令,并且您可以检查成员的角色以查找 数组 .
这是它的样子:
client.on("message", msg => {
if(command === "whateverItIs") {
let staffrole = ['383874699941117952', '149622819158884353', '149622998180036608'];
for(i=0;i<staffrole.length;i++) {
if(msg.member.roles.filter((role) => role.id == staffrole[i]).size > 0) {
//run the code
return;
}
}
}
})
在消息事件中,根据确定的 command
,机器人将检查每个员工角色,如果 message author
的角色包括其中一个员工角色,则命令将 运行.
我建议这样做:
首先,在客户端的消息侦听器中设置您的命令名称:
// ... (in client message listener)
switch(command) {
case '<your command>':
runIfRoleIncluded(message);
break;
}
接下来,从发送的消息中获取角色 ID,并检查该消息的角色 ID 是否在您的 staffrole
数组中:
function runIfRoleIncluded(message) {
let rolesCollection = message.member.roles;
let staffrole = ['383874699941117952', '149622819158884353', '149622998180036608'];
// only 1 member can send a message, so get role collection's first key (id)
let messageRoleId = rolesCollection.firstKey();
// check if message's role id is in staff role array
if (staffrole.includes(messageRoleId)) {
// do stuff here
// ...
}
}
.member
对象的.roles
属性是一个Collection
,这就是为什么要使用.firstKey()
方法的原因。你也可以将 Collection
变成普通的 js Array
,但我上面概述的方法更简单。
let staffrole = ['383874699941117952', '149622819158884353', '149622998180036608'];
如何创建只有拥有其中一个角色的人才能使用的命令? 谢谢!
开始看这个...不太了解 discord space 但是有一个示例机器人和一个 hello world ping,还发现这个非常可爱 Github gist如何构建相当于命令 switch 语句的内容相当不错。在这里做很多猜测——作为对未来问题的注释,添加一些关于你正在尝试做的事情的代码将非常有帮助——一个变量设置为数组没什么可继续的...
看了@Raymond Zhang 说的,因为,是的,我就是这么做的...
这直接来自我链接的 Github 要点 ->
...
if(command === "kick") {
if(!message.member.roles.some(r=>["Administrator","Moderator"].includes(r.name)) )
return message.reply("Sorry, you don't have permissions to use this!");
...
我已经对此进行了测试并且效果很好,尽管它检查的是角色名称而不是数字。如果您更新您的答案以解释您的过程,这将有所帮助。更多信息 = 更好的答案。 :)
您可以做的是,在消息事件中,您 运行 命令,并且您可以检查成员的角色以查找 数组 .
这是它的样子:
client.on("message", msg => {
if(command === "whateverItIs") {
let staffrole = ['383874699941117952', '149622819158884353', '149622998180036608'];
for(i=0;i<staffrole.length;i++) {
if(msg.member.roles.filter((role) => role.id == staffrole[i]).size > 0) {
//run the code
return;
}
}
}
})
在消息事件中,根据确定的 command
,机器人将检查每个员工角色,如果 message author
的角色包括其中一个员工角色,则命令将 运行.
我建议这样做:
首先,在客户端的消息侦听器中设置您的命令名称:
// ... (in client message listener)
switch(command) {
case '<your command>':
runIfRoleIncluded(message);
break;
}
接下来,从发送的消息中获取角色 ID,并检查该消息的角色 ID 是否在您的 staffrole
数组中:
function runIfRoleIncluded(message) {
let rolesCollection = message.member.roles;
let staffrole = ['383874699941117952', '149622819158884353', '149622998180036608'];
// only 1 member can send a message, so get role collection's first key (id)
let messageRoleId = rolesCollection.firstKey();
// check if message's role id is in staff role array
if (staffrole.includes(messageRoleId)) {
// do stuff here
// ...
}
}
.member
对象的.roles
属性是一个Collection
,这就是为什么要使用.firstKey()
方法的原因。你也可以将 Collection
变成普通的 js Array
,但我上面概述的方法更简单。