const axios = require('axios'); const { SlashCommandBuilder } = require('discord.js'); const { EmbedBuilder } = require('discord.js'); const getPlayersNumberAndFPS = (token) => { return new Promise((resolve, reject) => { let infos = ""; axios({ method: 'get', maxBodyLength: Infinity, url: 'http://play.louismazin.ovh:8212/v1/api/metrics', headers: { 'Accept': 'application/json', 'Authorization': `Basic ${token}` } }) .then((response) => { infos += "## FPS du Serveur : "+response.data["serverfps"]+'\n'; infos += "## Nombre de joueurs connectés : "+response.data["currentplayernum"]+'\n'; resolve(infos); }) .catch((error) => { console.log("Erreur lors de l'appel à l'api pterodactyl (serveur injoignable)"); reject("Le serveur est hors ligne."); }); }); } const getPlayers = (token) => { return new Promise((resolve, reject) => { let infos = ""; axios({ method: 'get', maxBodyLength: Infinity, url: 'http://play.louismazin.ovh:8212/v1/api/players', headers: { 'Accept': 'application/json', 'Authorization': `Basic ${token}` } }) .then((response) => { const players = Object.entries(response.data.players); if (players.length === 0) { resolve(infos); return; } for(const player of players) { const joueur = player[1]; infos += "### - "+joueur.name+' - niveau '+joueur.level+' - ping : '+Math.round(joueur.ping)+'ms\n'; } resolve(infos); }) .catch((error) => { console.log("Erreur lors de l'appel à l'api pterodactyl (serveur injoignable)"); reject("Le serveur est hors ligne."); }); }); } const getParams = (token) => { return new Promise((resolve, reject) => { let infos = "## Paramètres du Serveur : \n"; axios({ method: 'get', maxBodyLength: Infinity, url: 'http://play.louismazin.ovh:8212/v1/api/settings', headers: { 'Accept': 'application/json', 'Authorization': `Basic ${token}` } }) .then((response) => { const paramNames = {'Difficulty': 'Difficulté', 'DeathPenalty': 'Pénalité de mort', 'bEnableInvaderEnemy': 'Ennemis envahisseurs', 'BaseCampMaxNumInGuild': 'Nombre max de camps par guilde', 'BaseCampWorkerMaxNum': 'Nombre max de pals par camp'} const params = Object.entries(response.data); for(const [key, value] of params) { if(Object.keys(paramNames).indexOf(key) !== -1) { infos += "### - "+paramNames[key]+' : '+value+'\n'; } } resolve(infos); }) .catch((error) => { console.log("Erreur lors de l'appel à l'api pterodactyl (serveur injoignable)"); reject("Le serveur est hors ligne."); }); }); } module.exports = { data: new SlashCommandBuilder() .setName('server-stats') .setDescription('Afichez les informations sur le Serveur Palworld !') .addUserOption(option => option.setName('user') .setDescription('Utilisateur à mentionner') .setRequired(false)), async execute(interaction,token) { try { const infos = await getPlayersNumberAndFPS(token); const params = await getParams(token); const players = await getPlayers(token); const user = interaction.options.getUser('user') const message = new EmbedBuilder() .setColor('#0099ff') .setDescription('# Informations sur le Serveur Palworld\n\n## :video_game: Nom du serveur :\n### Rygainland\n\n## :wireless: IP :\n### play.louismazin.ovh:1028\n\n## :no_entry: Mot de passe :\n### serverpassword\n\n## :repeat: État :\n### https://discord.com/channels/1068240252092813373/1263481798667796623\n'+infos+(players==="" ? "" : players+"\n")+'\n'+params); await interaction.reply({ content: (user ? "||<@"+interaction.options.getUser('user').id+">||\n" : null), embeds: [message] }); } catch (error) { await interaction.reply({ content: "Une erreur est survenue : " + error, ephemeral: true }); } }, };