mirror of
https://github.com/arthur-pbty/gestion.git
synced 2026-06-11 15:56:27 +02:00
add utility commande
This commit is contained in:
@@ -0,0 +1,171 @@
|
||||
const { EmbedBuilder, StringSelectMenuBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
|
||||
|
||||
module.exports = {
|
||||
name: 'poll',
|
||||
description: 'Crée un sondage',
|
||||
emote: '📊',
|
||||
utilisation: 'poll',
|
||||
category: 'gestion',
|
||||
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();
|
||||
}
|
||||
});
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user