From eead6b1c4b2e396b8428421aeb07c3bca12098d8 Mon Sep 17 00:00:00 2001 From: VALOU3336 Date: Wed, 24 Apr 2024 12:01:56 +0200 Subject: [PATCH] finish soutien module and reworked help commande --- commands/gestion/soutien.js | 378 ++++++++++++++++++++++------------ commands/utils/help.js | 81 ++++---- events/auto/presenceUpdate.js | 44 ++-- 3 files changed, 326 insertions(+), 177 deletions(-) diff --git a/commands/gestion/soutien.js b/commands/gestion/soutien.js index d893751..7885365 100644 --- a/commands/gestion/soutien.js +++ b/commands/gestion/soutien.js @@ -25,14 +25,15 @@ module.exports = { }); 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 messagesArray = JSON.parse(soutienData.message); + const messagesSoutien = messagesArray.join(', '); const embed = new EmbedBuilder() - .setTitle('Soutien mis à jour') + .setTitle('Configuration Soutien') .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: '📝 Messsage Autorisé', 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'); @@ -58,9 +59,9 @@ module.exports = { .setLabel("Il n'y a que le message dans le status") .setValue('fixstatus'), ); -const row = new ActionRowBuilder().addComponents(select1); +const rowactionrow = new ActionRowBuilder().addComponents(select1); - const sendmessage = await message.reply({ embeds: [embed], components: [row] }); + const sendmessage = await message.reply({ embeds: [embed], components: [rowactionrow] }); 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 => { @@ -75,141 +76,257 @@ const row = new ActionRowBuilder().addComponents(select1); }); }); - if (i.values[0] === 'onoroff') { - let newStatus = currentSoutienData.status === "on" ? "off" : "on"; + 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) { + db.run(`INSERT OR IGNORE INTO soutiens (guildID) VALUES (?)`, [guildID], function(err) { + if (err) { + console.error(err.message); + } else { + // Mise à jour + db.run(`UPDATE soutiens SET status = ? WHERE guildID = ?`, [newStatus, guildID], function(err) { if (err) { - console.log(err.message); - reject(err); + console.error(err.message); } 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 : {}); + db.get(`SELECT * FROM soutiens WHERE guildID = ?`, [guildID], (err, row) => { + if (err) { + console.error(err.message); + } else { + let soutienData = row ? row : {}; + const role = message.guild.roles.cache.get(soutienData.roleID); + const roleValue = role ? `<@&${role.id}>` : "Rôle non trouvé"; + const messagesArray = JSON.parse(soutienData.message); + const messagesSoutien = messagesArray.join(', '); + + const updatedEmbed = new EmbedBuilder() + .setTitle('Configuration Soutien') + .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: soutienData.parametre === 'inclus' || !soutienData.parametre ?'Inclus dans la status': "Ne contien que le status", inline: true } + ) + .setColor('#0099ff'); + i.update({ embeds: [updatedEmbed], components: [rowactionrow] }).catch(console.error); + } + }); } }); - }); - 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") + } + }); + } else if (i.values[0] === 'role') { 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 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 { + // Utilisation de INSERT OR IGNORE pour éviter de supprimer les données existantes + db.run(`INSERT OR IGNORE INTO soutiens (guildID) VALUES (?)`, [guildID], function(err) { + if (err) { + console.log(err.message); + } else { + db.run(`UPDATE soutiens SET roleID = ? WHERE guildID = ?`, [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] }); - } - }); - } + }); + const role = message.guild.roles.cache.get(soutienData.roleID); + const roleValue = role ? `<@&${role.id}>` : "Rôle non trouvé"; + const messagesArray = JSON.parse(soutienData.message); + const messagesSoutien = messagesArray.join(', '); + + const updatedEmbed = new EmbedBuilder() + .setTitle('Configuration Soutien') + .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: [rowactionrow] }); + } + }); + } + }); + } }); - + collector2.on('end', collected => { - if (collected.size === 0) { - message.reply('Vous n\'avez pas fourni de mention de rôle ou d\'ID.'); - } + 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 : {}); - } - }); + 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 = currentSoutienData.message ? JSON.parse(currentSoutienData.message) : []; + // Ajouter le nouveau statut au tableau + messagesSoutien.push(newStatus); + + await new Promise((resolve, reject) => { + db.run(`INSERT OR IGNORE INTO soutiens (guildID) VALUES (?)`, [guildID], function(err) { + if (err) { + console.log(err.message); + reject(err); + } else { + // Mettre à jour la base de données avec le nouveau tableau + db.run(`UPDATE soutiens SET message = ? WHERE guildID = ?`, [JSON.stringify(messagesSoutien), 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 : {}); + } }); - - let messagesSoutien = Array.isArray(currentSoutienData.message) ? currentSoutienData.message : []; - messagesSoutien.push(newStatus); + }); + const role = message.guild.roles.cache.get(soutienData.roleID); + const roleValue = role ? `<@&${role.id}>` : "Rôle non trouvé"; + const messagesArray = JSON.parse(soutienData.message); + const messagesSoutien2 = messagesArray.join(', '); - 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(); - } - }); - }); + const updatedEmbed = new EmbedBuilder() + .setTitle('Configuration Soutien') + .addFields( + { name: '✅ Status', value: soutienData.status === "on" ? "✅" : "❌", inline: true }, + { name: '📍 Rôle', value: roleValue, inline: true }, + { name: '📝 Message', value: messagesSoutien2 || '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: [rowactionrow] }); }); - + collector.on('end', collected => { - if (collected.size === 0) { - message.reply('Vous n\'avez pas fourni de nouveau statut.'); - } + 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') { + } else if (i.values[0] === 'delstatus') { + await message.reply('Veuillez fournir le statut à supprimer.'); + + 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 statusToDelete = 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 = currentSoutienData.message ? JSON.parse(currentSoutienData.message) : []; + // Vérifier si le statut existe dans le tableau + const index = messagesSoutien.indexOf(statusToDelete); + if (index !== -1) { + // Supprimer le statut du tableau + messagesSoutien.splice(index, 1); + await new Promise((resolve, reject) => { + db.run(`INSERT OR IGNORE INTO soutiens (guildID) VALUES (?)`, [guildID], function(err) { + if (err) { + console.log(err.message); + reject(err); + } else { + db.run(`UPDATE soutiens SET message = ? WHERE guildID = ?`, [JSON.stringify(messagesSoutien), 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.id}>` : "Rôle non trouvé"; + const messagesArray = JSON.parse(soutienData.message); + const messagesSoutien2 = messagesArray.join(', '); + + const updatedEmbed = new EmbedBuilder() + .setTitle('Configuration Soutien') + .addFields( + { name: '✅ Status', value: soutienData.status === "on" ? "✅" : "❌", inline: true }, + { name: '📍 Rôle', value: roleValue, inline: true }, + { name: '📝 Message', value: messagesSoutien2 || '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: [rowactionrow] }); + } else { + await i.reply(`Le statut "${statusToDelete}" n'a pas été trouvé.`); + } + }); + + collector.on('end', collected => { + if (collected.size === 0) { + message.reply('Vous n\'avez pas fourni de statut à supprimer.'); + } + }); + } 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) => { @@ -222,11 +339,12 @@ const row = new ActionRowBuilder().addComponents(select1); }); }); 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 roleValue = role ? `<@&${role.id}>` : "Rôle non trouvé"; + const messagesArray = JSON.parse(soutienData.message); + const messagesSoutien = messagesArray.join(', '); const updatedEmbed = new EmbedBuilder() - .setTitle('Soutien mis à jour') + .setTitle('Configuration Soutien') .addFields( { name: '✅ Status', value: soutienData.status === "on" ? "✅" : "❌", inline: true }, { name: '📍 Rôle', value: roleValue, inline: true }, @@ -234,7 +352,7 @@ const row = new ActionRowBuilder().addComponents(select1); { 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] }); + await i.update({ embeds: [updatedEmbed], components: [rowactionrow] }); } else if (i.values[0] === 'fixstatus') { await updateStatusType(guildID, 'fix'); let soutienData = await new Promise((resolve, reject) => { @@ -248,11 +366,12 @@ const row = new ActionRowBuilder().addComponents(select1); }); }); 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 roleValue = role ? `<@&${role.id}>` : "Rôle non trouvé"; + const messagesArray = JSON.parse(soutienData.message); + const messagesSoutien = messagesArray.join(', '); const updatedEmbed = new EmbedBuilder() - .setTitle('Soutien mis à jour') + .setTitle('Configuration Soutien') .addFields( { name: '✅ Status', value: soutienData.status === "on" ? "✅" : "❌", inline: true }, { name: '📍 Rôle', value: roleValue, inline: true }, @@ -260,7 +379,7 @@ const row = new ActionRowBuilder().addComponents(select1); { 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] }); + await i.update({ embeds: [updatedEmbed], components: [rowactionrow] }); } }); @@ -271,12 +390,19 @@ const row = new ActionRowBuilder().addComponents(select1); }; async function updateStatusType(guildID, statusType) { return new Promise((resolve, reject) => { - db.run(`INSERT OR REPLACE INTO soutiens (guildID, parametre) VALUES (?, ?)`, [guildID, statusType], function(err) { + db.run(`INSERT OR IGNORE INTO soutiens (guildID) VALUES (?)`, [guildID], function(err) { if (err) { console.error(err.message); reject(err); } else { - resolve(); + db.run(`UPDATE soutiens SET parametre = ? WHERE guildID = ?`, [statusType, guildID], function(err) { + if (err) { + console.error(err.message); + reject(err); + } else { + resolve(); + } + }); } }); }); diff --git a/commands/utils/help.js b/commands/utils/help.js index 36d7bfd..029f463 100644 --- a/commands/utils/help.js +++ b/commands/utils/help.js @@ -186,18 +186,6 @@ module.exports = { return message.reply({ embeds: [embed_command] }); } - - const categories = { - antiraid: [], - botcontrol: [], - moderation: [], - buyer: [], - game: [], - gestion: [], - utils: [], - invitation: [], - other: [], - }; const categoryEmojis = { antiraid: '🛡️', botcontrol: '🛠️', @@ -209,39 +197,56 @@ module.exports = { invitation: '📩', other: '❓', }; + let liste = []; + let categories = { + antiraid: [], + botcontrol: [], + moderation: [], + buyer: [], + game: [], + gestion: [], + utils: [], + invitation: [], + other: [], + }; - let liste = []; - for (const command of client.commands.values()) { + for (const command of client.commands.values()) { const existingCommand = liste.find(cmd => cmd.name === command.name); if (!existingCommand) { - liste.push(command); + liste.push(command); } - } - for (const command of liste) { + } + + for (const command of liste) { if (command.category && categories[command.category]) { - categories[command.category].push({ name: command.name, description: command.description, emote: command.emote, utilisation: command.utilisation}); + categories[command.category].push(command); } else { - categories['other'].push({ name: command.name, description: command.description, emote: command.emote, utilisation: command.utilisation}); + categories['other'].push(command); } - } - let totalCommands = liste.length - let description = `Sélectionnez une catégorie parmi les options ci-dessous pour obtenir de l'aide sur les commandes correspondantes.\n Il y a ${totalCommands} commandes disponibles\n\n`; - - for (const [category, commands] of Object.entries(categories)) { - description += `**Catégorie ${category}** (${commands.length})\n`; - description += commands.length > 0 ? '> ' + commands.map(command => `\`${command.name}\``).join(', ') : '> Aucune commande dans cette catégorie'; - description += '\n\n'; - } - - const embeds = { + } + let totalCommands = liste.length; + + let commandCounts = {}; + for (const [category, commands] of Object.entries(categories)) { + commandCounts[category] = commands.length; + } + + const embeds = { home: new EmbedBuilder() - .setColor('#0099ff') - .setTitle('📚 Information') - .setDescription(description) - .setThumbnail(message.guild.iconURL()) - .setTimestamp() - .setFooter({text: `${client.user.tag} © 2024`, iconURL: client.user.displayAvatarURL({dynamic: true})}) - }; + .setColor('#0099ff') + .setTitle('📚 Information') + .setDescription(`Sélectionnez une catégorie parmi les options ci-dessous pour obtenir de l'aide sur les commandes correspondantes.Il y a ${totalCommands} commandes disponibles`) + .setThumbnail(message.guild.iconURL()) + .setTimestamp() + .setFooter({text: `By Valou336 and tuturp33`, iconURL: client.user.displayAvatarURL({dynamic: true})}) + }; + + let categoriesString = ''; + for (const [category, emoji] of Object.entries(categoryEmojis)) { + categoriesString += `${emoji} ${category.charAt(0).toUpperCase() + category.slice(1)}: ${commandCounts[category]} \n`; + } + + embeds.home.addFields({name: ' ', value: `\`\`\`${categoriesString}\`\`\``}); for (const [category, commands] of Object.entries(categories)) { let description; @@ -263,7 +268,7 @@ module.exports = { .setCustomId('help_menu') .setPlaceholder('Sélectionnez une catégorie') .addOptions([ - { label: 'Accueil', value: 'home' }, + { label: '🏠 Accueil', value: 'home' }, ...Object.keys(categories).map(category => ({ label: `${categoryEmojis[category]} ${category}`, value: category })), ]); diff --git a/events/auto/presenceUpdate.js b/events/auto/presenceUpdate.js index a075372..83c5119 100644 --- a/events/auto/presenceUpdate.js +++ b/events/auto/presenceUpdate.js @@ -13,20 +13,38 @@ module.exports = { if (row) { const status = row.status; if (status === 'on'){ - const roleSoutien = row.roleID; - const messageSoutien = row.message; + const parameter = row.parametre; + const roleSoutien = row.roleID; + const messageSoutien = row.message; + let messagesSoutien = Array.isArray(messageSoutien) ? messageSoutien : JSON.parse(messageSoutien); + const role = newPresence.guild.roles.cache.find(role => role.id === roleSoutien); + const hasRole = newPresence.member.roles.cache.has(roleSoutien); - if (newPresence.activities[0].state.includes(messageSoutien)) { - const role = newPresence.guild.roles.cache.find(role => role.id === roleSoutien); - if (role) { - newPresence.member.roles.add(role); - } - } else if (!newPresence.activities[0].state.includes(messageSoutien)) { - const role = newPresence.guild.roles.cache.find(role => role.id === roleSoutien); - if (role) { - newPresence.member.roles.remove(role); - } - } + if (parameter === 'inclus') { + const isStatusMatched = messagesSoutien.some(message => newPresence.activities[0].state.includes(message)); + if (isStatusMatched && !hasRole) { + newPresence.member.roles.add(role); + } else if (!isStatusMatched && hasRole) { + newPresence.member.roles.remove(role); + } + } else if (parameter === 'fix') { + const hasRole = newPresence.member.roles.cache.has(roleSoutien); + const isStatusExactMatch = messagesSoutien.includes(newPresence.activities[0].state); + + if (isStatusExactMatch && !hasRole) { + const role = newPresence.guild.roles.cache.find(role => role.id === roleSoutien); + //ajouter le rôle + if (role) { + newPresence.member.roles.add(role); + } + } else if (!isStatusExactMatch && hasRole) { + // Supprimer le rôle + const role = newPresence.guild.roles.cache.find(role => role.id === roleSoutien); + if (role) { + newPresence.member.roles.remove(role); + } + } + } } } });