From 55bf300bc97828cdc4cd45da295343db05f49f34 Mon Sep 17 00:00:00 2001 From: VALOU3336 Date: Mon, 26 Feb 2024 16:17:01 +0100 Subject: [PATCH] add logs set channel , event coming soon --- commands/logs/logs.js | 124 +++++++++++++++++++++++++++++++++++ commands/logs/messagelog.js | 53 +++++++++++++++ commands/logs/raidlog.js | 52 +++++++++++++++ commands/logs/rolelog.js | 52 +++++++++++++++ commands/logs/vocallog.js | 52 +++++++++++++++ commands/utils/dev.js | 2 +- commands/utils/help.js | 2 +- commands/utils/helpall.js | 8 +-- commands/utils/pic.js | 2 +- commands/utils/servericon.js | 2 +- commands/utils/serverinfo.js | 1 - 11 files changed, 340 insertions(+), 10 deletions(-) create mode 100644 commands/logs/logs.js create mode 100644 commands/logs/messagelog.js create mode 100644 commands/logs/raidlog.js create mode 100644 commands/logs/rolelog.js create mode 100644 commands/logs/vocallog.js diff --git a/commands/logs/logs.js b/commands/logs/logs.js new file mode 100644 index 0000000..e0d9836 --- /dev/null +++ b/commands/logs/logs.js @@ -0,0 +1,124 @@ +const { ActionRowBuilder, StringSelectMenuBuilder, EmbedBuilder } = require('discord.js'); +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); +module.exports = { + name: 'logs', + description: 'Affiche et configure les logs du serveur.', + category: 'logs', + emote: '📝', + utilisation: '+logs', + async execute(message, args) { + 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) : {}); + }); + }); + + const embed = new EmbedBuilder() + .setColor('#0099ff') + .setTitle('Configuration des logs') + .addFields( + { name: '📝 Logs de messages', value: data[message.guild.id]?.messagelog ? `<#${data[message.guild.id].messagelog}>` : 'Non configuré', inline: true }, + { name: '📚 Logs de rôles', value: data[message.guild.id]?.rolelog ? `<#${data[message.guild.id].rolelog}>` : 'Non configuré', inline: true }, + { 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 } + ); + + const selectMenu = new StringSelectMenuBuilder() + .setCustomId(`logsselect_${message.guild.id}`) + .setPlaceholder('Sélectionnez un type de log pour le configurer') + .addOptions([ + { label: '📝 Logs de messages', value: 'messagelog', description: 'Configurer le salon de logs de messages' }, + { label: '📚 Logs de rôles', value: 'rolelog', description: 'Configurer le salon de logs de rôles' }, + { label: '🎙️ Logs vocaux', value: 'vocallog', description: 'Configurer le salon de logs vocaux' }, + { label: '🛡️ Logs de raid', value: 'raidlog', description: 'Configurer le salon de logs de raid' }, + ]); + + + const row = new ActionRowBuilder() + .addComponents(selectMenu); + + const logmessage = await message.channel.send({ embeds: [embed], components: [row] }); + + const filter = i => i.customId.startsWith('logsselect_') && i.user.id === message.author.id; + const filter2 = m => m.author.id === message.author.id; + const collector = logmessage.createMessageComponentCollector({ filter:filter, max: 1, time: 150000 }); + + collector.on('collect', async i => { + await i.deferReply(); + const guildId = i.customId.split('_')[1]; + const logdata = i.values[0]; + const question = await i.editReply("Veuillez envoyer un salon"); + const channelCollector = message.channel.createMessageCollector({ filter: filter2, max: 1, time: 60000 }); + + + channelCollector.on('collect', async m => { + + let channelId; + 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) : {}); + }); + }); + + const channelMention = m.mentions.channels.first(); + if (channelMention) { + channelId = channelMention.id; + } else { + const idMatch = m.content.match(/(\d{17,19})/); + if (idMatch) { + channelId = idMatch[0]; + } else { + return message.reply('Veuillez fournir une mention de salon valide ou un ID.'); + } + } + + const channel = message.guild.channels.cache.get(channelId); + if (!channel) { + return message.reply('Le salon fourni n\'existe pas.'); + + } + + data[guildId] = data[guildId] || {}; + data[guildId][logdata] = channelId; + db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], (err) => { + if (err) { + return message.reply('Une erreur s\'est produite lors de la mise à jour de la base de données.'); + + } + }); + let data2 = 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) : {}); + }); + }); + await m.delete(); + await question.delete(); + + const updatedEmbed = new EmbedBuilder() + .setColor('#0099ff') + .setTitle('Configuration des logs') + .addFields( + { name: '📝 Logs de messages', value: data2[guildId]?.messagelog ? `<#${data2[guildId].messagelog}>` : 'Non configuré', inline: true }, + { name: '📚 Logs de rôles', value: data2[guildId]?.rolelog ? `<#${data2[guildId].rolelog}>` : 'Non configuré', inline: true }, + { name: '🎙️ Logs vocaux', value: data2[guildId]?.vocallog ? `<#${data2[guildId].vocallog}>` : 'Non configuré', inline: true }, + { name: '🛡️ Logs de raid', value: data2[guildId]?.raidlog ? `<#${data2[guildId].raidlog}>` : 'Non configuré', inline: true } + ); + + logmessage.edit({ embeds: [updatedEmbed], components: [row] }); + }); + }); + }, +}; \ No newline at end of file diff --git a/commands/logs/messagelog.js b/commands/logs/messagelog.js new file mode 100644 index 0000000..307b3ee --- /dev/null +++ b/commands/logs/messagelog.js @@ -0,0 +1,53 @@ +const { EmbedBuilder, ChannelType } = require('discord.js'); +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); + +module.exports = { + name: 'messagelog', + description: 'Enregistre l\'ID d\'un salon pour les logs de messages.', + category: 'logs', + emote: '📝', + utilisation: '+messagelog [#salon/id]', + async execute(message, args, client) { + let channelId; + const mentionedChannel = message.mentions.channels.first(); + + if (mentionedChannel) { + channelId = mentionedChannel.id; + } else if (args[0]) { + const channel = message.guild.channels.cache.get(args[0]); + if (channel && channel.type === ChannelType.GuildVoice ) { + channelId = args[0]; + } else { + return message.reply('Le salon spécifié est invalide ou n\'existe pas dans ce serveur.'); + } + } else { + channelId = message.channel.id; + } + 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] = {}; + } + data[message.guild.id].messagelog = channelId; + + db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], function(err) { + if (err) { + return console.error(err.message); + } + }); + + const embed = new EmbedBuilder() + .setColor('#0099ff') + .setDescription(`Le salon de log de messages a été mis à jour dans le salon <#${channelId}>`); + message.channel.send({ embeds: [embed] }); + }, +}; \ No newline at end of file diff --git a/commands/logs/raidlog.js b/commands/logs/raidlog.js new file mode 100644 index 0000000..428a85b --- /dev/null +++ b/commands/logs/raidlog.js @@ -0,0 +1,52 @@ +const { EmbedBuilder, ChannelType } = require('discord.js'); +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); +module.exports = { + name: 'raidlog', + description: 'Enregistre l\'ID d\'un salon pour les logs de raid.', + category: 'logs', + emote: '📝', + utilisation: '+raidlog [#salon/id]', + async execute(message, args) { + let channelId; + const mentionedChannel = message.mentions.channels.first(); + + if (mentionedChannel) { + channelId = mentionedChannel.id; + } else if (args[0]) { + const channel = message.guild.channels.cache.get(args[0]); + if (channel && channel.type === ChannelType.GuildText) { + channelId = args[0]; + } else { + return message.reply('Le salon spécifié est invalide ou n\'existe pas dans ce serveur.'); + } + } else { + channelId = message.channel.id; + } + 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] = {}; + } + data[message.guild.id].raidlog = channelId; + + db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], function(err) { + if (err) { + return console.error(err.message); + } + }); + + const embed = new EmbedBuilder() + .setColor('#0099ff') + .setDescription(`Le salon de log de raid a été mis à jour dans le salon <#${channelId}>`); + message.channel.send({ embeds: [embed] }); + }, +}; \ No newline at end of file diff --git a/commands/logs/rolelog.js b/commands/logs/rolelog.js new file mode 100644 index 0000000..2355bda --- /dev/null +++ b/commands/logs/rolelog.js @@ -0,0 +1,52 @@ +const { EmbedBuilder, ChannelType } = require('discord.js'); +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); +module.exports = { + name: 'rolelog', + description: 'Enregistre l\'ID d\'un salon pour les logs de rôles.', + category: 'logs', + emote: '📝', + utilisation: '+rolelog [#salon/id]', + async execute(message, args) { + let channelId; + const mentionedChannel = message.mentions.channels.first(); + + if (mentionedChannel) { + channelId = mentionedChannel.id; + } else if (args[0]) { + const channel = message.guild.channels.cache.get(args[0]); + if (channel && channel.type === ChannelType.GuildText) { + channelId = args[0]; + } else { + return message.reply('Le salon spécifié est invalide ou n\'existe pas dans ce serveur.'); + } + } else { + channelId = message.channel.id; + } + 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] = {}; + } + data[message.guild.id].rolelog = channelId; + + db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], function(err) { + if (err) { + return console.error(err.message); + } + }); + + const embed = new EmbedBuilder() + .setColor('#0099ff') + .setDescription(`Le salon de log de rôles a été mis à jour dans le salon <#${channelId}>`); + message.channel.send({ embeds: [embed] }); + }, +}; \ No newline at end of file diff --git a/commands/logs/vocallog.js b/commands/logs/vocallog.js new file mode 100644 index 0000000..2742813 --- /dev/null +++ b/commands/logs/vocallog.js @@ -0,0 +1,52 @@ +const { EmbedBuilder, ChannelType } = require('discord.js'); +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); +module.exports = { + name: 'vocallog', + description: 'Enregistre l\'ID d\'un salon pour les logs vocaux.', + category: 'logs', + emote: '📝', + utilisation: '+vocallog [#salon/id]', + async execute(message, args) { + let channelId; + const mentionedChannel = message.mentions.channels.first(); + + if (mentionedChannel) { + channelId = mentionedChannel.id; + } else if (args[0]) { + const channel = message.guild.channels.cache.get(args[0]); + if (channel && channel.type === ChannelType.GuildVoice) { + channelId = args[0]; + } else { + return message.reply('Le salon spécifié est invalide ou n\'existe pas dans ce serveur.'); + } + } else { + channelId = message.channel.id; + } + 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] = {}; + } + data[message.guild.id].vocallog = channelId; + + db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [message.client.user.id, JSON.stringify(data)], function(err) { + if (err) { + return console.error(err.message); + } + }); + + const embed = new EmbedBuilder() + .setColor('#0099ff') + .setDescription(`Le salon de log vocaux a été mis à jour dans le salon <#${channelId}>`); + message.channel.send({ embeds: [embed] }); + }, +}; \ No newline at end of file diff --git a/commands/utils/dev.js b/commands/utils/dev.js index 27ec21a..9e16f07 100644 --- a/commands/utils/dev.js +++ b/commands/utils/dev.js @@ -2,7 +2,7 @@ const { EmbedBuilder, StringSelectMenuBuilder, ActionRowBuilder } = require("di module.exports = { name: 'devs', - aliases: ['devs'], + aliases: ['dev'], description: 'Avoir les inforamtion sur les developeur.', emote: '⚙️', utilisation: 'devs', diff --git a/commands/utils/help.js b/commands/utils/help.js index 163b7bb..ac98f4b 100644 --- a/commands/utils/help.js +++ b/commands/utils/help.js @@ -4,7 +4,7 @@ const GestionDb = new db.table("gestion"); module.exports = { name: 'help', - aliases: ['h', 'aide'], + aliases: ['aide'], description: 'Affiche la liste des commandes', category: 'utils', emote: '📚', diff --git a/commands/utils/helpall.js b/commands/utils/helpall.js index 6b3a840..1dbea34 100644 --- a/commands/utils/helpall.js +++ b/commands/utils/helpall.js @@ -3,7 +3,6 @@ const sqlite3 = require('sqlite3').verbose(); module.exports = { name: 'helpall', - aliases: ['hall', 'aideall'], description: 'Liste toutes les commandes disponibles par niveau de permission', emote: '📚', utilisation: 'helpall', @@ -30,7 +29,6 @@ module.exports = { const commandsByPermission = {}; - // Parcourir les permissions et les commandes associées for (const [commandName, permissionLevel] of Object.entries(permissions)) { if (!commandsByPermission[permissionLevel]) { commandsByPermission[permissionLevel] = []; @@ -38,7 +36,7 @@ module.exports = { commandsByPermission[permissionLevel].push(commandName); } - // Créer les embeds pour chaque niveau de permission avec des commandes associées + const embeds = Object.entries(commandsByPermission).map(([permissionLevel, commands]) => { const commandDescriptions = commands.map(commandName => { const command = client.commands.get(commandName); @@ -49,7 +47,7 @@ module.exports = { }).filter(Boolean); if (commandDescriptions.length === 0) { - return null; // Skip creating an embed if there are no commands for this permission level + return null; } const embed = new EmbedBuilder() @@ -58,7 +56,7 @@ module.exports = { embed.setDescription(commandDescriptions.join('\n')); return embed; - }).filter(Boolean) // Filter out any undefined embeds + }).filter(Boolean) if (embeds.length === 0) { return message.reply("Aucune commande disponible pour ce serveur."); diff --git a/commands/utils/pic.js b/commands/utils/pic.js index a47cf44..ded78e3 100644 --- a/commands/utils/pic.js +++ b/commands/utils/pic.js @@ -1,7 +1,7 @@ const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require("discord.js") module.exports = { name: 'pic', - aliases: ['avatar', 'pfp', 'profilepic', 'profilepicture', 'pp'], + aliases: ['avatar', 'pfp'], description: 'Affiche l\'avatar d\'un utilisateur', category: 'utils', utilisation: 'pic [@user/userId]', diff --git a/commands/utils/servericon.js b/commands/utils/servericon.js index 035af82..5a51119 100644 --- a/commands/utils/servericon.js +++ b/commands/utils/servericon.js @@ -2,7 +2,7 @@ const { EmbedBuilder, ButtonStyle, ButtonBuilder, ActionRowBuilder } = require(" module.exports = { name: 'servericon', - aliases: ['serverpfp', 'serverpic', 'serverpicture', 'serverpp'], + aliases: ['serverpfp', 'serverpic'], description: 'Affiche l\'icone du serveur', emote: '🖼️', utilisation: 'servericon', diff --git a/commands/utils/serverinfo.js b/commands/utils/serverinfo.js index 79ba408..e52ccef 100644 --- a/commands/utils/serverinfo.js +++ b/commands/utils/serverinfo.js @@ -1,7 +1,6 @@ const { EmbedBuilder } = require("discord.js") module.exports = { name: 'serverinfo', - aliases: ['si'], description: 'Affiche les informations sur le serveur', emote: '📄', utilisation: 'serverinfo',