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