From 099a559169ba55d39829cc00d5b6fbf16813e40f Mon Sep 17 00:00:00 2001 From: VALOU3336 Date: Sun, 3 Mar 2024 20:52:57 +0100 Subject: [PATCH] add warn system with , warn , unwarn, and sanction command --- commands/moderation/sanction.js | 38 ++++++++++++++++++++++++++ commands/moderation/unwarn.js | 48 +++++++++++++++++++++++++++++++++ commands/moderation/warn.js | 38 ++++++++++++++++++++++++++ events/client/ready.js | 19 ++++++++++--- 4 files changed, 139 insertions(+), 4 deletions(-) create mode 100644 commands/moderation/sanction.js create mode 100644 commands/moderation/unwarn.js create mode 100644 commands/moderation/warn.js diff --git a/commands/moderation/sanction.js b/commands/moderation/sanction.js new file mode 100644 index 0000000..3dda8eb --- /dev/null +++ b/commands/moderation/sanction.js @@ -0,0 +1,38 @@ +const { EmbedBuilder } = require('discord.js'); +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); + +module.exports = { + name: 'sanction', + description: 'Afficher tous les avertissements d\'un utilisateur', + aliases: ['sanction'], + category: 'moderation', + utilisation: '+sanction @user/id', + + async execute(message, args, client) { + const user = message.mentions.users.first() || client.users.cache.get(args[0]); + if (!user) { + return message.reply('Utilisateur non trouvé.'); + } + + let warnings = await new Promise((resolve, reject) => { + db.all('SELECT warningId, reason, timestamp FROM warnings WHERE guildId = ? AND userId = ? ORDER BY warningId', [message.guild.id, user.id], (err, rows) => { + if (err) { + console.error(err.message); + reject(err); + } + resolve(rows); + }); + }); + + const embed = new EmbedBuilder() + .setTitle(`Sanctions de ${user.tag}`) + .setDescription(warnings.map(warning => `**${warning.warningId}:** ${warning.reason} (Mis le )`).join('\n') || "Cette personne n'a pas de sanction") + .setFooter({ text: 'Gestion des sanctions', iconURL: client.user.displayAvatarURL({dynamic: true})}); + try { + message.channel.send({ embeds: [embed] }); + }catch(err) { + message.reply("Une erreur est survenu dans l'embed du message") + } + }, +}; \ No newline at end of file diff --git a/commands/moderation/unwarn.js b/commands/moderation/unwarn.js new file mode 100644 index 0000000..5c21915 --- /dev/null +++ b/commands/moderation/unwarn.js @@ -0,0 +1,48 @@ +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); + +module.exports = { + name: 'unwarn', + description: 'Supprimer un avertissement d\'un utilisateur', + category: 'moderation', + utilisation: '+unwarn @user ', + + async execute(message, args, client) { + const user = message.mentions.users.first() || client.users.cache.get(args[0]); + if (!user) return message.reply('Utilisateur non trouvé.'); + if (args[1] === 'all') { + db.run('DELETE FROM warnings WHERE guildId = ? AND userId = ?', [message.guild.id, user.id], (err) => { + if (err) { + console.error(err.message); + return message.reply('Une erreur est survenue lors de la suppression des avertissements.'); + } + message.reply(`Tous les avertissements ont été supprimés pour ${user.tag}.`); + }); + + }else { + const warningId = parseInt(args[1]); + if (!warningId) return message.reply("Veuillez mettre l'id du warn."); + + // Supprimer l'avertissement de la base de données + db.run('DELETE FROM warnings WHERE guildId = ? AND userId = ? AND warningId = ?', [message.guild.id, user.id, warningId], (err) => { + if (err) { + console.error(err.message); + return message.reply('Une erreur est survenue lors de la suppression de l\'avertissement.'); + } + if (this.changes === 0) { + return message.reply('Aucun avertissement trouvé avec cet ID.'); + } + message.reply(`Avertissement ${warningId} supprimé pour ${user.tag}.`); + db.run(` + UPDATE warnings + SET warningId = warningId - 1 + WHERE guildId = ? AND userId = ? AND warningId > ? + `, [message.guild.id, user.id, warningId], (err) => { + if (err) { + console.error(err.message); + } + }); + }); + } + }, +}; \ No newline at end of file diff --git a/commands/moderation/warn.js b/commands/moderation/warn.js new file mode 100644 index 0000000..c96d92d --- /dev/null +++ b/commands/moderation/warn.js @@ -0,0 +1,38 @@ +const sqlite3 = require('sqlite3').verbose(); +const db = new sqlite3.Database('myDatabase.db'); + +module.exports = { + name: 'warn', + description: 'Ajouter un avertissement à un utilisateur', + category: 'moderation', + utilisation: '+warn @user ', + + async execute(message, args, client) { + const user = message.mentions.users.first() || client.users.cache.get(args[0]); + if (!user) return message.reply('Utilisateur non trouvé.'); + const reason = args.slice(1).join(' ') || 'pas de raison fournie'; + + // Récupérer le dernier warningId pour cette guilde et utilisateur + let lastWarningId = await new Promise((resolve, reject) => { + db.get('SELECT MAX(warningId) as lastWarningId FROM warnings WHERE guildId = ? AND userId = ?', [message.guild.id, user.id], (err, row) => { + if (err) { + console.error(err.message); + reject(err); + } + resolve(row ? row.lastWarningId : 0); + }); + }); + + // Incrémenter le warningId pour le nouvel avertissement + const newWarningId = lastWarningId + 1; + + // Insérer l'avertissement dans la base de données + db.run('INSERT INTO warnings (guildId, userId, warningId, reason, timestamp) VALUES (?, ?, ?, ?, ?)', [message.guild.id, user.id, newWarningId, reason, Date.now()], (err) => { + if (err) { + console.error(err.message); + return message.reply('Une erreur est survenue lors de l\'ajout de l\'avertissement.'); + } + message.reply(`Avertissement ajouté pour ${user.tag}: ${reason}`); + }); + }, +}; \ No newline at end of file diff --git a/events/client/ready.js b/events/client/ready.js index a4bd90f..80b08cc 100644 --- a/events/client/ready.js +++ b/events/client/ready.js @@ -15,7 +15,6 @@ module.exports = { if (err) { console.error(err.message); } - console.log('Connected to the backups database.'); }); @@ -27,7 +26,6 @@ module.exports = { console.error(err.message); reject(err); } else { - console.log('Table gestion created or already exists.'); } }); @@ -36,7 +34,6 @@ module.exports = { console.error(err.message); reject(err); } else { - console.log('Table prevname created or already exists.'); } }); backupdb.run(`CREATE TABLE IF NOT EXISTS backups ( @@ -49,9 +46,23 @@ module.exports = { console.error(err.message); reject(err); } else { - console.log('Table backups created or already exists.'); } }); + db.run(` + CREATE TABLE IF NOT EXISTS warnings ( + guildId TEXT NOT NULL, + userId TEXT NOT NULL, + warningId INTEGER NOT NULL, + reason TEXT NOT NULL, + timestamp INTEGER NOT NULL, + PRIMARY KEY (guildId, userId, warningId) + ); + `, (err) => { + if (err) { + console.error(err.message); + } else { + } + }); db.get('SELECT value FROM gestion WHERE id = ?', [client.user.id], (err, row) => {