Discord.js禁止命令-角色受限

时间:2019-11-22 19:12:21

标签: javascript node.js discord

我有这段代码,但是我必须添加一行,仅允许将其用于具有某些角色的人员,例如具有“主持人”角色的人 因为像这样普通会员可以禁止其他会员。

你能帮我吗?

或者它只能在ID定义的某个频道中使用


module.exports = {
    name: "ban",
    category: "moderation",
    description: "bans the member",
    usage: "<id | mention>",
    run: async (client, message, args) => {
        const logChannel = message.guild.channels.find(c => c.name === "logs") || message.channel;

        if (message.deletable) message.delete();

        // No args
        if (!args[0]) {
            return message.reply("Please provide a person to ban.")
                .then(m => m.delete(5000));
        }

        if (!message.member.hasPermission("BAN_MEMBERS")) {
            return message.reply("❌ You do not have permissions to ban members. Please contact a staff member")
                .then(m => m.delete(5000));

        }

        const toBan = message.mentions.members.first() || message.guild.members.get(args[0]);
        }

        if (!toBan.bannable) {
            return message.reply("I can't ban that person due to role hierarchy, I suppose.")
                .then(m => m.delete(5000));
        }


        await message.channel.send(promptEmbed).then(async msg => {
            // Await the reactions and the reactioncollector
            const emoji = await promptMessage(msg, message.author, 30, ["✅", "❌"]);

            if (emoji === "✅") {
                msg.delete();

                toBan.ban(args.slice(1).join(" "))
                    .catch(err => {
                        if (err) return message.channel.send(`didn't work`)
                    });

                logChannel.send(embed);
            } else if (emoji === "❌") {
                msg.delete();

                message.reply(`ban canceled.`)
                    .then(m => m.delete(10000));
            }
        });
    }
};

1 个答案:

答案 0 :(得分:0)

实际上,您的代码使用Discord权限来检测成员是否具有禁止权限。如果要通过角色进行检查,请删除实际的系统(这些行:

if (!message.member.hasPermission("BAN_MEMBERS")) {
    return message.reply("❌ You do not have permissions to ban members. Please contact a staff member")
    .then(m => m.delete(5000));
}

),然后添加它:

if (!message.member.roles.some((r) => r.name === "Moderator") {
    return message.reply("❌ You do not have permissions to ban members. Please contact a staff member")
    .then(m => m.delete(5000));
}

如果该成员没有主持人角色,这将返回一条错误消息。