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

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,但我上面概述的方法更简单。