const { ActionRowBuilder, EmbedBuilder, ButtonBuilder, ButtonStyle} = require('discord.js'); const db = require('quick.db'); const GestionDb = new db.table('gestion'); 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; // R茅cup猫re les r么les limit茅s let limitedRoles = GestionDb.get(`${botId}.${guildId}.rolelimits`) || []; // 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 * 1000 + 30 * 1000 }); 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: 60000000 }); const role = collected.first().mentions.roles.first() || interaction.guild.roles.cache.get(collected.first().content); if (!role) { return i.followUp('R么le invalide.'); } await i.followUp('Quelle est la limite pour ce r么le ?'); const limitCollected = await i.channel.awaitMessages({ filter, max: 1, time: 60000000 }); 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 }); } GestionDb.set(`${botId}.${guildId}.rolelimits`, limitedRoles); await questionMessage.delete(); await collected.first().delete(); 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] }); } 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: 60000000 }); 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); GestionDb.set(`${botId}.${guildId}.rolelimits`, limitedRoles); 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'); await questionMessage.delete(); await collected.first().delete(); sentMessage.edit({ embeds: [updatedEmbed] }); } }); collector.on('end', collected => { sentMessage.delete(); collected.forEach(i => i.message.delete()); }); }, };