From a9c8732f1fe2a5b41b4abcfb6e85c5651ac2b2bb Mon Sep 17 00:00:00 2001 From: VALOU3336 Date: Mon, 22 Apr 2024 23:37:34 +0200 Subject: [PATCH] =?UTF-8?q?truc=20de=20soutien=20pas=20finie=20+=20bug?= =?UTF-8?q?=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- commands/gestion/soutien.js | 277 ++++++++++++++++++++++++++++++++-- events/auto/presenceUpdate.js | 4 +- events/client/ready.js | 8 +- 3 files changed, 275 insertions(+), 14 deletions(-) diff --git a/commands/gestion/soutien.js b/commands/gestion/soutien.js index f716d5c..d893751 100644 --- a/commands/gestion/soutien.js +++ b/commands/gestion/soutien.js @@ -1,3 +1,4 @@ +const { EmbedBuilder , StringSelectMenuBuilder, StringSelectMenuOptionBuilder, ActionRowBuilder} = require('discord.js'); const sqlite3 = require('sqlite3').verbose(); const db = new sqlite3.Database('myDatabase.db'); @@ -10,16 +11,274 @@ module.exports = { category: 'gestion', async execute(message, args) { - const guildID = message.member.guild.id; - const roleID = args[0].replace('<@&', '').replace('>', ''); - const messageSoutien = args.slice(1).join(' '); + const guildID = message.guild.id; - db.run(`INSERT OR REPLACE INTO soutiens (guildID, roleID, message) VALUES (?, ?, ?)`, [guildID, roleID, messageSoutien], function(err) { - if (err) { - console.error(err.message); - return; - } - message.channel.send(`Le soutien a été mis à jour avec succès !`); + let soutienData = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM soutiens WHERE guildID = ?`, [guildID], (err, row) => { + if (err) { + console.log(err.message); + reject(err); + } else { + resolve(row ? row : {}); + } + }); }); + const role = message.guild.roles.cache.get(soutienData.roleID); + const roleValue = role ? `<@&${role.id}>` : "Rôle non trouvé"; + const messagesSoutien = Array.isArray(soutienData.messageSoutien) ? soutienData.messageSoutien.join(', ') : soutienData.messageSoutien; + + const embed = new EmbedBuilder() + .setTitle('Soutien mis à jour') + .addFields( + { name: '✅ Status', value: soutienData.status === "on" ? "✅" : "❌", inline: true }, + { name: '📍 Rôle', value: roleValue, inline: true }, + { name: '📝 Message', value: messagesSoutien || 'Non défini', inline: true }, + { name: '🔧 Paramètre', value: soutienData.parametre === 'inclus' || !soutienData.parametre ?'Inclus dans la status': "Ne contien que le status", inline: true } + ) + .setColor('#0099ff'); + const select1 = new StringSelectMenuBuilder() + .setCustomId('soutieninteraction') + .addOptions( + new StringSelectMenuOptionBuilder() + .setLabel("Activer / Désactiver") + .setValue('onoroff'), + new StringSelectMenuOptionBuilder() + .setLabel("Modifié le role") + .setValue('role'), + new StringSelectMenuOptionBuilder() + .setLabel("Ajouté un status") + .setValue('addstatus'), + new StringSelectMenuOptionBuilder() + .setLabel("Supprimé un status") + .setValue('delstatus'), + new StringSelectMenuOptionBuilder() + .setLabel("Inclure le message dans le status") + .setValue('inclusstatus'), + new StringSelectMenuOptionBuilder() + .setLabel("Il n'y a que le message dans le status") + .setValue('fixstatus'), +); +const row = new ActionRowBuilder().addComponents(select1); + + const sendmessage = await message.reply({ embeds: [embed], components: [row] }); + const filter = i => i.customId === 'soutieninteraction' && i.user.id === message.author.id; + const collector = sendmessage.createMessageComponentCollector({ filter: filter, time: 120000 }); + collector.on('collect', async i => { + let currentSoutienData = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM soutiens WHERE guildID = ?`, [guildID], (err, row) => { + if (err) { + console.error(err.message); + reject(err); + } else { + resolve(row ? row : {}); + } + }); + }); + + if (i.values[0] === 'onoroff') { + let newStatus = currentSoutienData.status === "on" ? "off" : "on"; + + await new Promise((resolve, reject) => { + db.run(`INSERT OR REPLACE INTO soutiens (status, guildID) VALUES (?, ?)`, [newStatus, guildID], function(err) { + if (err) { + console.log(err.message); + reject(err); + } else { + resolve(); + } + }); + }); + let soutienData = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM soutiens WHERE guildID = ?`, [guildID], (err, row) => { + if (err) { + console.log(err.message); + reject(err); + } else { + resolve(row ? row : {}); + } + }); + }); + const role = message.guild.roles.cache.get(soutienData.roleID); + const roleValue = role ? role : "Rôle non trouvé"; + const messagesSoutien = Array.isArray(soutienData.messageSoutien) ? soutienData.messageSoutien.join(', ') : soutienData.messageSoutien; + + const updatedEmbed = new EmbedBuilder() + .setTitle('Soutien mis à jour') + .addFields( + { name: '✅ Status', value: newStatus === "on" ? "✅" : "❌", inline: true }, + { name: '📍 Rôle', value: roleValue, inline: true }, + { name: '📝 Message', value: messagesSoutien || 'Non défini', inline: true }, + { name: '🔧 Paramètre', value: currentSoutienData.parametre === 'inclus' || !currentSoutienData.parametre ?'Inclus dans la status': "Ne contien que le status", inline: true } + ) + .setColor('#0099ff'); + await i.update({ embeds: [updatedEmbed], components: [row] }); + } else if (i.values[0] === 'role') { + console.log("dddd") + await message.reply('Veuillez fournir une mention de rôle ou un ID pour la mise à jour.'); + + const filter = m => m.author.id === message.author.id; + const collector2 = message.channel.createMessageCollector({ filter: filter, max: 1, time: 60000 }); + + collector2.on('collect', async collected => { + const roleMention = collected.mentions.roles.first(); + const roleID = roleMention ? roleMention.id : collected.content; + + const role = message.guild.roles.cache.get(roleID); + if (!role) { + await i.followUp('L\'ID du rôle fourni n\'est pas valide. Veuillez réessayer.'); + } else { + db.run(`INSERT OR REPLACE INTO soutiens (roleID, guildID) VALUES (?, ?)`, [roleID, guildID], async function(err) { + if (err) { + console.log(err.message); + } else { + + let soutienData = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM soutiens WHERE guildID = ?`, [guildID], (err, row) => { + if (err) { + console.log(err.message); + reject(err); + } else { + resolve(row ? row : {}); + } + }); + }); + const role = message.guild.roles.cache.get(soutienData.roleID); + const roleValue = role ? role : "Rôle non trouvé"; + const messagesSoutien = Array.isArray(soutienData.messageSoutien) ? soutienData.messageSoutien.join(', ') : soutienData.messageSoutien; + + const updatedEmbed = new EmbedBuilder() + .setTitle('Soutien mis à jour') + .addFields( + { name: '✅ Status', value: soutienData.status === "on" ? "✅" : "❌", inline: true }, + { name: '📍 Rôle', value: roleValue, inline: true }, + { name: '📝 Message', value: messagesSoutien || 'Non défini', inline: true }, + { name: '🔧 Paramètre', value: soutienData.parametre === 'inclus' || !soutienData.parametre ?'Inclus dans la status': "Ne contien que le status", inline: true } + ) + .setColor('#0099ff'); + await i.update({ embeds: [updatedEmbed], components: [row] }); + } + }); + } + }); + + collector2.on('end', collected => { + if (collected.size === 0) { + message.reply('Vous n\'avez pas fourni de mention de rôle ou d\'ID.'); + } + }); + + } else if (i.values[0] === 'addstatus') { + await message.reply('Veuillez fournir le nouveau statut à ajouter.'); + + const filter = m => m.author.id === message.author.id; + const collector = message.channel.createMessageCollector({ filter: filter, max: 1, time: 60000 }); + + collector.on('collect', async collected => { + const newStatus = collected.content; + + let currentSoutienData = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM soutiens WHERE guildID = ?`, [guildID], (err, row) => { + if (err) { + console.error(err.message); + reject(err); + } else { + resolve(row ? row : {}); + } + }); + }); + + let messagesSoutien = Array.isArray(currentSoutienData.message) ? currentSoutienData.message : []; + messagesSoutien.push(newStatus); + + await new Promise((resolve, reject) => { + db.run(`INSERT OR REPLACE INTO soutiens (message, guildID) VALUES (?, ?)`, [JSON.stringify(messagesSoutien), guildID], function(err) { + if (err) { + console.log(err.message); + reject(err); + } else { + resolve(); + } + }); + }); + }); + + collector.on('end', collected => { + if (collected.size === 0) { + message.reply('Vous n\'avez pas fourni de nouveau statut.'); + } + }); + } + else if (i.values[0] === 'delstatus') { + } else if (i.values[0] === 'inclusstatus') { + await updateStatusType(guildID, 'inclus'); + let soutienData = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM soutiens WHERE guildID = ?`, [guildID], (err, row) => { + if (err) { + console.log(err.message); + reject(err); + } else { + resolve(row ? row : {}); + } + }); + }); + const role = message.guild.roles.cache.get(soutienData.roleID); + const roleValue = role ? role : "Rôle non trouvé"; + const messagesSoutien = Array.isArray(soutienData.messageSoutien) ? soutienData.messageSoutien.join(', ') : soutienData.messageSoutien; + + const updatedEmbed = new EmbedBuilder() + .setTitle('Soutien mis à jour') + .addFields( + { name: '✅ Status', value: soutienData.status === "on" ? "✅" : "❌", inline: true }, + { name: '📍 Rôle', value: roleValue, inline: true }, + { name: '📝 Message', value: messagesSoutien || 'Non défini', inline: true }, + { name: '🔧 Paramètre', value: soutienData.parametre === 'inclus' || !soutienData.parametre ?'Inclus dans la status': "Ne contien que le status", inline: true } + ) + .setColor('#0099ff'); + await i.update({ embeds: [updatedEmbed], components: [row] }); + } else if (i.values[0] === 'fixstatus') { + await updateStatusType(guildID, 'fix'); + let soutienData = await new Promise((resolve, reject) => { + db.get(`SELECT * FROM soutiens WHERE guildID = ?`, [guildID], (err, row) => { + if (err) { + console.log(err.message); + reject(err); + } else { + resolve(row ? row : {}); + } + }); + }); + const role = message.guild.roles.cache.get(soutienData.roleID); + const roleValue = role ? role : "Rôle non trouvé"; + const messagesSoutien = Array.isArray(soutienData.messageSoutien) ? soutienData.messageSoutien.join(', ') : soutienData.messageSoutien; + + const updatedEmbed = new EmbedBuilder() + .setTitle('Soutien mis à jour') + .addFields( + { name: '✅ Status', value: soutienData.status === "on" ? "✅" : "❌", inline: true }, + { name: '📍 Rôle', value: roleValue, inline: true }, + { name: '📝 Message', value: messagesSoutien || 'Non défini', inline: true }, + { name: '🔧 Paramètre', value: soutienData.parametre === 'inclus' || !soutienData.parametre ?'Inclus dans la status': "Ne contien que le status", inline: true } + ) + .setColor('#0099ff'); + await i.update({ embeds: [updatedEmbed], components: [row] }); + } + }); + + collector.on('end', collected => { + }); + }, }; +async function updateStatusType(guildID, statusType) { + return new Promise((resolve, reject) => { + db.run(`INSERT OR REPLACE INTO soutiens (guildID, parametre) VALUES (?, ?)`, [guildID, statusType], function(err) { + if (err) { + console.error(err.message); + reject(err); + } else { + resolve(); + } + }); + }); + } + \ No newline at end of file diff --git a/events/auto/presenceUpdate.js b/events/auto/presenceUpdate.js index 4400991..a075372 100644 --- a/events/auto/presenceUpdate.js +++ b/events/auto/presenceUpdate.js @@ -4,7 +4,6 @@ const db = new sqlite3.Database('myDatabase.db'); module.exports = { name: Events.PresenceUpdate, - async execute(oldPresence, newPresence) { db.get(`SELECT * FROM soutiens WHERE guildID = ?`, [newPresence.guild.id], (err, row) => { if (err) { @@ -12,6 +11,8 @@ module.exports = { return; } if (row) { + const status = row.status; + if (status === 'on'){ const roleSoutien = row.roleID; const messageSoutien = row.message; @@ -27,6 +28,7 @@ module.exports = { } } } + } }); } }; \ No newline at end of file diff --git a/events/client/ready.js b/events/client/ready.js index 633c751..7066044 100644 --- a/events/client/ready.js +++ b/events/client/ready.js @@ -36,13 +36,13 @@ module.exports = { } else { } }); - db.run('CREATE TABLE IF NOT EXISTS soutiens (guildID TEXT PRIMARY KEY, message TEXT, roleID TEXT)', (err) => { + db.run('CREATE TABLE IF NOT EXISTS soutiens (guildID TEXT PRIMARY KEY, message TEXT, roleID TEXT, status TEXT, parametre TEXT)', (err) => { if (err) { - console.error(err.message); - reject(err); + console.error(err.message); + reject(err); } else { } - }); + }); backupdb.run(`CREATE TABLE IF NOT EXISTS backups ( id INTEGER PRIMARY KEY AUTOINCREMENT,