Files
gestion/commands/utils/poll.js
T

171 lines
7.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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();
}
});
},
}