const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, MessageFlags } = require('discord.js'); const { getUserLink, deleteUserLink } = require('../../database.js'); module.exports = { data: new SlashCommandBuilder() .setName('delier-rygainland') .setDescription('Délier votre compte Discord de votre compte Palworld'), async execute(interaction) { try { const existingLink = await getUserLink(interaction.user.id); if (!existingLink) { const embed = new EmbedBuilder() .setColor(0xFF9900) .setTitle('⚠️ Aucune liaison trouvée') .setDescription('Votre compte Discord n\'est pas lié à un compte Palworld.') .addFields( { name: '💡 Pour vous lier', value: 'Utilisez la commande `/lier-rygainland`' } ) .setTimestamp(); return interaction.reply({ embeds: [embed], flags: MessageFlags.Ephemeral }); } // Afficher un embed de confirmation avec boutons const confirmEmbed = new EmbedBuilder() .setColor(0xFF6600) .setTitle('⚠️ Confirmation de déliaison') .setDescription('Êtes-vous sûr de vouloir délier votre compte ?') .addFields( { name: '👤 Discord', value: `${interaction.user.tag}`, inline: false }, { name: '🎮 Palworld', value: `**${existingLink.palworld_username}**`, inline: true }, { name: '🆔 Steam ID', value: `\`${existingLink.steam_id}\``, inline: true }, { name: '🎯 Player ID', value: `\`${existingLink.player_id || 'N/A'}\``, inline: false } ) .setFooter({ text: 'Cette action est irréversible' }) .setTimestamp(); const row = new ActionRowBuilder() .addComponents( new ButtonBuilder() .setCustomId('confirm_unlink') .setLabel('✅ Confirmer la déliaison') .setStyle(ButtonStyle.Danger), new ButtonBuilder() .setCustomId('cancel_unlink') .setLabel('❌ Annuler') .setStyle(ButtonStyle.Secondary) ); const response = await interaction.reply({ embeds: [confirmEmbed], components: [row], flags: MessageFlags.Ephemeral }); // Attendre la réponse de l'utilisateur (60 secondes) const collectorFilter = i => i.user.id === interaction.user.id; try { const confirmation = await response.awaitMessageComponent({ filter: collectorFilter, time: 60000 }); if (confirmation.customId === 'confirm_unlink') { // Supprimer la liaison await deleteUserLink(interaction.user.id); const successEmbed = new EmbedBuilder() .setColor(0x00FF00) .setTitle('✅ Déliaison réussie') .setDescription('Votre compte Discord a été délié avec succès de votre compte Palworld.') .addFields( { name: '🎮 Compte Palworld délié', value: `**${existingLink.palworld_username}**` }, { name: '💡 Pour vous lier à nouveau', value: 'Utilisez la commande `/lier-rygainland`' } ) .setTimestamp(); await confirmation.update({ embeds: [successEmbed], components: [] }); } else if (confirmation.customId === 'cancel_unlink') { const cancelEmbed = new EmbedBuilder() .setColor(0x808080) .setTitle('❌ Déliaison annulée') .setDescription('Votre compte reste lié.') .setTimestamp(); await confirmation.update({ embeds: [cancelEmbed], components: [] }); } } catch (error) { // Timeout ou erreur const timeoutEmbed = new EmbedBuilder() .setColor(0x808080) .setTitle('⏱️ Temps écoulé') .setDescription('La demande de déliaison a expiré. Votre compte reste lié.') .setTimestamp(); await interaction.editReply({ embeds: [timeoutEmbed], components: [] }); } } catch (error) { console.error('Erreur lors de la déliaison:', error); await interaction.reply({ content: '❌ Une erreur est survenue lors de la déliaison.', flags: MessageFlags.Ephemeral }); } }, };