如何创建只有谁拥有其中一个角色的命令才能使用?

时间:2018-01-20 02:18:14

标签: javascript node.js discord.js

let staffrole = ['383874699941117952', '149622819158884353', '149622998180036608'];

如何制作一个命令,只有其中一个角色的人才能使用它? 谢谢!

3 个答案:

答案 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!");
     ...

我已经对此进行了测试,虽然它检查的是角色名称而不是数字,但效果很好。如果您更新了答案以解释您的过程,这将有所帮助。更多信息=更好的答案。 :)