const { SlashCommandBuilder, EmbedBuilder, MessageFlags } = require('discord.js'); const { generateLinkCode, getUserLink } = require('../../database.js'); module.exports = { data: new SlashCommandBuilder() .setName('lier-rygainland') .setDescription('Lier votre compte Discord à votre compte Palworld'), async execute(interaction) { try { console.log('=== [LIER-RYGAINLAND] Début de l\'exécution ==='); console.log('[LIER-RYGAINLAND] Utilisateur:', interaction.user.tag, '(ID:', interaction.user.id + ')'); console.log('[LIER-RYGAINLAND] Vérification des liaisons existantes...'); const existingLink = await getUserLink(interaction.user.id); console.log('[LIER-RYGAINLAND] Liaison existante:', existingLink); if (existingLink) { console.log('[LIER-RYGAINLAND] ⚠️ Utilisateur déjà lié à:', existingLink.palworld_username); return interaction.reply({ content: `Vous êtes déjà lié au compte Palworld: **${existingLink.palworld_username}** (Steam ID: ${existingLink.steam_id})`, flags: MessageFlags.Ephemeral }); } console.log('[LIER-RYGAINLAND] Génération d\'un nouveau code de liaison...'); const code = await generateLinkCode(interaction.user.id); console.log('[LIER-RYGAINLAND] ✅ Code généré:', code); const embed = new EmbedBuilder() .setColor(0x00FF00) .setTitle('🔗 Liaison de compte Rygainland') .setDescription('Pour lier votre compte Discord à votre compte Palworld:') .addFields( { name: '1️⃣ Étape 1', value: 'Connectez-vous sur le serveur Palworld' }, { name: '2️⃣ Étape 2', value: `Tapez dans le chat du jeu:\n\`\`\`!lier ${code}\`\`\`` }, { name: '⏱️ Expiration', value: 'Ce code expire dans **10 minutes**' }, { name: '🔑 Votre code', value: `\`${code}\``, inline: false } ) .setFooter({ text: 'Le système de surveillance démarre automatiquement' }) .setTimestamp(); console.log('[LIER-RYGAINLAND] Envoi de l\'embed avec le code...'); await interaction.reply({ embeds: [embed], flags: MessageFlags.Ephemeral }); console.log('[LIER-RYGAINLAND] ✅ Réponse envoyée avec succès'); console.log('[LIER-RYGAINLAND] Le système WebSocket va surveiller le code:', code); // Le système checkAndManageWebSocket va détecter le nouveau code automatiquement } catch (error) { console.error('[LIER-RYGAINLAND] ❌ ERREUR CRITIQUE:', error); console.error('[LIER-RYGAINLAND] Stack trace:', error.stack); await interaction.reply({ content: '❌ Une erreur est survenue lors de la génération du code.', flags: MessageFlags.Ephemeral }).catch(err => console.error('[LIER-RYGAINLAND] Impossible de répondre:', err)); } }, };