const fs = require('fs'); const path = require('path'); const sqlite3 = require('sqlite3').verbose(); const { ChannelType } = require('discord.js'); module.exports = (client) => { const loadCommands = (dir) => { let count = 0; fs.readdirSync(path.join(__dirname, dir)).forEach(file => { const filePath = path.join(__dirname, dir, file); if (fs.statSync(filePath).isDirectory()) { count += loadCommands(path.join(dir, file)); } else if (file.endsWith('.js')) { try { delete require.cache[require.resolve(filePath)]; const command = require(filePath); command.file = filePath; client.commands.set(command.name, command); if (command.aliases) { command.aliases.forEach(alias => { client.commands.set(alias, command); }); } count++; } catch (error) { console.error(`Failed to load file: ${filePath}`); console.error(error); } } }); return count; } const db = new sqlite3.Database('myDatabase.db'); async function getPermissionLevel(member, client) { const botId = client.user.id; const guildId = member.guild.id; const buyerId = ['1003985920162287696', '671763971803447298']; let data = await new Promise((resolve, reject) => { db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => { if (err) { console.error(err.message); reject(err); } resolve(row ? JSON.parse(row.value) : {}); }); }); let owners = data.owners || {}; if (buyerId.includes(member.id)) { return 11; } if (owners[member.id]) { return 10; } let highestPermission = 0; for (let i = 1; i <= 9; i++) { const roleIds = data.permissions && data.permissions[guildId] && data.permissions[guildId].p && data.permissions[guildId].p[i]; if (roleIds) { if (roleIds.some(id => member.roles.cache.has(id))) { highestPermission = Math.max(highestPermission, i); } } } return highestPermission; } const totalCommands = loadCommands('../commands'); console.log(`Commands => ${totalCommands} commandes préfixées chargées sur le bot`); client.on('messageCreate', async message => { const botId = client.user.id; const guildId = message.guild.id; if (message.channel.type === ChannelType.DM) return let data = await new Promise((resolve, reject) => { db.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => { if (err) { console.error(err.message); reject(err); } resolve(row ? JSON.parse(row.value) : {}); }); }); const permissions = data.permissions || {}; const defaultPrefix = "+"; let mainPrefix = data.prefixes && data.prefixes.main ? data.prefixes.main : defaultPrefix; let serverPrefix = data.prefixes && data.prefixes[guildId]; const prefix = serverPrefix !== undefined ? serverPrefix : mainPrefix; if (!message.content.startsWith(prefix) || message.author.bot) return; const args = message.content.slice(prefix.length).trim().split(/ +/); const commandNameOrAlias = args.shift().toLowerCase(); let commandName = commandNameOrAlias; //if (!client.commands.has(commandName)) return; for (const cmd in data.alias) { if (data.alias[cmd][commandNameOrAlias]) { commandName = cmd; break; } } const command = client.commands.get(commandName) || client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName)); if (!command) { for (const cmd in data.alias) { if (data.alias[cmd][commandNameOrAlias]) { commandName = cmd; command = client.commands.get(commandName); break; } } } if (!command) { return; } if (command) { const permissionLevel = await getPermissionLevel(message.member, client); console.log(permissionLevel + " : " +permissions[command.name] + " : " + command.name) try { if (permissionLevel === 11) { command.execute(message, args, client); } else if (permissionLevel >= permissions[command.name]) { command.execute(message, args, client); } else { return message.reply("Vous n'avez pas accès à cette commande."); } } catch(err) { console.error(`Erreur lors de l'exécution de la commande: ${command.name} , ${err}`); message.reply('Une erreur est survenue lors de l\'exécution de cette commande.'); } } }); }