let staffrole = ['383874699941117952', '149622819158884353', '149622998180036608'];
如何制作一个命令,只有其中一个角色的人才能使用它? 谢谢!
答案 0 :(得分:1)
您可以做的是,在消息事件中,您运行命令,并且可以检查数组中某个成员的角色成员。
看起来像是什么样的:
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
的角色包含其中一个staffrole,则命令将运行。< / p>
答案 1 :(得分:1)
我建议做这样的事情:
首先,在客户端的消息监听器中设置命令名:
// ... (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
// ...
}
}
.roles
对象的.member
属性为Collection
,这就是您必须使用.firstKey()
方法的原因。您也可以将Collection
转换为正常的js Array
,但我上面概述的方式更容易。
答案 2 :(得分:0)
开始看这个......不太了解不和谐的空间,但得到了一个示例机器人和一个hello world ping,也发现了这个非常好的Github gist,它很好地说明了如何构建相当于命令切换语句的内容。在这里做了很多猜测 - 作为未来问题的注释,你可以在你想要做的事情上添加一些代码非常有用 - 设置为数组的单个变量isn&继续下去......
读完@Raymond Zhang所说的话,因为,那就是我在做什么......
这直接来自我链接的Github要点 - &gt;
...
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!");
...
我已经对此进行了测试,虽然它检查的是角色名称而不是数字,但效果很好。如果您更新了答案以解释您的过程,这将有所帮助。更多信息=更好的答案。 :)