diff --git a/commands/gestion/perms.js b/commands/gestion/perms.js new file mode 100644 index 0000000..c4b08fc --- /dev/null +++ b/commands/gestion/perms.js @@ -0,0 +1,29 @@ +const { EmbedBuilder } = require('discord.js'); +const db = require('../../fonctions/database.js'); +const embedColor = require('../../fonctions/embedColor.js'); + +module.exports = { + aliases: ['perm', 'permission', 'permissions'], + description: 'Affiche les permission des rôles pour utiliser les commandes du bot.', + emote: '⏱️', + utilisation: '', + permission: 10, + + async execute(message, args, client) { + const perms = await new Promise((resolve, reject) => { + db.all(`SELECT * FROM rolePermission WHERE guildId = ?`, [message.guild.id], (err, rows) => { + if (err) reject(err); + resolve(rows); + }); + }); + + const embed = new EmbedBuilder() + .setTitle('⏱️ Permissions') + .setDescription(perms.map(perm => `**<@&${perm.roleId}>** : ${perm.permission}`).join('\n')) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + }, +}; diff --git a/commands/gestion/setRolePerm.js b/commands/gestion/setRolePerm.js new file mode 100644 index 0000000..44cb4e9 --- /dev/null +++ b/commands/gestion/setRolePerm.js @@ -0,0 +1,77 @@ +const { EmbedBuilder } = require('discord.js'); +const db = require('../../fonctions/database.js'); +const embedColor = require('../../fonctions/embedColor.js'); + +module.exports = { + aliases: ['setperm'], + description: 'Ajoute les permissions d\'un rôle pour utiliser les commandes du bot.', + emote: '⏱️', + utilisation: '<@role|None> <1|2|3|4|5>', + permission: 10, + + async execute(message, args, client) { + if (!args[0] || !args[1]) { + const embed = new EmbedBuilder() + .setTitle('⏱️ Ajout de permissions') + .setDescription(`Vous devez spécifier un rôle et un niveau de permission.\n\n**Utilisation:** \`&setRolePerm <@role|None> <1|2|3|4|5>\``) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + + let role; + if (args[0] === 'None') { + role = 'None'; + } else { + role = message.mentions.roles.first().id; + } + + if (isNaN(parseInt(args[1]))) { + const embed = new EmbedBuilder() + .setTitle('⏱️ Ajout de permissions') + .setDescription('Le deuxième argument doit être un nombre.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + + if (args[1] < 1 || args[1] > 5) { + const embed = new EmbedBuilder() + .setTitle('⏱️ Ajout de permissions') + .setDescription('Le niveau de permission doit être compris entre 1 et 5.') + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + + if (role === 'None') { + db.run(`DELETE FROM rolePermission WHERE guildId = ? AND permission = ?`, [message.guild.id, args[1]]); + + const embed = new EmbedBuilder() + .setTitle('⏱️ Ajout de permissions') + .setDescription(`Les permissions de niveau ${args[1]} ont été retirées.`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + } + + db.run(`INSERT OR REPLACE INTO rolePermission (guildId, roleId, permission) VALUES (?, ?, ?)`, [message.guild.id, role, args[1]]); + + const embed = new EmbedBuilder() + .setTitle('⏱️ Ajout de permissions') + .setDescription(`Le rôle <@&${role}> a maintenant la permission de niveau ${args[1]}.`) + .setColor(await embedColor(message.author.id, message.guild.id)) + .setTimestamp() + .setFooter({ text: `Demandé par ${message.author.tag}`, iconURL: message.author.displayAvatarURL() }); + + return message.reply({ embeds: [embed], allowedMentions: { repliedUser: false } }); + }, +}; diff --git a/events/messageCreate.js b/events/messageCreate.js index 8dc6104..dc0d8bf 100644 --- a/events/messageCreate.js +++ b/events/messageCreate.js @@ -1,6 +1,6 @@ const { Message, Events } = require("discord.js"); const db = require('../fonctions/database.js'); -//const getPermissionLevel = require("../fonctions/getPermissionLevel"); +const getPermissionLevel = require("../fonctions/getPermissionLevel.js"); module.exports = { name: Events.MessageCreate, @@ -15,7 +15,7 @@ module.exports = { const command = client.commands.get(commandName); if (!command) return; - const permissionLevel = 1 //await getPermissionLevel(message.member, message.guild); + const permissionLevel = await getPermissionLevel(message.guild.id, message.member); if ((permissionLevel < command.permission) && (!client.config.owners.includes(message.author.id))) { return message.reply("Vous n'avez pas la permission d'utiliser cette commande."); } diff --git a/fonctions/database.js b/fonctions/database.js index 93e90e0..76f9010 100644 --- a/fonctions/database.js +++ b/fonctions/database.js @@ -55,4 +55,11 @@ db.run(`CREATE TABLE IF NOT EXISTS teams ( PRIMARY KEY (guildId, id) )`); +db.run(`CREATE TABLE IF NOT EXISTS rolePermission ( + guildId TEXT, + roleId TEXT, + permission INTEGER, + PRIMARY KEY (guildId, permission) +)`); + module.exports = db; \ No newline at end of file diff --git a/fonctions/getPermissionLevel.js b/fonctions/getPermissionLevel.js new file mode 100644 index 0000000..62665df --- /dev/null +++ b/fonctions/getPermissionLevel.js @@ -0,0 +1,15 @@ +const db = require('./database.js'); + +module.exports = async function getPermissionLevel(serverId, user) { + const roles = user.roles.cache.map(role => role.id); + + const perms = await new Promise((resolve, reject) => { + db.all(`SELECT * FROM rolePermission WHERE guildId = ? AND roleId IN (${roles.map(() => '?').join(',')})`, [serverId, ...roles], (err, rows) => { + if (err) reject(err); + resolve(rows); + }); + }); + + const highestPermission = Math.max(...perms.map(perm => perm.permission)); + return highestPermission; +} \ No newline at end of file