Роль определенных команд из идентификатора, выбранного из базы данных - PullRequest
0 голосов
/ 03 апреля 2019

Итак, в основном, я дошел до того, чтобы выбрать, какие команды следует использовать для какой-либо роли, я создал некоторый код, но моя проблема в том, что по какой-либо причине, если у пользователя есть какое-либо из требований для любого изКоманды, они могут использовать все команды.У меня были проблемы с этим больше недели.Он должен быть основан на идентификаторах ролей, поскольку пользователи должны установить разрешенную роль в базе данных, используя идентификатор роли.

Это для моего бота Discord, база данных - Firebase, и я запускаю Discord.JS / Node.JS на VSC.Я попытался отформатировать его так, чтобы фильтр ролей был первым, но это стало очень грязным.Я не верю, что проблема связана с ролью из базы данных, так как я зарегистрировал идентификатор, запрошенный в консоли, и он возвращает правильную строку.Кроме того, когда пользователь не имеет ни одной из разрешенных ролей, он не может использовать команды.

let msg_array = msg.content.split(" ");
    let command = msg_array[0];
    let args = msg_array.slice(1);
    let prefix = "t!"
    let inputtedCMD = msg.content.slice(prefix.length).split(" ")
    let cmd = bot.commands.get(inputtedCMD[0])

    let allowedR = null

    await firebaseDB.collection('roles').doc(msg.guild.id).get('role_id').then((r) => {
        if (!r.exists){
            msg.channel.send("You havn't chosen an allowed admin role.")
        } else {
            allowedR = `${r.data().role_id}`;
        }
    })

    let genRole = null

    await firebaseDB.collection('generalRoles').doc(msg.guild.id).get('generalRole_id').then((h) => {
        if (!h.exists){
            msg.channel.send("You havn't chosen an allowed general role.")
        } else {
            genRole = `${h.data().generalRole_id}`;
        }
    })

    let guildOwner = null

    await firebaseDB.collection('guilds').doc(msg.guild.id).get('generalRole_id').then((q) => {
        if (!q.exists){
            msg.channel.send("Cannot access guild owner data.")
        } else {
            guildOwner = `${q.data().guildOwnerID}`;
        }
    })

    let generalRole = msg.guild.roles.get(genRole)
    let adminRole = msg.guild.roles.get(allowedR)


    if (!command.startsWith(prefix)) return;


    if (inputtedCMD === "databaseReset") {
        if (guildOwner === msg.author.id || msg.author.id === "198590136684904448") {
            cmd.run(bot, msg, args, firebaseDB).then(() => {
                console.log("[COMMAND] User w/ permission ran '" + inputtedCMD + "'")
                return;
            })
        } else {
            const notAllowed = new Discord.RichEmbed()
                .setAuthor("Hey, " + msg.author.tag, bot.user.displayAvatarURL)
                .setDescription("**__No access__** \n *You need the required role to be able to use that command.*")
                .setColor("#00A6ff")
                .setTimestamp()
                .setFooter("Ticket Bot | TBE")
            msg.channel.send(notAllowed)
            return;
        }
    }

    if (inputtedCMD === "set") {
        if (msg.member.roles.has(adminRole.id) || guildOwner === msg.author.id || msg.author.id === "198590136684904448") {
            cmd.run(bot, msg, args, firebaseDB).then(() => {
                console.log("[COMMAND] User w/ permission ran '" + inputtedCMD + "'")
                return;
            });
        } else {
            const notAllowed = new Discord.RichEmbed()
                .setAuthor("Hey, " + msg.author.tag, bot.user.displayAvatarURL)
                .setDescription("**__No access__** \n *You need the required role to be able to use that command.*")
                .setColor("#00A6ff")
                .setTimestamp()
                .setFooter("Ticket Bot | TBE")
            msg.channel.send(notAllowed)
            return;
        }
    } 

    if (inputtedCMD === "config","help","invite","patchNotes","ticket") {
        if (msg.member.roles.has(adminRole.id) || msg.member.roles.has(generalRole.id) || guildOwner === msg.author.id || msg.author.id === "198590136684904448") {
            cmd.run(bot, msg, args, firebaseDB).then(() => {
                console.log("[COMMAND] User w/ permission ran '" + inputtedCMD + "'")
                return;
            }) 
        } else {
            const notAllowed = new Discord.RichEmbed()
                .setAuthor("Hey, " + msg.author.tag, bot.user.displayAvatarURL)
                .setDescription("**__No access__** \n *You need the required role to be able to use that command.*")
                .setColor("#00A6ff")
                .setTimestamp()
                .setFooter("Ticket Bot | TBE")
            msg.channel.send(notAllowed)
            return;
        }  
    }

Я ожидаю, что только владелец сервера и создатель бота смогут использовать databaseReset (идентификатор создателя бота - это включенный идентификатор [это я между прочим])

Только роль администраторасервера и владельца сервера и создателя бота должно быть разрешено использовать команду "set".

И всем, кто имеет общие права использования ботов, должно быть разрешено использовать "config", "help", "инвайт "," patchNotes "и" тикет ".

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019
 let prefix = "t!"
    if (!msg.content.startsWith(prefix)) return;
    let args = msg.content.slice(prefix.length).split(" ");
    let inputtedCMD = args.shift();
    let cmd = bot.commands.get(inputtedCMD);

    let allowedR = null

    await firebaseDB.collection('roles').doc(msg.guild.id).get('role_id').then((r) => {
        if (!r.exists){
            msg.channel.send("You havn't chosen an allowed admin role.")
        } else {
            allowedR = `${r.data().role_id}`;
        }
    })

    let genRole = null

    await firebaseDB.collection('generalRoles').doc(msg.guild.id).get('generalRole_id').then((h) => {
        if (!h.exists){
            msg.channel.send("You havn't chosen an allowed general role.")
        } else {
            genRole = `${h.data().generalRole_id}`;
        }
    })

    let guildOwner = null

    await firebaseDB.collection('guilds').doc(msg.guild.id).get('generalRole_id').then((q) => {
        if (!q.exists){
            msg.channel.send("Cannot access guild owner data.")
        } else {
            guildOwner = `${q.data().guildOwnerID}`;
        }
    })

    let generalRole = msg.guild.roles.get(genRole)
    let adminRole = msg.guild.roles.get(allowedR)

    if(['databaseReset'].includes(inputtedCMD)) {
        if (guildOwner === msg.author.id || msg.author.id === "198590136684904448") {
            cmd.run(bot, msg, args, firebaseDB).then(() => {
                console.log("[COMMAND] User w/ permission ran '" + inputtedCMD + "'")
                return;
            })
        } else {
            const notAllowed = new Discord.RichEmbed()
                .setAuthor("Hey, " + msg.author.tag, bot.user.displayAvatarURL)
                .setDescription("**__No access__** \n *You need the required role to be able to use that command.*")
                .setColor("#00A6ff")
                .setTimestamp()
                .setFooter("Ticket Bot | TBE")
            msg.channel.send(notAllowed)
            return;
        }
    }

    if(['set'].includes(inputtedCMD)) {
        if (msg.member.roles.has(adminRole.id) || guildOwner === msg.author.id || msg.author.id === "198590136684904448") {
            cmd.run(bot, msg, args, firebaseDB).then(() => {
                console.log("[COMMAND] User w/ permission ran '" + inputtedCMD + "'")
                return;
            });
        } else {
            const notAllowed = new Discord.RichEmbed()
                .setAuthor("Hey, " + msg.author.tag, bot.user.displayAvatarURL)
                .setDescription("**__No access__** \n *You need the required role to be able to use that command.*")
                .setColor("#00A6ff")
                .setTimestamp()
                .setFooter("Ticket Bot | TBE")
            msg.channel.send(notAllowed)
            return;
        }
    } 

    if(['config', 'help', 'invite', 'patchNotes', 'ticket'].includes(inputtedCMD)) {
        if (msg.member.roles.has(adminRole.id) || msg.member.roles.has(generalRole.id) || guildOwner === msg.author.id || msg.author.id === "198590136684904448") {
            cmd.run(bot, msg, args, firebaseDB).then(() => {
                console.log("[COMMAND] User w/ permission ran '" + inputtedCMD + "'")
                return;
            }) 
        } else {
            const notAllowed = new Discord.RichEmbed()
                .setAuthor("Hey, " + msg.author.tag, bot.user.displayAvatarURL)
                .setDescription("**__No access__** \n *You need the required role to be able to use that command.*")
                .setColor("#00A6ff")
                .setTimestamp()
                .setFooter("Ticket Bot | TBE")
            msg.channel.send(notAllowed)
            return;
        }  
    }

Так что, по сути, это код, который работал для меня. То, что мне нужно было сделать, это реализовать то, что написал @PLASMA chicken, а затем перестроить антикомандный отказ.

0 голосов
/ 03 апреля 2019

Ваша проблема:

inputtedCMD === "config","help","invite","patchNotes","ticket"

Поскольку строки всегда верны, это даст:

false, true, true, true, true

, равное true, поэтому всегда true

Поэтому используйте

 if(['config', 'help', 'invite', 'patchNotes', 'ticket'].includes(inputtedCMD)) {

вместо

Другая вещь, которую нужно заменить:

let msg_array = msg.content.split(" ");
let command = msg_array[0];
let args = msg_array.slice(1);
let prefix = "t!"
let inputtedCMD = msg.content.slice(prefix.length).split(" ")
let cmd = bot.commands.get(inputtedCMD[0])

на:

let args = msg.content.slice(prefix.length).split(" ");
let prefix = "t!"
let inputtedCMD = args.shift();
let cmd = bot.commands.get(inputtedCMD);

Перед тем, как сделатьпотребовалось:

if (inputtedCMD[0] === "databaseReset") {

Таким образом, проверки всегда шли к остальному. То, что я написал, исправило это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...