const { ActionRowBuilder, EmbedBuilder, ButtonBuilder, ButtonStyle } = require('discord.js'); const sqlite3 = require('sqlite3').verbose(); const db = new sqlite3.Database('myDatabase.db'); module.exports = { name: 'rolelimit', description: 'Affiche et g猫re les r么les limit茅s', emote: '馃敀', utilisation: 'rolelimit', category: 'antiraid', async execute(interaction) { const botId = interaction.client.user.id; const guildId = interaction.guild.id; let limitedRoles = await new Promise((resolve, reject) => { db.get('SELECT value FROM gestion WHERE id = ?', [`${botId}.${guildId}.rolelimits`], (err, row) => { if (err) { console.error(err.message); reject(err); } resolve(row ? JSON.parse(row.value) : []); }); }); if (!Array.isArray(limitedRoles)) { limitedRoles = []; } // Cr茅e un embed avec les r么les limit茅s const embed = new EmbedBuilder() .setTitle('R么les limit茅s') .setDescription(limitedRoles.map(role => `<@&${role.id}>: ${role.limit}`).join('\n') || 'Aucun r么le limit茅.') .setColor('#0099ff'); // Cr茅e les boutons const addButton = new ButtonBuilder() .setCustomId('rolelimit_add') .setLabel('Add') .setStyle(ButtonStyle.Success); const removeButton = new ButtonBuilder() .setCustomId('rolelimit_remove') .setLabel('Remove') .setStyle(ButtonStyle.Danger); const row = new ActionRowBuilder() .addComponents(addButton, removeButton); const sentMessage = await interaction.reply({ embeds: [embed], components: [row], fetchReply: true }); const filter = i => i.isButton() && i.customId.startsWith('rolelimit_') && i.user; const collector = sentMessage.createMessageComponentCollector({ filter: filter, time: 2 * 60 * 10000 + 30 * 10000 }); collector.on('collect', async (i) => { if (i.customId === 'rolelimit_add') { const questionMessage = await i.reply('Mentionnez un r么le ou fournissez un ID de r么le 脿 limiter.'); const filter = m => m.author && m.author.id === i.user.id; const collected = await i.channel.awaitMessages({ filter, max: 1, time: 60000 }); const role = collected.first().mentions.roles.first() || interaction.guild.roles.cache.get(collected.first().content); if (!role) { return i.followUp('R么le invalide.'); } const questionMessage2 = await i.followUp('Quelle est la limite pour ce r么le ?'); const limitCollected = await i.channel.awaitMessages({ filter, max: 1, time: 60000 }); const limit = parseInt(limitCollected.first().content); if (isNaN(limit)) { return i.followUp('Limite invalide.'); } const existingRole = limitedRoles.find(r => r.id === role.id); if (existingRole) { existingRole.limit = limit; } else { limitedRoles.push({ id: role.id, limit }); } db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [`${botId}.${guildId}.rolelimits`, JSON.stringify(limitedRoles)], (err) => { if (err) { console.error(err.message); } else { db.get('SELECT value FROM gestion WHERE id = ?', [`${botId}.${guildId}.rolelimits`], (err, row) => { if (err) { console.error(err.message); } else { limitedRoles = row ? JSON.parse(row.value) : []; const updatedEmbed = new EmbedBuilder() .setTitle('R么les limit茅s') .setDescription(limitedRoles.map(role => `<@&${role.id}>: ${role.limit}`).join('\n') || 'Aucun r么le limit茅.') .setColor('#0099ff'); sentMessage.edit({ embeds: [updatedEmbed] }); try { questionMessage.delete(); questionMessage2.delete(); collected.first().delete(); limitCollected.first().delete(); } catch (error) { } } }); } }); } else if (i.customId === 'rolelimit_remove') { const questionMessage = await i.reply('Mentionnez un r么le ou fournissez un ID de r么le 脿 supprimer.'); const filter = m => m.author && m.author.id === i.user.id; const collected = await i.channel.awaitMessages({ filter, max: 1, time: 60000 }); const roleToRemove = collected.first().mentions.roles.first() || interaction.guild.roles.cache.get(collected.first().content); if (!roleToRemove) { return i.followUp('R么le invalide.'); } limitedRoles = limitedRoles.filter(role => role.id !== roleToRemove.id); db.run('INSERT OR REPLACE INTO gestion (id, value) VALUES (?, ?)', [`${botId}.${guildId}.rolelimits`, JSON.stringify(limitedRoles)], (err) => { if (err) { console.error(err.message); } else { db.get('SELECT value FROM gestion WHERE id = ?', [`${botId}.${guildId}.rolelimits`], (err, row) => { if (err) { console.error(err.message); } else { limitedRoles = row ? JSON.parse(row.value) : []; const updatedEmbed = new EmbedBuilder() .setTitle('R么les limit茅s') .setDescription(limitedRoles.map(role => `<@&${role.id}>: ${role.limit}`).join('\n') || 'Aucun r么le limit茅.') .setColor('#0099ff'); sentMessage.edit({ embeds: [updatedEmbed] }); questionMessage.delete(); collected.first().delete(); } }); } }); } }); collector.on('end', collected => { sentMessage.edit({ components: [] }); }); }, };