const { status } = require('minecraft-server-util'); class MinecraftServerUtil { constructor() { this.serverIP = process.env.MINECRAFT_SERVER_IP; this.host = this.serverIP.split(':')[0]; this.port = parseInt(this.serverIP.split(':')[1]) || 25565; } async getServerStatus() { try { console.log(`🔍 Vérification du serveur ${this.host}:${this.port}...`); const result = await status(this.host, this.port, { timeout: 10000 }); console.log('✅ Réponse du serveur reçue'); // Gérer la description qui peut être un objet complexe let description = 'Serveur Minecraft'; if (result.description) { if (typeof result.description === 'string') { description = result.description; } else if (result.description.text) { description = result.description.text; } else if (result.description.extra) { description = result.description.extra.map(part => part.text || '').join(''); } else { description = JSON.stringify(result.description); } } return { online: true, version: result.version?.name || 'Inconnu', protocol: result.version?.protocol || 0, players: { online: result.players?.online || 0, max: result.players?.max || 0, list: result.players?.sample || [] }, description: description, latency: result.roundTripLatency || 0, favicon: result.favicon }; } catch (error) { console.error('❌ Erreur lors de la vérification du serveur:', error); return { online: false, error: error.message }; } } async isServerOnline() { const status = await this.getServerStatus(); return status.online; } formatStatusEmbed(statusData) { const { EmbedBuilder } = require('discord.js'); const emojiManager = require('./emojiManager'); if (!statusData.online) { return new EmbedBuilder() .setTitle(`${emojiManager.error} Serveur Minecraft - Hors ligne`) .setDescription(`Le serveur \`${this.serverIP}\` est actuellement hors ligne.`) .addFields( { name: 'Erreur', value: statusData.error || 'Serveur inaccessible', inline: true } ) .setColor('#FF0000') .setTimestamp(); } const embed = new EmbedBuilder() .setTitle(`${emojiManager.success} Serveur Minecraft - En ligne`) .setDescription(`Le serveur \`${this.serverIP}\` est en ligne !`) .addFields( { name: '👥 Joueurs', value: `${statusData.players.online}/${statusData.players.max}`, inline: true }, { name: '📋 Version', value: statusData.version, inline: true }, { name: '📡 Latence', value: `${statusData.latency}ms`, inline: true } ) .setColor('#00FF00') .setTimestamp(); if (statusData.description && statusData.description !== 'Serveur Minecraft') { // Limiter la taille de la description pour éviter les erreurs Discord const description = statusData.description.length > 1024 ? statusData.description.substring(0, 1021) + '...' : statusData.description; embed.addFields({ name: '📝 Description', value: description, inline: false }); } if (statusData.players.list && statusData.players.list.length > 0) { const playerList = statusData.players.list .slice(0, 10) // Limiter à 10 joueurs .map(player => player.name) .join(', '); embed.addFields({ name: '🎮 Joueurs connectés', value: playerList, inline: false }); } return embed; } } module.exports = MinecraftServerUtil;