From ea478cb6dd5c7bf98ede18fc2bb5384c5471e51b Mon Sep 17 00:00:00 2001 From: Louis Mazin Date: Mon, 8 Dec 2025 22:52:42 +0100 Subject: [PATCH] finish --- .../{check-linked.js => afficher-lies.js} | 19 ++++++++------- commands/utility/{unlink.js => delier.js} | 22 ++++++++--------- ...{rygainland-link.js => lier-rygainland.js} | 14 +++++------ commands/utility/{link.js => lier.js} | 24 ++++++++----------- consoleMonitor.js | 8 +++---- 5 files changed, 39 insertions(+), 48 deletions(-) rename commands/utility/{check-linked.js => afficher-lies.js} (77%) rename commands/utility/{unlink.js => delier.js} (72%) rename commands/utility/{rygainland-link.js => lier-rygainland.js} (78%) rename commands/utility/{link.js => lier.js} (82%) diff --git a/commands/utility/check-linked.js b/commands/utility/afficher-lies.js similarity index 77% rename from commands/utility/check-linked.js rename to commands/utility/afficher-lies.js index b883279..f5657cb 100644 --- a/commands/utility/check-linked.js +++ b/commands/utility/afficher-lies.js @@ -1,21 +1,22 @@ -const { SlashCommandBuilder, EmbedBuilder, MessageFlags } = require('discord.js'); +const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits } = require('discord.js'); const { getAllLinks } = require('../../database.js'); module.exports = { data: new SlashCommandBuilder() - .setName('check-linked') - .setDescription('Afficher tous les comptes liés (Admin uniquement)'), + .setName('afficher-lies') + .setDescription('Afficher tous les comptes liés (Admin uniquement)') + .setDefaultMemberPermissions(PermissionFlagsBits.Administrator), async execute(interaction) { try { - await interaction.deferReply({}); + await interaction.deferReply({ ephemeral: true }); const links = await getAllLinks(); if (links.length === 0) { return interaction.editReply({ content: '📝 Aucun compte lié pour le moment.', - flags: MessageFlags.Ephemeral + ephemeral: true }); } @@ -25,7 +26,6 @@ module.exports = { .setDescription(`Total: **${links.length}** compte(s) lié(s)`) .setTimestamp(); - // Diviser en plusieurs embeds si nécessaire (limite de 25 fields) const chunks = []; for (let i = 0; i < links.length; i += 10) { chunks.push(links.slice(i, i + 10)); @@ -34,7 +34,8 @@ module.exports = { for (const chunk of chunks) { for (const link of chunk) { const user = await interaction.client.users.fetch(link.discord_id).catch(() => null); - const discordName = user ? user.globalName : link.discord_username; + const discordName = user ? user.tag : link.discord_username; + embed.addFields({ name: `👤 ${discordName}`, value: `🎮 Palworld: **${link.palworld_username}**\n🆔 Steam ID: \`${link.steam_id}\`\n🎯 Player ID: \`${link.player_id || 'N/A'}\`\n📅 Lié le: ${new Date(link.linked_at).toLocaleDateString('fr-FR')}`, @@ -43,13 +44,13 @@ module.exports = { } } - await interaction.editReply({ embeds: [embed]}); + await interaction.editReply({ embeds: [embed], ephemeral: true }); } catch (error) { console.error('Erreur lors de la récupération des liaisons:', error); await interaction.editReply({ content: '❌ Une erreur est survenue lors de la récupération des liaisons.', - flags: MessageFlags.Ephemeral + ephemeral: true }); } }, diff --git a/commands/utility/unlink.js b/commands/utility/delier.js similarity index 72% rename from commands/utility/unlink.js rename to commands/utility/delier.js index 52700cd..772ac04 100644 --- a/commands/utility/unlink.js +++ b/commands/utility/delier.js @@ -1,32 +1,31 @@ -const { SlashCommandBuilder, EmbedBuilder, MessageFlags } = require('discord.js'); +const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits } = require('discord.js'); const { getUserLink, deleteUserLink } = require('../../database.js'); module.exports = { data: new SlashCommandBuilder() - .setName('unlink') + .setName('delier') .setDescription('Délier un compte Discord de son compte Palworld (Admin)') + .setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .addUserOption(option => - option.setName('discord-account') + option.setName('compte-discord') .setDescription('Le compte Discord à délier') .setRequired(true)), async execute(interaction) { try { - await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + await interaction.deferReply({ ephemeral: true }); - const discordUser = interaction.options.getUser('discord-account'); + const discordUser = interaction.options.getUser('compte-discord'); - // Vérifier si l'utilisateur est lié const existingLink = await getUserLink(discordUser.id); if (!existingLink) { return interaction.editReply({ content: `❌ Le compte <@${discordUser.id}> n'est pas lié à un compte Palworld.`, - flags: MessageFlags.Ephemeral + ephemeral: true }); } - // Supprimer la liaison await deleteUserLink(discordUser.id); const embed = new EmbedBuilder() @@ -40,20 +39,19 @@ module.exports = { ) .setTimestamp(); - // Envoyer un MP au joueur délié 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 \`/rygainland-link\`.` + `Vous pouvez vous lier à nouveau avec \`/lier-rygainland\`.` ).catch(() => {}); - await interaction.editReply({ embeds: [embed], flags: MessageFlags.Ephemeral }); + await interaction.editReply({ embeds: [embed], ephemeral: true }); } catch (error) { console.error('Erreur lors de la suppression de la liaison:', error); await interaction.editReply({ content: '❌ Une erreur est survenue lors de la suppression de la liaison.', - flags: MessageFlags.Ephemeral + ephemeral: true }); } }, diff --git a/commands/utility/rygainland-link.js b/commands/utility/lier-rygainland.js similarity index 78% rename from commands/utility/rygainland-link.js rename to commands/utility/lier-rygainland.js index c27cf80..e372f48 100644 --- a/commands/utility/rygainland-link.js +++ b/commands/utility/lier-rygainland.js @@ -1,9 +1,9 @@ -const { SlashCommandBuilder, EmbedBuilder, MessageFlags } = require('discord.js'); +const { SlashCommandBuilder, EmbedBuilder } = require('discord.js'); const { generateLinkCode, getUserLink } = require('../../database.js'); module.exports = { data: new SlashCommandBuilder() - .setName('rygainland-link') + .setName('lier-rygainland') .setDescription('Lier votre compte Discord à votre compte Palworld'), async execute(interaction) { @@ -12,7 +12,7 @@ module.exports = { if (existingLink) { return interaction.reply({ content: `Vous êtes déjà lié au compte Palworld: **${existingLink.palworld_username}** (Steam ID: ${existingLink.steam_id})`, - flags: MessageFlags.Ephemeral + ephemeral: true }); } @@ -24,22 +24,20 @@ module.exports = { .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\`\`\`!link ${code}\`\`\`` }, + { 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(); - await interaction.reply({ embeds: [embed], flags: MessageFlags.Ephemeral }); - - // Le système checkAndManageWebSocket va détecter le nouveau code automatiquement + await interaction.reply({ embeds: [embed], ephemeral: true }); } catch (error) { console.error('Erreur lors de la génération du code:', error); await interaction.reply({ content: '❌ Une erreur est survenue lors de la génération du code.', - flags: MessageFlags.Ephemeral + ephemeral: true }); } }, diff --git a/commands/utility/link.js b/commands/utility/lier.js similarity index 82% rename from commands/utility/link.js rename to commands/utility/lier.js index 8a82943..7eca8ca 100644 --- a/commands/utility/link.js +++ b/commands/utility/lier.js @@ -1,28 +1,28 @@ -const { SlashCommandBuilder, EmbedBuilder, MessageFlags } = require('discord.js'); +const { SlashCommandBuilder, EmbedBuilder, PermissionFlagsBits } = require('discord.js'); const { getPendingPlayer, verifyLinkCode, updateUserLinkWithUsername } = require('../../database.js'); const axios = require('axios'); module.exports = { data: new SlashCommandBuilder() - .setName('link') + .setName('lier') .setDescription('Lier manuellement un compte Discord à un compte Palworld (Admin)') + .setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .addStringOption(option => option.setName('pseudo-palworld') .setDescription('Le pseudo du joueur sur Palworld') .setRequired(true)) .addUserOption(option => - option.setName('discord-account') + option.setName('compte-discord') .setDescription('Le compte Discord à lier') .setRequired(true)), async execute(interaction) { try { - await interaction.deferReply({ flags: MessageFlags.Ephemeral }); + await interaction.deferReply({ ephemeral: true }); const palworldName = interaction.options.getString('pseudo-palworld'); - const discordUser = interaction.options.getUser('discord-account'); + const discordUser = interaction.options.getUser('compte-discord'); - // 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', @@ -35,7 +35,6 @@ module.exports = { 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 = { @@ -51,15 +50,13 @@ module.exports = { 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 + ephemeral: true }); } - // 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) { @@ -76,7 +73,6 @@ module.exports = { ) .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` + @@ -85,11 +81,11 @@ module.exports = { `🎯 Player ID: \`${playerData.playerId}\`` ).catch(() => {}); - await interaction.editReply({ embeds: [embed], flags: MessageFlags.Ephemeral }); + await interaction.editReply({ embeds: [embed], ephemeral: true }); } else { await interaction.editReply({ content: `❌ Erreur lors de la liaison: ${result.message}`, - flags: MessageFlags.Ephemeral + ephemeral: true }); } @@ -97,7 +93,7 @@ module.exports = { console.error('Erreur lors de la liaison manuelle:', error); await interaction.editReply({ content: '❌ Une erreur est survenue lors de la liaison.', - flags: MessageFlags.Ephemeral + ephemeral: true }); } }, diff --git a/consoleMonitor.js b/consoleMonitor.js index 2a638e4..5326def 100644 --- a/consoleMonitor.js +++ b/consoleMonitor.js @@ -11,19 +11,17 @@ let isMonitoring = false; const parseLogMessage = (log) => { // Format réel de log Palworld: - // [2025-12-08 21:47:17] [CHAT] !link ABC123 + // [2025-12-08 21:47:17] [CHAT] !lier ABC123 - const linkRegex = /\[.*?\]\s*\[CHAT\]\s*<(.+?)>\s*!link\s+([A-Z0-9]{6})/i; + const linkRegex = /\[.*?\]\s*\[CHAT\]\s*<(.+?)>\s*!lier\s+([A-Z0-9]{6})/i; const match = log.match(linkRegex); if (match) { const playerName = match[1].trim(); const code = match[2].toUpperCase(); - console.log(`✅ Commande !link détectée: ${playerName} avec le code ${code}`); + console.log(`✅ Commande !lier détectée: ${playerName} avec le code ${code}`); - // Le Steam ID n'est pas dans les logs de chat - // On va devoir le récupérer via l'API des joueurs connectés return { playerName: playerName, code: code,