upgrade poll command

This commit is contained in:
Tutur33
2024-02-16 20:01:37 +01:00
parent 9d2208ba87
commit 75479a2af2
+153 -32
View File
@@ -1,4 +1,4 @@
const { EmbedBuilder, StringSelectMenuBuilder, ActionRowBuilder } = require('discord.js'); const { EmbedBuilder, StringSelectMenuBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
module.exports = { module.exports = {
name: 'poll', name: 'poll',
@@ -7,44 +7,165 @@ module.exports = {
utilisation: 'poll <question> <réponse1> <réponse2> <réponse3> ...', utilisation: 'poll <question> <réponse1> <réponse2> <réponse3> ...',
category: 'utils', category: 'utils',
async execute(message, args, client) { async execute(message, args, client) {
message.reply('Veuillez entrer la question du sondage'); const pollEmbed = new EmbedBuilder()
const filter = m => m.author.id === message.author.id; .setTitle('Sondage')
const collector = message.channel.createMessageCollector({ filter, max: 1, time: 60000 }); .setColor('#0099ff')
collector.on('collect', async (m) => { .setFields([]);
const question = m.content;
const pollEmbed = new EmbedBuilder() const slectMenu = new StringSelectMenuBuilder()
.setTitle(question) .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'}
]);
message.reply('Combien de réponses voulez-vous ajouter ?'); const row = new ActionRowBuilder()
const collector2 = message.channel.createMessageCollector({ filter, max: 1, time: 60000 }); .addComponents(slectMenu);
collector2.on('collect', async (m) => {
const responseCount = parseInt(m.content);
if (isNaN(responseCount)) return message.reply('Veuillez entrer un nombre valide.');
if (responseCount < 2) return message.reply('Veuillez entrer un nombre supérieur à 1.');
if (responseCount > 10) return message.reply('Veuillez entrer un nombre inférieur à 10.');
let repsonce; const sentMessage = await message.reply({
for (let i = 0; i < responseCount; i++) { content: `Sondage envoyé dans : ${message.channel}`,
message.reply(`Veuillez entrer la réponse ${i + 1}`); embeds: [pollEmbed],
const collector3 = message.channel.createMessageCollector({ filter, max: 1, time: 60000 }); components: [row],
collector3.on('collect', async (m) => { });
repsonce = repsonce ? `${repsonce}\n${i + 1}\u20e3 : ${m.content}` : `${i + 1}\u20e3 : ${m.content}`;
if (i === responseCount - 1) {
pollEmbed.setDescription(repsonce); const filter = i => i.customId === 'slectMenu' && i.user.id === message.author.id;
const Embed = await message.channel.send({ embeds: [pollEmbed] }); const filter2 = m => m.author.id === message.author.id
for (let i = 0; i < responseCount; i++) { const collector = sentMessage.createMessageComponentCollector({ filter, time: 120000 })
await Embed.react(`${i + 1}\u20e3`); 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();
});
await new Promise(resolve => { } else if (interaction.values[0] === 'description') {
collector3.on('end', () => resolve()); 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();
}
});
}, },
} }