Files
gestion/commands/gestion/embed.js
T
2024-02-14 21:04:59 +01:00

99 lines
4.5 KiB
JavaScript

const { EmbedBuilder, ActionRowBuilder, StringSelectMenuBuilder } = require('discord.js');
module.exports = {
name: 'embed',
description: 'Crée un embed customisable',
async execute(message, args, client) {
const embed = new EmbedBuilder();
const menu = new StringSelectMenuBuilder()
.setCustomId('embed-options')
.setPlaceholder('Select an option')
.addOptions([
{ label: '📝 Titre', value: 'title' },
{ label: '📖 Description', value: 'description' },
{ label: '🎨 Couleur', value: 'color' },
{ label: '🖼️ Image URL', value: 'image' },
{ label: '🖼️ Thumbnail URL', value: 'thumbnail' },
{ label: '👤 Autheur', value: 'author' },
{ label: '👣 Footer', value: 'footer' },
{ label: '🚀 Envoyer', value: 'send' },
]);
const row = new ActionRowBuilder()
.addComponents(menu);
const selectMenuMessage = await message.channel.send({ content: `Veuillez sélectionner une option pour l'embed:`, components: [row] });
client.on('interactionCreate', async (interaction) => {
if (!interaction.isSelectMenu()) return;
if (interaction.customId === 'embed-options') {
const selectedOption = interaction.values[0];
if (selectedOption === 'send') {
const channelMessage = await interaction.reply({ content: `Veuillez mentionner le salon où l'embed sera envoyé.`, fetchReply: true });
const channelFilter = m => m.author.id === interaction.user.id;
const channelCollector = interaction.channel.createMessageCollector({ filter: channelFilter, max: 1, time: 60000 }); // 1 minute to reply
channelCollector.on('collect', async (m) => {
let channel = m.mentions.channels.first();
if (!channel) {
const channelId = m.content;
channel = interaction.guild.channels.cache.get(channelId);
}
if (!channel) {
interaction.followUp({ content: 'Salon invalide.' });
return;
}
channel.send({ embeds: [embed] });
message.channel.send(`Embed correctement envoyé dans le channel <#${channel.id}>`)
});
} else {
const optionMessage = await interaction.reply({ content: `Veuillez entrer ${selectedOption} de l'embed:`, fetchReply: true });
const optionFilter = m => m.author.id === interaction.user.id;
const optionCollector = interaction.channel.createMessageCollector({ filter: optionFilter, max: 1 });
optionCollector.on('collect', async (m) => {
let optionValue = '';
if (m.content.toLowerCase() !== 'cancel') {
optionValue = m.content;
}
optionMessage.delete();
m.delete();
switch (selectedOption) {
case 'title':
embed.setTitle(optionValue);
break;
case 'description':
embed.setDescription(optionValue);
break;
case 'color':
embed.setColor(optionValue);
break;
case 'image':
embed.setImage(optionValue);
break;
case 'thumbnail':
embed.setThumbnail(optionValue);
break;
case 'author':
embed.setAuthor({ name: optionValue });
break;
case 'footer':
embed.setFooter({ name: optionValue });
break;
}
selectMenuMessage.edit({ embeds: [embed], components: [row] });
});
}
}
});
},
};