const { SlashCommandBuilder, EmbedBuilder, MessageFlags } = require('discord.js'); const { verifyLinkCode, updateUserLinkWithUsername } = require('../../database.js'); const axios = require('axios'); module.exports = { data: new SlashCommandBuilder() .setName('lier') .setDescription('Lier manuellement un compte Discord à un compte Palworld (Admin)') .addStringOption(option => option.setName('pseudo-palworld') .setDescription('Le pseudo du joueur sur Palworld') .setRequired(true)) .addUserOption(option => option.setName('discord-account') .setDescription('Le compte Discord à lier') .setRequired(true)), async execute(interaction) { try { await interaction.deferReply({ flags: MessageFlags.Ephemeral }); const palworldName = interaction.options.getString('pseudo-palworld'); const discordUser = interaction.options.getUser('discord-account'); // Récupérer le Steam ID depuis l'API Palworld const response = await axios({ method: 'get', url: 'http://play.louismazin.ovh:8212/v1/api/players', headers: { 'Accept': 'application/json', 'Authorization': `Basic ${process.env.PALWORLD_API_TOKEN}` } }); const players = response.data.players || {}; let playerData = null; // Chercher le joueur par nom for (const [id, player] of Object.entries(players)) { if (player.name === palworldName) { playerData = { steamId: player.userId.replace('steam_', ''), playerId: player.playerId, name: player.name }; break; } } if (!playerData) { return interaction.editReply({ content: `❌ Impossible de trouver le joueur **${palworldName}** sur le serveur.\n\n` + `💡 Le joueur doit être connecté sur le serveur Palworld.`, flags: MessageFlags.Ephemeral }); } // Créer un code temporaire pour la liaison manuelle const { generateLinkCode } = require('../../database.js'); const code = await generateLinkCode(discordUser.id); // Effectuer la liaison immédiatement const result = await verifyLinkCode(code, playerData.steamId, playerData.name, playerData.playerId); if (result.success) { await updateUserLinkWithUsername(discordUser.id, discordUser.tag); const embed = new EmbedBuilder() .setColor(0x00FF00) .setTitle('✅ Liaison manuelle réussie') .addFields( { name: '👤 Discord', value: `${discordUser.tag} (<@${discordUser.id}>)`, inline: false }, { name: '🎮 Palworld', value: palworldName, inline: true }, { name: '🆔 Steam ID', value: `\`${playerData.steamId}\``, inline: true }, { name: '🎯 Player ID', value: `\`${playerData.playerId}\``, inline: false } ) .setTimestamp(); // Envoyer un MP au joueur lié await discordUser.send( `✅ **Liaison effectuée par un administrateur**\n\n` + `Votre compte Discord a été lié à votre compte Palworld:\n` + `🎮 Nom Palworld: **${playerData.name}**\n` + `🆔 Steam ID: \`${playerData.steamId}\`\n` + `🎯 Player ID: \`${playerData.playerId}\`` ).catch(() => {}); await interaction.editReply({ embeds: [embed], flags: MessageFlags.Ephemeral }); } else { await interaction.editReply({ content: `❌ Erreur lors de la liaison: ${result.message}`, flags: MessageFlags.Ephemeral }); } } catch (error) { console.error('Erreur lors de la liaison manuelle:', error); await interaction.editReply({ content: '❌ Une erreur est survenue lors de la liaison.', flags: MessageFlags.Ephemeral }); } }, };