diff --git a/events/gestion/Voice.js b/events/gestion/Voice.js new file mode 100644 index 0000000..3408fd6 --- /dev/null +++ b/events/gestion/Voice.js @@ -0,0 +1,53 @@ +const { Events, EmbedBuilder } = require("discord.js"); +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); +module.exports = { + name: Events.VoiceStateUpdate, + once: false, + async execute(oldState, newState, client) { + // Ignorer les changements de salon vocal pour les bots + if (oldState.member.user.bot || newState.member.user.bot) return; + + // Récupérer les données de configuration des logs pour le serveur + let data = 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) : {}); + }); + }); + + // Vérifier si le serveur a un canal de logs configuré pour les salons vocaux + if (!data[oldState.guild.id] || !data[oldState.guild.id].vocallog) return; + + const logChannelId = data[oldState.guild.id].vocallog; + const logChannel = client.channels.cache.get(logChannelId); + + if (!logChannel) return; + + const joinedVoiceChannel = newState.channel; + const leftVoiceChannel = oldState.channel; + + if (joinedVoiceChannel) { + const embed = new EmbedBuilder() + .setDescription(`${newState.member.user.tag} a rejoint le salon vocal <#${joinedVoiceChannel.id}>`) + .setTimestamp(); + + try { + await logChannel.send({ embeds: [embed] }); + } catch (error) { + } + } else if (leftVoiceChannel) { + const embed = new EmbedBuilder() + .setDescription(`${oldState.member.user.tag} a quitté le salon vocal <#${leftVoiceChannel.id}>`) + .setTimestamp(); + + try { + await logChannel.send({ embeds: [embed] }); + } catch (error) { + } + } + }, +}; \ No newline at end of file diff --git a/events/gestion/messageDelete.js b/events/gestion/messageDelete.js index 1ab3888..f5e0880 100644 --- a/events/gestion/messageDelete.js +++ b/events/gestion/messageDelete.js @@ -1,11 +1,33 @@ -const {Events} = require("discord.js") - +const {Events , EmbedBuilder} = require("discord.js") +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); module.exports = { name: Events.MessageDelete, once: false, async execute(message, client) { if (message.author.bot) return; - + let data = 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 (!data[message.guild.id]) { + data[message.guild.id] = {}; + } + const deletedEmbed = new EmbedBuilder() + .setColor('#ff0000') + .setAuthor({ name: message.author.tag, iconURL: message.author.displayAvatarURL({ dynamic: true })}) + .setDescription( `<#${message.channel.id}> -` + message.content) + .setTimestamp(message.createdAt); + const logChannelId = data[message.guild.id].messagelog; + const logChannel = client.channels.cache.get(logChannelId); + if (logChannel) { + try {await logChannel.send({ embeds: [deletedEmbed] });} catch (error) {} + } client.snipes.set(message.channel.id, { content: message.content, author: message.author.id, diff --git a/events/gestion/messageUpdate.js b/events/gestion/messageUpdate.js new file mode 100644 index 0000000..4751048 --- /dev/null +++ b/events/gestion/messageUpdate.js @@ -0,0 +1,40 @@ +const { Events, EmbedBuilder } = require("discord.js"); +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); +module.exports = { + name: Events.MessageUpdate, + once: false, + async execute(oldMessage, newMessage, client) { + if (oldMessage.author.bot || !oldMessage.content) return; + + const editedEmbed = new EmbedBuilder() + .setColor('#FFA500') + .setAuthor({ name: oldMessage.author.tag, iconURL: oldMessage.author.displayAvatarURL({ dynamic: true })}) + .setDescription(`Message édité dans <#${oldMessage.channel.id}> :\nAvant : ${oldMessage.content}\nAprès : ${newMessage.content}`) + .setTimestamp(oldMessage.editedAt); + + let data = 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 (!data[oldMessage.guild.id] || !data[oldMessage.guild.id].messagelog) return; + + const logChannelId = data[oldMessage.guild.id].messagelog; + const logChannel = client.channels.cache.get(logChannelId); + + if (logChannel) { + try { + await logChannel.send({ embeds: [editedEmbed] }); + } catch (error) { + console.error(`Erreur lors de l'envoi de l'embed dans le logChannel : ${error}`); + } + } + }, +}; \ No newline at end of file diff --git a/events/gestion/roleUpdate.js b/events/gestion/roleUpdate.js new file mode 100644 index 0000000..2e0daa1 --- /dev/null +++ b/events/gestion/roleUpdate.js @@ -0,0 +1,61 @@ +const { Events, EmbedBuilder } = require("discord.js"); +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); +module.exports = { + name: Events.GuildMemberUpdate, + once: false, + async execute(oldMember, newMember, client) { + if (oldMember.user.bot || newMember.user.bot) return; + + let data = 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 (!data[newMember.guild.id] || !data[newMember.guild.id].rolelog) return; + + const logChannelId = data[newMember.guild.id].rolelog; + const logChannel = client.channels.cache.get(logChannelId); + + if (!logChannel) return; + + const oldRoles = oldMember.roles.cache; + const newRoles = newMember.roles.cache; + + const addedRoles = newRoles.filter(role => !oldRoles.has(role.id)); + const removedRoles = oldRoles.filter(role => !newRoles.has(role.id)); + + + // Si des rôles ont été ajoutés + if (addedRoles.size > 0) { + const embed = new EmbedBuilder() + .setColor('#00FF00') + .setAuthor({ name: newMember.user.username, iconURL: newMember.user.displayAvatarURL({ dynamic: true })}) + .setDescription(`${newMember.user.username} a gagné les rôles suivants : ${addedRoles.map(role => `<@&${role.id}>`).join(', ')}`) + .setTimestamp(); + + try { + await logChannel.send({ embeds: [embed] }); + } catch (error) { + } + } + + if (removedRoles.size > 0) { + const embed = new EmbedBuilder() + .setColor('#FF0000') + .setAuthor({ name: newMember.user.username, iconURL: newMember.user.displayAvatarURL({ dynamic: true })}) + .setDescription(`${newMember.user.tag} a perdu les rôles suivants : ${removedRoles.map(role => `<@&${role.id}>`).join(', ')}`) + .setTimestamp(); + + try { + await logChannel.send({ embeds: [embed] }); + } catch (error) { + } + } + }, +}; \ No newline at end of file