From 44f5e84484df7281d8e79fb3a460505194ccd6ab Mon Sep 17 00:00:00 2001 From: VALOU3336 Date: Sat, 2 Mar 2024 14:49:21 +0100 Subject: [PATCH] upgrade clear , add : presetlog , changeall , best configuration of the ready.js and add anticrash module, --- commands/gestion/changeall.js | 58 +++++++++++++++++++++++++ commands/gestion/clear.js | 39 ++++++++++------- commands/logs/logs.js | 4 +- commands/logs/presetlog.js | 82 +++++++++++++++++++++++++++++++++++ commands/logs/raidping.js | 2 +- events/client/ready.js | 82 ++++++++++++++++++++--------------- loaders/loadCommands.js | 5 ++- main.js | 1 - 8 files changed, 217 insertions(+), 56 deletions(-) create mode 100644 commands/gestion/changeall.js create mode 100644 commands/logs/presetlog.js diff --git a/commands/gestion/changeall.js b/commands/gestion/changeall.js new file mode 100644 index 0000000..03c4f3b --- /dev/null +++ b/commands/gestion/changeall.js @@ -0,0 +1,58 @@ +const fs = require('fs'); +const path = require('path'); +const sqlite3 = require('sqlite3').verbose(); + +module.exports = { + name: 'changeall', + aliases: ['permchangeall'], + description: 'Change le niveau de permission de toutes les commandes ayant un niveau de permission spécifié', + emote: '🔄', + utilisation: 'changeall ', + category: 'botcontrol', + + async execute(message, args, client) { + const botId = client.user.id; + const unchangeableCommands = ['owner', 'unowner', 'buyer']; + + if (args.length < 2) { + return message.reply('Veuillez spécifier un niveau de permission actuel et un nouveau niveau de permission.'); + } + + const currentPermissionLevel = parseInt(args[0]); + const newPermissionLevel = parseInt(args[1]); + + if (isNaN(currentPermissionLevel) || isNaN(newPermissionLevel) || currentPermissionLevel < 0 || currentPermissionLevel > 9 || newPermissionLevel < 0 || newPermissionLevel > 9) { + return message.reply('Veuillez spécifier des niveaux de permission valides (entre 0 et 9).'); + } + + const db = new sqlite3.Database('myDatabase.db'); + let permissions = 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) : {}); + }); + }); + + if (!permissions.permissions) { + permissions.permissions = {}; + } + + // Parcourir toutes les commandes et mettre à jour le niveau de permission + for (const commandName in permissions.permissions) { + if (permissions.permissions[commandName] === currentPermissionLevel) { + permissions.permissions[commandName] = newPermissionLevel; + } + } + + db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [botId, JSON.stringify(permissions)], (err) => { + if (err) { + console.error(err.message); + } + }); + + message.reply(`Le niveau de permission de toutes les commandes ayant le niveau ${currentPermissionLevel} a été changé à ${newPermissionLevel}.`); + }, +}; \ No newline at end of file diff --git a/commands/gestion/clear.js b/commands/gestion/clear.js index 4526a4e..cfcf9ba 100644 --- a/commands/gestion/clear.js +++ b/commands/gestion/clear.js @@ -1,21 +1,30 @@ -const { PermissionsBitField} = require("discord.js") +const { PermissionsBitField } = require("discord.js"); + module.exports = { - name: 'clear', - aliases: ['purge', 'delete', 'suppr', 'efface', 'nettoie', 'vide', 'clean', 'effacer'], - description: 'Clear des messages', - emote: '🗑️', - utilisation: 'clear ', - category: 'gestion', - async execute(message, args, client) { - const amount = parseInt(args[0]) + 1; - if (isNaN(amount)) { - return message.reply('Veuillez entrer un nombre valide'); - } else if (amount <= 1 || amount > 100) { - return message.reply('Vous devez entrer un nombre entre 1 et 99'); + name: 'clear', + aliases: ['purge', 'delete', 'suppr', 'efface', 'nettoie', 'vide', 'clean', 'effacer'], + description: 'Clear des messages', + emote: '🗑️', + utilisation: 'clear ', + category: 'gestion', + async execute(message, args, client) { + let amount; + if (args[0]) { + amount = parseInt(args[0]); + if (isNaN(amount)) { + return message.reply('Veuillez entrer un nombre valide'); + } else if (amount <= 1 || amount > 100) { + return message.reply('Vous devez entrer un nombre entre 1 et 99'); + } + amount = amount + 2; + } else { + const messages = await message.channel.messages.fetch({ limit: 100 }); + amount = messages.size; } + console.log(amount) await message.reply('🗑️ Clear en cours...'); - await message.channel.bulkDelete(amount + 1, true).catch((err) => { + await message.channel.bulkDelete(amount).catch((err) => { message.reply('Une erreur est survenue lors du clear'); }); - }, + }, }; \ No newline at end of file diff --git a/commands/logs/logs.js b/commands/logs/logs.js index 6359dd9..5118c1c 100644 --- a/commands/logs/logs.js +++ b/commands/logs/logs.js @@ -27,7 +27,7 @@ module.exports = { { name: '🎙️ Logs vocaux', value: data[message.guild.id]?.vocallog ? `<#${data[message.guild.id].vocallog}>` : 'Non configuré', inline: true }, { name: '🛡️ Logs de raid', value: data[message.guild.id]?.raidlog ? `<#${data[message.guild.id].raidlog}>` : 'Non configuré', inline: true }, { name: '🔧 Logs de modération', value: data[message.guild.id]?.modlog ? `<#${data[message.guild.id].modlog}>` : 'Non configuré', inline: true }, - { name: '🛡️ raidping', value: data[message.guild.id]?.modlog ? `<#${data[message.guild.id].modlog}>` : 'Non configuré', inline: true }, + { name: '🛡️ raidping', value: data[message.guild.id]?.modlog ? `${data[message.guild.id].raidping}` : 'Non configuré', inline: true }, ); const selectMenu = new StringSelectMenuBuilder() @@ -120,7 +120,7 @@ module.exports = { { name: '🎙️ Logs vocaux', value: data2[message.guild.id]?.vocallog ? `<#${data2[message.guild.id].vocallog}>` : 'Non configuré', inline: true }, { name: '🛡️ Logs de raid', value: data2[message.guild.id]?.raidlog ? `<#${data2[message.guild.id].raidlog}>` : 'Non configuré', inline: true }, { name: '🔧 Logs de modération', value: data2[message.guild.id]?.modlog ? `<#${data2[message.guild.id].modlog}>` : 'Non configuré', inline: true }, - { name: '🛡️ raidping', value: data2[message.guild.id]?.modlog ? `<#${data2[message.guild.id].modlog}>` : 'Non configuré', inline: true }, + { name: '🛡️ raidping', value: data2[message.guild.id]?.modlog ? `${data2[message.guild.id].raidping}` : 'Non configuré', inline: true }, ); logmessage.edit({ embeds: [updatedEmbed], components: [row] }); diff --git a/commands/logs/presetlog.js b/commands/logs/presetlog.js new file mode 100644 index 0000000..99b326c --- /dev/null +++ b/commands/logs/presetlog.js @@ -0,0 +1,82 @@ +const { ChannelType, PermissionsBitField } = require('discord.js'); +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); + +module.exports = { + name: 'presetlog', + description: 'Crée les salons de logs et les enregistre dans la base de données.', + category: 'gestion', + emote: '📝', + utilisation: 'presetlog', + async execute(message, args) { + const sendmessage = await message.reply("\`🔄\` Les salon de log sont entrain d'etre crée...") + const guild = message.guild; + const categoryName = 'log'; + const channelNames = ['modlog', 'messagelog', 'vocallog', 'rolelog', 'raidlog']; + const channelTypes = [ChannelType.GuildText, ChannelType.GuildText, ChannelType.GuildText, ChannelType.GuildText, ChannelType.GuildText]; + + let data = await new Promise((resolve, reject) => { + db.get('SELECT value FROM gestion WHERE id = ?', [message.client.user.id], (err, row) => { + if (err) { + console.error(err.message); + reject(err); + } + resolve(row ? JSON.parse(row.value) : {}); + }); + }); + + if (!data[message.guild.id]) { + data[message.guild.id] = {}; + } + let logCategory = guild.channels.cache.find(channel => channel.type === ChannelType.GuildCategory && channel.name === categoryName); + if (!logCategory) { + try { + logCategory = await guild.channels.create({ + name: categoryName, + type: ChannelType.GuildCategory, + }); + + } catch (error) { + return message.channel.send('Une erreur est survenue lors de la création de la catégorie de logs.'); + } + } + + for (let i = 0; i < channelNames.length; i++) { + const channelName = channelNames[i]; + const channelType = channelTypes[i]; + + const existingChannel = guild.channels.cache.find(channel => channel.parentID === logCategory.id && channel.name === channelName && channel.type === channelType); + + + if (!existingChannel) { + try { + const channel = await guild.channels.create({ + name: channelName, + type: channelType, + parent: logCategory.id + }); + await channel.permissionOverwrites.set([ + { + id: guild.roles.everyone, + deny: [PermissionsBitField.Flags.ViewChannel], + }, + ]); + data[message.guild.id][channelName] = channel.id; + } catch (error) { + return message.channel.send(`Une erreur est survenue lors de la création du salon ${channelName}.`); + } + } else { + data[message.guild.id][channelName] = existingChannel.id; + } + } + + db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], function(err) { + if (err) { + console.error(err.message); + return message.channel.send('Une erreur est survenue lors de la mise à jour de la base de données.'); + } + }); + + sendmessage.edit('\`✅\`Les salons de logs ont été créés et enregistrés dans la base de données.'); + }, +}; diff --git a/commands/logs/raidping.js b/commands/logs/raidping.js index 28f962d..1ae18ae 100644 --- a/commands/logs/raidping.js +++ b/commands/logs/raidping.js @@ -34,7 +34,7 @@ module.exports = { const embed = new EmbedBuilder() .setColor('#0099ff') - .setDescription(`le message de raid est ${messageContent}`); + .setDescription(`le message de raid est:** ${messageContent}**`); message.channel.send({ embeds: [embed] }); }, }; \ No newline at end of file diff --git a/events/client/ready.js b/events/client/ready.js index d7dfbcc..4b0834f 100644 --- a/events/client/ready.js +++ b/events/client/ready.js @@ -33,55 +33,65 @@ module.exports = { } }); - db.get('SELECT value FROM gestion WHERE id = ?', [client.user.id], (err, row) => { + db.get('SELECT value FROM gestion WHERE id = ?', [client.user.id], (err, row) => { if (err) { - console.error(err.message); - reject(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); + let permissionsData = row ? JSON.parse(row.value) : {}; + if (!permissionsData.permissions || Object.keys(permissionsData.permissions).length === 0) { + 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(); + } + }); } else { - console.log(`Les permissions ont été chargées pour le bot ${client.user.tag}`); - resolve(); + console.log(`Les permissions existent déjà pour le bot ${client.user.tag}`); + resolve(); } - }); } - }); + }); }); }); client.snipes = new Map(); - - - - - - - console.log(`Le bot ${client.user.tag} est en ligne lien d'invite > https://discord.com/oauth2/authorize?client_id=${client.user.id}&scope=bot&permissions=8`); //AntiCrash - process.on('unhandledRejection', (reason, p) => { - console.log(' [antiCrash] :: Unhandled Rejection/Catch'); - console.log(reason, p); - }); - - process.on('uncaughtException', (err, origin) => { - console.log(' [antiCrash] :: Uncaught Exception/Catch'); - console.log(err, origin); - }); +process.on('unhandledRejection', (error) => { + console.log(' [antiCrash] :: Unhandled Rejection/Catch'); + console.log(error); +}); + +process.on("uncaughtException", (error, origin) => { + console.log(' [antiCrash] :: Uncaught Exception/Catch'); + console.log(error); + console.log('Information supplémentaire:', origin); +}); + +process.on('uncaughtExceptionMonitor', (error, origin) => { + console.log(' [antiCrash] :: Uncaught Exception Monitor/Catch'); + console.log(error); + console.log('Information supplémentaire:', origin); +}); + +process.on('beforeExit', (code) => { + console.log(' [antiCrash] :: Before Exit'); + console.log('Code de sortie:', code); +}); + +process.on('exit', (code) => { + console.log(' [antiCrash] :: Exit'); + console.log('Code de sortie:', code); +}); }, }; \ No newline at end of file diff --git a/loaders/loadCommands.js b/loaders/loadCommands.js index e215070..de6f426 100644 --- a/loaders/loadCommands.js +++ b/loaders/loadCommands.js @@ -70,8 +70,10 @@ module.exports = (client) => { client.on('messageCreate', async message => { const botId = client.user.id; + if (message.channel.type === ChannelType.DM){ + return + } else { 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) { @@ -131,5 +133,6 @@ module.exports = (client) => { message.reply('Une erreur est survenue lors de l\'exécution de cette commande.'); } } + } }); } diff --git a/main.js b/main.js index 2e453b3..603ce98 100644 --- a/main.js +++ b/main.js @@ -4,7 +4,6 @@ const loadCommands = require("./loaders/loadCommands"); const loadEvents = require("./loaders/loadEvents"); const client = new Client({intents: new IntentsBitField(3276799)}); const { GiveawaysManager } = require('discord-giveaways'); - client.events = new Collection(); client.commands = new Collection(); client.giveawaysManager = new GiveawaysManager(client, {