From e2290b0b7fa727114451015e146d1bbd4a3f4888 Mon Sep 17 00:00:00 2001 From: VALOU3336 Date: Sun, 25 Feb 2024 21:32:25 +0100 Subject: [PATCH] correction petit probleme db --- .gitignore | 3 +- commands/events/client/interactionCreate.js | 11 -- commands/events/client/ready.js | 49 --------- commands/events/gestion/bl.js | 68 ------------ commands/events/gestion/buttongestion.js | 37 ------- commands/events/gestion/greet.js | 47 -------- commands/events/gestion/guildMemberAdd.js | 60 ----------- commands/events/gestion/memberconnecte.js | 46 -------- commands/events/gestion/messageCreate.js | 45 -------- commands/events/gestion/messageDelete.js | 15 --- commands/events/gestion/prevname.js | 20 ---- commands/loaders/loadCommands.js | 113 -------------------- commands/loaders/loadEvents.js | 26 ----- events/client/ready.js | 63 +++++++---- 14 files changed, 42 insertions(+), 561 deletions(-) delete mode 100644 commands/events/client/interactionCreate.js delete mode 100644 commands/events/client/ready.js delete mode 100644 commands/events/gestion/bl.js delete mode 100644 commands/events/gestion/buttongestion.js delete mode 100644 commands/events/gestion/greet.js delete mode 100644 commands/events/gestion/guildMemberAdd.js delete mode 100644 commands/events/gestion/memberconnecte.js delete mode 100644 commands/events/gestion/messageCreate.js delete mode 100644 commands/events/gestion/messageDelete.js delete mode 100644 commands/events/gestion/prevname.js delete mode 100644 commands/loaders/loadCommands.js delete mode 100644 commands/loaders/loadEvents.js diff --git a/.gitignore b/.gitignore index 47fe0b3..ed1b121 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ .vscode json.sqlite mybot.js -changelog.js \ No newline at end of file +changelog.js +myDatabase.db \ No newline at end of file diff --git a/commands/events/client/interactionCreate.js b/commands/events/client/interactionCreate.js deleted file mode 100644 index 907fcb8..0000000 --- a/commands/events/client/interactionCreate.js +++ /dev/null @@ -1,11 +0,0 @@ -const { Events, InteractionType } = require("discord.js"); - -module.exports = { - name: Events.InteractionCreate, - async execute(client, interaction) { - if (interaction.type === InteractionType.ApplicationCommand) { - const command = client.commands.get(interaction.commandName); - await command.execute(interaction, client); - } - }, -}; diff --git a/commands/events/client/ready.js b/commands/events/client/ready.js deleted file mode 100644 index c356fd0..0000000 --- a/commands/events/client/ready.js +++ /dev/null @@ -1,49 +0,0 @@ -const sqlite3 = require('sqlite3').verbose(); -const { Events } = require('discord.js'); -const permissions = require('../../permissions.json'); - -module.exports = { - name: Events.ClientReady, - async execute(client) { - const db = new sqlite3.Database('myDatabase.db', (err) => { - if (err) { - console.error(err.message); - } - console.log('Connected to the SQLite database.'); - }); - - let permissionsData = await new Promise((resolve, reject) => { - db.get('SELECT value FROM gestion WHERE id = ?', [client.user.id], (err, row) => { - if (err) { - console.error(err.message); - reject(err); - } - resolve(row ? JSON.parse(row.value) : {}); - }); - }); - - if (!permissionsData.permissions) { - permissionsData.permissions = {}; - } - - permissionsData.permissions = permissions; - const permissionsJson = JSON.stringify(permissionsData); - - db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [client.user.id, permissionsJson], (err) => { - if (err) { - console.error(err.message); - } else { - console.log(`Les permissions ont été chargées pour le bot ${client.user.tag}`); - } - }); - - console.log(`Le bot ${client.user.tag} est en ligne`); - process.on('uncaughtException', (error) => { - console.error('Uncaught Exception:', error); - }); - - process.on('unhandledRejection', (reason, promise) => { - console.error('Unhandled Rejection at:', promise, 'reason:', reason); - }); - }, -}; \ No newline at end of file diff --git a/commands/events/gestion/bl.js b/commands/events/gestion/bl.js deleted file mode 100644 index ffed14f..0000000 --- a/commands/events/gestion/bl.js +++ /dev/null @@ -1,68 +0,0 @@ -const { EmbedBuilder } = require('discord.js'); -const sqlite3 = require('sqlite3').verbose(); - -// Setup SQLite3 database connection -const db = new sqlite3.Database('myDatabase.db'); - -module.exports = { - name: 'greet', - description: 'Ajoute ou supprime un salon des greet', - emote: '👋', - utilisation: 'greet ', - category: 'gestion', - - async execute(message, args) { - const botId = message.client.user.id; - const guildId = message.guild.id; - - const channelId = args[0] ? args[0].replace(/<#|>/g, '') : message.channel.id; - - // Query the greetings data from the SQLite3 database - let greet = await new EmbedBuilder((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) : {}); - }); - }); - - // Access the specific guild's greetings - let guildGreetings = greet[guildId] || []; - - const index = guildGreetings.findIndex(greeting => greeting.channelId === channelId); - - if (index !== -1) { - guildGreetings.splice(index, 1); - greet[guildId] = guildGreetings; - db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(greet)], (err) => { - if (err) { - console.error(err.message); - } - }); - const embed = new EmbedBuilder() - .setDescription(`Le salon <#${channelId}> a été retiré de la liste des salutations.`) - .setColor('#0099ff'); - message.channel.send({ embeds: [embed] }); - } else if (guildGreetings.length < 5) { - guildGreetings.push({ channelId }); - - greet[guildId] = guildGreetings; - db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(greet)], (err) => { - if (err) { - console.error(err.message); - } - }); - const embed = new EmbedBuilder() - .setDescription(`Le salon <#${channelId}> a été ajouté à la liste des salutations.`) - .setColor('#0099ff'); - message.channel.send({ embeds: [embed] }); - } else { - const embed = new EmbedBuilder() - .setDescription('Il y a déjà 5 salons dans la liste des salutations. Vous ne pouvez pas en ajouter d\'autres.') - .setColor('#ff0000'); - message.channel.send({ embeds: [embed] }); - } - }, -}; \ No newline at end of file diff --git a/commands/events/gestion/buttongestion.js b/commands/events/gestion/buttongestion.js deleted file mode 100644 index a7b1a3a..0000000 --- a/commands/events/gestion/buttongestion.js +++ /dev/null @@ -1,37 +0,0 @@ -const {Events} = require("discord.js") -const db = require('quick.db'); -const PrevnameDb = new db.table("prevname"); -const sqlite3 = require('sqlite3').verbose(); -const db2 = new sqlite3.Database('myDatabase.db'); -module.exports = { - name: Events.InteractionCreate, - async execute(interaction, client) { - const botId = client.user.id; - let owners = await new Promise((resolve, reject) => { - db2.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => { - if (err) { - console.error(err.message); - reject(err); - } - resolve(row ? JSON.parse(row.value).owners || {} : {}); - }); - }); - if (!interaction.isButton()) return; - if (interaction.customId.startsWith('deletesuggestion_')) { - const userId= interaction.customId.split('_')[1]; - if (interaction.user.id !== userId && !Object.keys(owners).includes(interaction.user.id)) { - await interaction.reply({ content: "vous n'avez pas la permission de supprimer cette suggestion.", ephemeral: true }); - return; - } - await interaction.message.delete(); - } else if (interaction.customId.startsWith('deleteprevnames_')) { - const userId = interaction.customId.split('_')[1]; - if (interaction.user.id !== userId) { - await interaction.reply({ content: "vous n'avez pas la permission de suprimer cette suggestion.", ephemeral: true }); - return; - } - await PrevnameDb.delete(userId) - await interaction.reply({ content: "Vos prevname on etait correctement supprimer.", ephemeral: true }); - } - }, -}; \ No newline at end of file diff --git a/commands/events/gestion/greet.js b/commands/events/gestion/greet.js deleted file mode 100644 index 27a2890..0000000 --- a/commands/events/gestion/greet.js +++ /dev/null @@ -1,47 +0,0 @@ -const sqlite3 = require('sqlite3').verbose(); -const { Events } = require("discord.js"); -const db = new sqlite3.Database('myDatabase.db'); - -module.exports = { - name: Events.GuildMemberAdd, - async execute(member) { - const botId = member.client.user.id; - const guildId = member.guild.id; - - let greet = 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 guildGreetings = greet[guildId] || []; - - if (guildGreetings.length > 0) { - const welcomeMessage = `Bienvenue <@${member.id}> sur le serveur ${member.guild.name} !`; - const messagePromises = []; - for (const greeting of guildGreetings) { - try { - const channel = await member.guild.channels.fetch(greeting.channelId); - if (channel && channel.type === 0) { - messagePromises.push( - channel.send(welcomeMessage) - .then(message => { - setTimeout(() => message.delete(), 1000); - }) - ); - } - } catch (error) { - console.error(error); - } - } - try { - await Promise.all(messagePromises); - } catch (error) { - console.error(error); - } - } - }, -}; \ No newline at end of file diff --git a/commands/events/gestion/guildMemberAdd.js b/commands/events/gestion/guildMemberAdd.js deleted file mode 100644 index 10a18f5..0000000 --- a/commands/events/gestion/guildMemberAdd.js +++ /dev/null @@ -1,60 +0,0 @@ -const db = require('quick.db'); -const GestionDb = new db.table('gestion'); -const sqlite3 = require('sqlite3').verbose(); -const db2 = new sqlite3.Database('myDatabase.db'); -const {Events} = require("discord.js") -module.exports = { - name: Events.GuildMemberAdd, - async execute(oldMember, newMember) { - const botId = newMember.client.user.id; - const guildId = newMember.guild.id; - - let data = await new Promise((resolve, reject) => { - db2.get('SELECT value FROM gestion WHERE id = ?', [botId], (err, row) => { - if (err) { - console.error(err.message); - reject(err); - } - resolve(row ? JSON.parse(row.value) : {}); - }); - }); - - // Access the specific guild's blrank data - let blrank = data.blrank || {}; - - if (blrank[guildId] && blrank[guildId][newMember.id]) { - const addedRoles = newMember.roles.cache.filter(role => !oldMember.roles.cache.has(role.id)); - addedRoles.forEach(async role => { - try { - await newMember.roles.remove(role); - } catch (error) { - console.error(`Erreur lors de la suppression du rôle <@&${role.id}> pour le membre ${newMember.user.tag}:`, error); - } - }); - return; - } - const limitedRoles = GestionDb.get(`${botId}.${guildId}.rolelimits`) || []; - const addedRoles = newMember.roles.cache.filter(role => !oldMember.roles.cache.has(role.id)); - - addedRoles.forEach(async role => { - const limitedRole = limitedRoles.find(r => r.id === role.id); - if (limitedRole) { - const memberCount = newMember.guild.members.cache.filter(m => m.roles.cache.has(role.id)).size; - if (limitedRole.limit === 0) { - try { - await newMember.roles.remove(role); - } catch (error) { - console.error(`Erreur lors de la suppression du rôle <@&${role.id}> pour le membre ${newMember.user.tag}:`, error); - } - } - if (memberCount > limitedRole.limit) { - try { - await newMember.roles.remove(role); - } catch (error) { - console.error(`Erreur lors de la suppression du rôle <@&${role.id}> pour le membre ${newMember.user.tag}:`, error); - } - } - } - }); - }, -}; \ No newline at end of file diff --git a/commands/events/gestion/memberconnecte.js b/commands/events/gestion/memberconnecte.js deleted file mode 100644 index f5e2ff6..0000000 --- a/commands/events/gestion/memberconnecte.js +++ /dev/null @@ -1,46 +0,0 @@ -const sqlite3 = require('sqlite3').verbose(); -const { Events } = require("discord.js"); - -// Setup SQLite3 database connection -const db = new sqlite3.Database('myDatabase.db'); - -module.exports = { - name: Events.VoiceStateUpdate, - async execute(oldState, newState) { - if (!oldState.channelId && newState.channelId) { - const guildId = newState.guild.id; - const botId = newState.client.user.id; - const channelId = newState.channelId; - - // Query the bot's data from the SQLite3 database - 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) : {}); - }); - }); - - // Access the specific guild's rolevocal data - let rolevocal = data.rolevocal || {}; - let guildRoles = rolevocal[guildId] || {}; - let channelRoles = guildRoles[channelId] || []; - - if (channelRoles.length > 0) { - const member = newState.member; - for (const roleId of channelRoles) { - const role = newState.guild.roles.cache.get(roleId); - if (role) { - try { - await member.roles.add(role); - } catch (error) { - console.error(`Erreur lors de l'ajout du rôle ${roleId} à l'utilisateur ${member.id}:`, error); - } - } - } - } - } - }, -}; \ No newline at end of file diff --git a/commands/events/gestion/messageCreate.js b/commands/events/gestion/messageCreate.js deleted file mode 100644 index 91983df..0000000 --- a/commands/events/gestion/messageCreate.js +++ /dev/null @@ -1,45 +0,0 @@ -const { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } = require('discord.js'); -const sqlite3 = require('sqlite3').verbose(); -const { Events } = require("discord.js"); -const db = new sqlite3.Database('myDatabase.db'); - -module.exports = { - name: Events.MessageCreate, - async execute(message) { - const botId = message.client.user.id; - const guildId = message.guild.id; - - 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 suggestChannelId = data.suggestChannel && data.suggestChannel[guildId]; - - if (message.channel.id === suggestChannelId && !message.author.bot) { - await message.delete(); - - const embed = new EmbedBuilder() - .setAuthor({ name: message.author.tag, iconURL: message.author.displayAvatarURL() }) - .setDescription(message.content || 'Aucun contenu fourni') - .setFooter({ text: `${message.guild.name} | ${message.client.user.username}`, }) - .setColor('#409CED'); - - const row = new ActionRowBuilder() - .addComponents( - new ButtonBuilder() - .setCustomId(`deletesuggestion_${message.author.id}`) - .setLabel('Supprimer') - .setStyle(ButtonStyle.Danger) - ); - - const suggestionMessage = await message.channel.send({ embeds: [embed], components: [row] }); - suggestionMessage.react('👎') - suggestionMessage.react('👍') - } - }, -}; \ No newline at end of file diff --git a/commands/events/gestion/messageDelete.js b/commands/events/gestion/messageDelete.js deleted file mode 100644 index 1ab3888..0000000 --- a/commands/events/gestion/messageDelete.js +++ /dev/null @@ -1,15 +0,0 @@ -const {Events} = require("discord.js") - -module.exports = { - name: Events.MessageDelete, - once: false, - async execute(message, client) { - if (message.author.bot) return; - - client.snipes.set(message.channel.id, { - content: message.content, - author: message.author.id, - timestamp: Date.now(), - }); - }, -}; \ No newline at end of file diff --git a/commands/events/gestion/prevname.js b/commands/events/gestion/prevname.js deleted file mode 100644 index 1d1569c..0000000 --- a/commands/events/gestion/prevname.js +++ /dev/null @@ -1,20 +0,0 @@ -const { Events } = require("discord.js"); -const db = require('quick.db'); -const PrevnameDb = new db.table("prevname"); -module.exports = { - name: Events.GuildMemberUpdate, - async execute(oldMember, newMember) { - if (oldMember.displayName !== newMember.displayName) { - let changeData = { - oldName: oldMember.displayName, - newName: newMember.displayName, - changeDate: Math.floor(Date.now() / 1000) - }; - let nameChanges = PrevnameDb.get(`${newMember.id}.nameChanges`) || []; - - nameChanges.push(changeData); - - PrevnameDb.set(`${newMember.id}.nameChanges`, nameChanges); - } - }, -}; \ No newline at end of file diff --git a/commands/loaders/loadCommands.js b/commands/loaders/loadCommands.js deleted file mode 100644 index 02f8482..0000000 --- a/commands/loaders/loadCommands.js +++ /dev/null @@ -1,113 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const sqlite3 = require('sqlite3').verbose(); - -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); - 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; - - 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.prefix || defaultPrefix; - let serverPrefix = data.permissions && data.permissions[guildId] && data.permissions[guildId].prefix || mainPrefix; - 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 commandName = args.shift().toLowerCase(); - if (!client.commands.has(commandName)) return; - const command = client.commands.get(commandName) - || client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName)); - - if (command) { - const permissionLevel = await getPermissionLevel(message.member, client, guildId); - - 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 { - console.error(`Erreur lors de l'exécution de la commande: ${command.name}`); - message.reply('Une erreur est survenue lors de l\'exécution de cette commande.'); - } - } - }); -} diff --git a/commands/loaders/loadEvents.js b/commands/loaders/loadEvents.js deleted file mode 100644 index fc1d48a..0000000 --- a/commands/loaders/loadEvents.js +++ /dev/null @@ -1,26 +0,0 @@ -const fs = require('fs'); -const path = require('path'); - -module.exports = (client) => { - let count = 0; - const loadEvents = (dir) => { - fs.readdirSync(path.join(__dirname, dir)).forEach(file => { - const filePath = path.join(__dirname, dir, file); - if (fs.statSync(filePath).isDirectory()) { - loadEvents(path.join(dir, file)); - } else if (file.endsWith('.js')) { - delete require.cache[require.resolve(filePath)]; - const event = require(filePath); - if (typeof event.execute === 'function') { - client.on(event.name, (...args) => event.execute(...args, client)); - console.log(`Event ${event.name} loaded`); - count++; - } else { - console.error(`Event ${event.name} does not have an execute method.`); - } - } - }); - } - loadEvents('../events'); - console.log(`Event => ${count} chargé sur le bot`) -} \ No newline at end of file diff --git a/events/client/ready.js b/events/client/ready.js index c356fd0..b6dce4d 100644 --- a/events/client/ready.js +++ b/events/client/ready.js @@ -1,6 +1,6 @@ const sqlite3 = require('sqlite3').verbose(); const { Events } = require('discord.js'); -const permissions = require('../../permissions.json'); +const permissions = require('../../permissions.json'); module.exports = { name: Events.ClientReady, @@ -12,31 +12,48 @@ module.exports = { console.log('Connected to the SQLite database.'); }); - let permissionsData = await new Promise((resolve, reject) => { - db.get('SELECT value FROM gestion WHERE id = ?', [client.user.id], (err, row) => { - if (err) { - console.error(err.message); - reject(err); - } - resolve(row ? JSON.parse(row.value) : {}); + // Wrap the serialize operations in a promise to use async/await + await new Promise((resolve, reject) => { + db.serialize(() => { + // Create the table if it doesn't exist + db.run('CREATE TABLE IF NOT EXISTS gestion (id TEXT PRIMARY KEY, value TEXT)', (err) => { + if (err) { + console.error(err.message); + reject(err); + } else { + console.log('Table gestion created or already exists.'); + } + }); + + // Now that the table is guaranteed to exist, proceed with other operations + db.get('SELECT value FROM gestion WHERE id = ?', [client.user.id], (err, row) => { + if (err) { + console.error(err.message); + reject(err); + } else { + let permissionsData = row ? JSON.parse(row.value) : {}; + + if (!permissionsData.permissions) { + permissionsData.permissions = {}; + } + + permissionsData.permissions = permissions; + const permissionsJson = JSON.stringify(permissionsData); + + db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [client.user.id, permissionsJson], (err) => { + if (err) { + console.error(err.message); + reject(err); + } else { + console.log(`Les permissions ont été chargées pour le bot ${client.user.tag}`); + resolve(); // Resolve the promise once all operations are complete + } + }); + } + }); }); }); - if (!permissionsData.permissions) { - permissionsData.permissions = {}; - } - - permissionsData.permissions = permissions; - const permissionsJson = JSON.stringify(permissionsData); - - db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [client.user.id, permissionsJson], (err) => { - if (err) { - console.error(err.message); - } else { - console.log(`Les permissions ont été chargées pour le bot ${client.user.tag}`); - } - }); - console.log(`Le bot ${client.user.tag} est en ligne`); process.on('uncaughtException', (error) => { console.error('Uncaught Exception:', error);