const { EmbedBuilder, StringSelectMenuBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js'); module.exports = { name: 'poll', description: 'Crée un sondage', emote: '📊', utilisation: 'poll', category: 'utils', async execute(message, args, client) { const pollEmbed = new EmbedBuilder() .setTitle('Sondage') .setColor('#0099ff') .setFields([]); const slectMenu = new StringSelectMenuBuilder() .setCustomId('slectMenu') .setPlaceholder('📝 Modifier le sondage') .addOptions([ { label: '📝 Modifier le titre', value: 'title' }, { label: '📝 Mofifier la description (none pour enlever)', value: 'description' }, { label: '➕ Ajouter une réponses', value: 'addResponses' }, { label: '➖ Retirer une réponses', value: 'removeResponses' }, { label: '📝 Modifier le footer (none pour enlever)', value: 'footer'}, { label: '🔄 Changer le salon', value: 'changeChannel'}, { label: '✅ Envoyer', value: 'send' }, { label: '❌ Annuler', value: 'cancel'} ]); const row = new ActionRowBuilder() .addComponents(slectMenu); const sentMessage = await message.reply({ content: `Sondage envoyé dans : ${message.channel}`, embeds: [pollEmbed], components: [row], }); const filter = i => i.customId === 'slectMenu' && i.user.id === message.author.id; const filter2 = m => m.author.id === message.author.id const collector = sentMessage.createMessageComponentCollector({ filter, time: 120000 }) collector.on('collect', async (interaction) => { if (interaction.values[0] === 'title') { const demande = await interaction.reply('Veuillez entrer le nouveau titre'); const collector2 = message.channel.createMessageCollector({ filter: filter2, max: 1, time: 60000 }); collector2.on('collect', async (m) => { pollEmbed.setTitle(m.content); sentMessage.edit({ content: `Sondage envoyé dans : ${message.channel}`, embeds: [pollEmbed], components: [row] }); demande.delete(); m.delete(); }); } else if (interaction.values[0] === 'description') { const demande = await interaction.reply('Veuillez entrer la nouvelle description'); const collector2 = message.channel.createMessageCollector({ filter: filter2, max: 1, time: 60000 }); collector2.on('collect', async (m) => { if (m.content === 'none') { pollEmbed.setDescription(' '); sentMessage.edit({ content: `Sondage envoyé dans : ${message.channel}`, embeds: [pollEmbed], components: [row] }); demande.delete(); m.delete(); return; } pollEmbed.setDescription(m.content); sentMessage.edit({ content: `Sondage envoyé dans : ${message.channel}`, embeds: [pollEmbed], components: [row] }); demande.delete(); m.delete(); }); } else if (interaction.values[0] === 'addResponses') { const demande = await interaction.reply('Entrez la réponse à ajouter'); const collector3 = message.channel.createMessageCollector({ filter: filter2, max: 1, time: 60000 }); collector3.on('collect', async (m) => { pollEmbed.addFields({ name: `${pollEmbed.data.fields.length + 1}\u20e3`, value: m.content }); sentMessage.edit({ content: `Sondage envoyé dans : ${message.channel}`, embeds: [pollEmbed], components: [row] }); demande.delete(); m.delete(); }); } else if (interaction.values[0] === 'removeResponses') { const demande = await interaction.reply('Entrez le numéro de la réponse à retirer'); const collector4 = message.channel.createMessageCollector({ filter: filter2, max: 1, time: 60000 }); collector4.on('collect', async (m) => { const responseIndex = parseInt(m.content); if (isNaN(responseIndex)) return message.reply('Veuillez entrer un nombre valide.'); if (responseIndex < 1) return message.reply('Veuillez entrer un nombre supérieur à 0.'); if (pollEmbed.fields && responseIndex > pollEmbed.fields.length) return message.reply('Veuillez entrer un nombre inférieur au nombre de réponses.'); pollEmbed.spliceFields(responseIndex - 1, 1); for (let i = responseIndex - 1; i < pollEmbed.data.fields.length; i++) { pollEmbed.data.fields[i].name = `${i + 1}\u20e3`; } sentMessage.edit({ content: `Sondage envoyé dans : ${message.channel}`, embeds: [pollEmbed], components: [row] }); demande.delete(); m.delete(); }); } else if (interaction.values[0] === 'footer') { const demande = await interaction.reply('Veuillez entrer le nouveau footer'); const collector5 = message.channel.createMessageCollector({ filter: filter2, max: 1, time: 60000 }); collector5.on('collect', async (m) => { if (m.content === 'none') { pollEmbed.setFooter( {text: ' '} ); sentMessage.edit({ content: `Sondage envoyé dans : ${message.channel}`, embeds: [pollEmbed], components: [row] }); return; } pollEmbed.setFooter( {text: m.content} ); sentMessage.edit({ content: `Sondage envoyé dans : ${message.channel}`, embeds: [pollEmbed], components: [row] }); demande.delete(); m.delete(); }); } else if (interaction.values[0] === 'changeChannel') { const demande = await interaction.reply('Veuillez mentionner le salon dans lequel envoyer le sondage'); const collector5 = message.channel.createMessageCollector({ filter: filter2, max: 1, time: 60000 }); collector5.on('collect', async (m) => { const channel = m.mentions.channels.first(); if (!channel) return message.reply('Veuillez mentionner un salon valide.'); sentMessage.edit({ content: `Sondage envoyé dans : ${channel}`, embeds: [pollEmbed], components: [row] }); demande.delete(); m.delete(); }); } else if (interaction.values[0] === 'send') { const channel = sentMessage.content.split(' ').slice(4).join(' ').replace(/<#|>/g, ''); const channelToSend = message.guild.channels.cache.get(channel); if (!channelToSend) return message.reply('Le salon spécifié est invalide.'); const sondage = await channelToSend.send({ embeds: [pollEmbed] }); for (let i = 0; i < pollEmbed.data.fields.length; i++) { await sondage.react(`${i + 1}\u20e3`); } sentMessage.delete(); } else if (interaction.values[0] === 'cancel') { await interaction.reply({ content: 'Sondage annulé.', ephemeral: true }); sentMessage.delete(); } }); }, }