const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, MessageFlags } = require('discord.js'); const { getUserLink, deleteUserLink } = require('../../database.js'); module.exports = { data: new SlashCommandBuilder() .setName('delier') .setDescription('Délier un compte Discord de son compte Palworld (Admin)') .addUserOption(option => option.setName('compte-discord') .setDescription('Le compte Discord à délier') .setRequired(true)), async execute(interaction) { try { const discordUser = interaction.options.getUser('compte-discord'); const existingLink = await getUserLink(discordUser.id); if (!existingLink) { const embed = new EmbedBuilder() .setColor(0xFF9900) .setTitle('⚠️ Aucune liaison trouvée') .setDescription(`Le compte <@${discordUser.id}> n'est pas lié à un compte Palworld.`) .setTimestamp(); return interaction.reply({ embeds: [embed]}); } // Afficher un embed de confirmation avec boutons const confirmEmbed = new EmbedBuilder() .setColor(0xFF6600) .setTitle('⚠️ Confirmation de déliaison (Admin)') .setDescription(`Êtes-vous sûr de vouloir délier ce compte ?`) .addFields( { name: '👤 Discord', value: `${discordUser.tag} (<@${discordUser.id}>)`, 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('admin_confirm_unlink') .setLabel('✅ Confirmer la déliaison') .setStyle(ButtonStyle.Danger), new ButtonBuilder() .setCustomId('admin_cancel_unlink') .setLabel('❌ Annuler') .setStyle(ButtonStyle.Secondary) ); const response = await interaction.reply({ embeds: [confirmEmbed], components: [row] }); const collectorFilter = i => i.user.id === interaction.user.id; try { const confirmation = await response.awaitMessageComponent({ filter: collectorFilter, time: 60000 }); if (confirmation.customId === 'admin_confirm_unlink') { await deleteUserLink(discordUser.id); const successEmbed = new EmbedBuilder() .setColor(0x00FF00) .setTitle('✅ Liaison supprimée') .setDescription(`Le compte Discord a été délié avec succès.`) .addFields( { name: '👤 Discord', value: `${discordUser.tag} (<@${discordUser.id}>)`, inline: false }, { name: '🎮 Palworld (ancien)', value: existingLink.palworld_username, inline: true }, { name: '🆔 Steam ID (ancien)', value: `\`${existingLink.steam_id}\``, inline: true } ) .setTimestamp(); await discordUser.send( `🔓 **Liaison supprimée**\n\n` + `Votre compte Discord a été délié de votre compte Palworld par un administrateur.\n` + `Vous pouvez vous lier à nouveau avec \`/lier-rygainland\`.` ).catch(() => {}); await confirmation.update({ embeds: [successEmbed], components: [] }); } else if (confirmation.customId === 'admin_cancel_unlink') { const cancelEmbed = new EmbedBuilder() .setColor(0x808080) .setTitle('❌ Déliaison annulée') .setDescription('La liaison n\'a pas été modifiée.') .setTimestamp(); await confirmation.update({ embeds: [cancelEmbed], components: [] }); } } catch (error) { const timeoutEmbed = new EmbedBuilder() .setColor(0x808080) .setTitle('⏱️ Temps écoulé') .setDescription('La demande de déliaison a expiré. La liaison n\'a pas été modifiée.') .setTimestamp(); await interaction.editReply({ embeds: [timeoutEmbed], components: [] }); } } catch (error) { console.error('Erreur lors de la suppression de la liaison:', error); await interaction.reply({ content: '❌ Une erreur est survenue lors de la suppression de la liaison.', flags: MessageFlags.Ephemeral }).catch(() => { interaction.editReply({ content: '❌ Une erreur est survenue lors de la suppression de la liaison.', flags: MessageFlags.Ephemeral }); }); } }, };