diff --git a/commands/ping.js b/commands/ping.js index 1aa7e82..34dfee3 100644 --- a/commands/ping.js +++ b/commands/ping.js @@ -5,8 +5,8 @@ module.exports = { aliases: ['latence'], description: 'Avoir la latence du bot.', emote: '⏱️', - utilisation: 'ping', - category: 'utils', + utilisation: '', + permission: 0, async execute(message, args, client) { message.reply('Pong !'); diff --git a/commands/setprefix.js b/commands/setprefix.js index 4e9860e..8327a20 100644 --- a/commands/setprefix.js +++ b/commands/setprefix.js @@ -7,8 +7,8 @@ module.exports = { aliases: ['prefixset'], description: 'Changer le préfixe du bot.', emote: '⏱️', - utilisation: 'setprefix', - category: 'utils', + utilisation: '', + permission: 10, async execute(message, args, client) { if (args.length < 1) return message.reply('Veuillez entrer un préfixe.'); diff --git a/events/messageCreate.js b/events/messageCreate.js index bb81799..bd7b9ef 100644 --- a/events/messageCreate.js +++ b/events/messageCreate.js @@ -1,5 +1,6 @@ const { Events } = require("discord.js"); const getServerPrefix = require("../fonctions/getServerPrefix"); +const getPermissionLevel = require("../fonctions/getPermissionLevel"); module.exports = { name: Events.MessageCreate, @@ -7,19 +8,24 @@ module.exports = { if (message.author.bot) return; const prefix = await getServerPrefix(message.guild.id); - if (!message.content.startsWith(prefix)) return; + if (message.content.startsWith(prefix)) { + const args = message.content.slice(prefix.length).trim().split(/ +/); + const commandName = args.shift().toLowerCase(); - const args = message.content.slice(prefix.length).trim().split(/ +/); - const commandName = args.shift().toLowerCase(); + const command = client.commands.get(commandName); + if (!command) return; - const command = client.commands.get(commandName); - if (!command) return; + const permissionLevel = await getPermissionLevel(message.member, message.guild); + if (permissionLevel < command.permission) return message.reply("Vous n'avez pas la permission d'utiliser cette commande"); - try { - command.execute(message, args); - } catch (error) { - console.error(error); - message.reply("Erreur lors de l'exécution de la commande"); + try { + command.execute(message, args); + } catch (error) { + console.error(error); + message.reply("Erreur lors de l'exécution de la commande"); + } + } else if (message.content === `<@!${client.user.id}>` || message.content === `<@${client.user.id}>`) { + message.reply(`Mon préfixe sur ce serveur est \`${prefix}\``); } } }; \ No newline at end of file diff --git a/events/ready.js b/events/ready.js index b7332ec..874f431 100644 --- a/events/ready.js +++ b/events/ready.js @@ -1,8 +1,10 @@ const { Events, ActivityType } = require("discord.js"); +const addBaseInDB = require("../fonctions/addBaseInDB"); module.exports = { name: Events.ClientReady, async execute(client) { + addBaseInDB(client); console.log(`le bot ${client.user.tag} est en ligne`) } }; \ No newline at end of file diff --git a/fonctions/addBaseInDB.js b/fonctions/addBaseInDB.js new file mode 100644 index 0000000..275f7e1 --- /dev/null +++ b/fonctions/addBaseInDB.js @@ -0,0 +1,53 @@ +const sqlite3 = require('sqlite3').verbose(); +let buyer = 0; + +module.exports = function addBaseInDB(client) { + let db = new sqlite3.Database('db.db', sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (err) => { + if (err) { + console.error(err.message); + } + }); + + + client.guilds.cache.forEach(guild => { + db.run('INSERT OR IGNORE INTO prefix (serverID) VALUES (?)', [guild.id], (err) => { + if (err) { + console.error(err.message); + } + }); + }); + + + client.guilds.cache.forEach(guild => { + guild.members.cache.forEach(member => { + if (member.user.bot) return; + if (member.id === '671763971803447298') { + buyer = 1; + } else { + buyer = 0; + }; + db.run('INSERT OR IGNORE INTO users (serverID, userID, buyer) SELECT ?, ?, ? WHERE NOT EXISTS (SELECT 1 FROM users WHERE serverID = ? AND userID = ?)', [guild.id, member.id, buyer, guild.id, member.id], (err) => { + if (err) { + console.error(err.message); + } + }); + }); + }); + + + client.commands.forEach(command => { + client.guilds.cache.forEach(guild => { + db.run('INSERT OR IGNORE INTO commands (command, permission, serverID) SELECT ?, ?, ? WHERE NOT EXISTS (SELECT 1 FROM commands WHERE command = ? AND serverID = ?)', [command.name, command.permission, guild.id, command.name, guild.id], (err) => { + if (err) { + console.error(err.message); + } + }); + }); + }); + + db.close((err) => { + if (err) { + console.error(err.message); + } + }); +} \ No newline at end of file diff --git a/fonctions/getPermissionLevel.js b/fonctions/getPermissionLevel.js new file mode 100644 index 0000000..008af3a --- /dev/null +++ b/fonctions/getPermissionLevel.js @@ -0,0 +1,62 @@ +const sqlite3 = require('sqlite3').verbose(); + +module.exports = async function getPermissionLevel(member, guild) { + return new Promise((resolve, reject) => { + let db = new sqlite3.Database('db.db', sqlite3.OPEN_READWRITE, (err) => { + if (err) { + console.error(err.message); + reject(err); + } + }); + + let buyerId = []; + let ownerId = []; + let highestPermission = 0; + + db.each('SELECT userID FROM users WHERE serverID = ? AND buyer = 1', [guild.id], + (err, row) => { + if (err) { + console.error(err.message); + reject(err); + } + buyerId.push(row.userID); + }); + + db.each('SELECT userID FROM users WHERE serverID = ? AND owner = 1', [guild.id], + (err, row) => { + if (err) { + console.error(err.message); + reject(err); + } + ownerId.push(row.userID); + }); + + for (let i = 1; i <= 9; i++) { + db.each('SELECT roleID FROM permissions WHERE serverID = ? AND permission = ?', [guild.id, i], + (err, row) => { + if (err) { + console.error(err.message); + reject(err); + } + if (member.roles.cache.has(row.roleID)) { + highestPermission = Math.max(highestPermission, i); + } + }); + } + + db.close((err) => { + if (err) { + console.error(err.message); + reject(err); + } + + if (buyerId.includes(member.id)) { + resolve(11); + } else if (ownerId.includes(member.id)) { + resolve(10); + } else { + resolve(highestPermission); + } + }); + }); +} \ No newline at end of file diff --git a/fonctions/initDB.js b/fonctions/initDB.js index 474882d..b891896 100644 --- a/fonctions/initDB.js +++ b/fonctions/initDB.js @@ -6,14 +6,6 @@ module.exports = function initDB() { if (err) { console.error(err.message); } - console.log('Connected to the db.db database.'); - }); - - db.run(`PRAGMA foreign_keys = ON;`, (err) => { - if (err) { - console.error(err.message); - } - console.log('Foreign key constraint enabled'); }); @@ -24,9 +16,9 @@ module.exports = function initDB() { if (err) { console.error(err.message); } - console.log('Created prefix table'); }); + db.run(`CREATE TABLE IF NOT EXISTS users( serverID TEXT NOT NULL, userID TEXT NOT NULL, @@ -34,12 +26,37 @@ module.exports = function initDB() { bank INTEGER NOT NULL DEFAULT 0, xp INTEGER NOT NULL DEFAULT 0, levels INTEGER NOT NULL DEFAULT 0, - messages INTEGER NOT NULL DEFAULT 0 + messages INTEGER NOT NULL DEFAULT 0, + buyer BOOLEAN NOT NULL DEFAULT 0, + owner BOOLEAN NOT NULL DEFAULT 0, + whitelist BOOLEAN NOT NULL DEFAULT 0, + blacklist BOOLEAN NOT NULL DEFAULT 0 + )`, (err) => { + if (err) { + console.error(err.message); + } + }); + + + db.run(`CREATE TABLE IF NOT EXISTS commands( + command TEXT NOT NULL, + permission INTEGER NOT NULL DEFAULT 11, + serverID TEXT NOT NULL + )`, (err) => { + if (err) { + console.error(err.message); + } + }); + + + db.run(`CREATE TABLE IF NOT EXISTS permissions( + permission INTEGER NOT NULL UNIQUE, + roleID TEXT NOT NULL, + serverID TEXT NOT NULL )`, (err) => { if (err) { console.error(err.message); } - console.log('Created users table'); }); @@ -47,6 +64,5 @@ module.exports = function initDB() { if (err) { console.error(err.message); } - console.log('Close the database connection.'); }); }; \ No newline at end of file