import { Command, CommandoMessage, CommandoClient } from 'discord.js-commando'; import { MessageEmbed } from 'discord.js'; //@ts-ignore no types import emoji from 'emoji-random' //@ts-ignore no types import gamedig from 'gamedig' const gameDigHelper = require('../../utils/gameDigHelper.js') module.exports = class StarboundServerStatusUtility extends Command { constructor(client: CommandoClient) { super(client, { name: 'starboundserverstatus', aliases: [ 'starbound-ss', 'starbound-server-status', 'sbss' ], group: 'utility', memberName: 'starboundserverstatus', description: 'Grabs you the server status of a Starbound server.', examples: [ 'uwu!starboundserverstatus', 'uwu!sbss' ], userPermissions: ['SEND_MESSAGES', 'READ_MESSAGE_HISTORY'], clientPermissions: ['SEND_MESSAGES', 'READ_MESSAGE_HISTORY'], throttling: { usages: 5, duration: 30 }, args: [ { key: 'host', prompt: 'What is the IP or host of the server?', type: 'string' }, { key: 'port', prompt: 'What is the port of the server?', type: 'integer', default: '21025', max: 65535, min: 1 } ] }); } run(msg: CommandoMessage, { host, port }: any) { try { const options = { host, type: 'starbound' } if (port) { //@ts-ignore added auto options.port = port } return gamedig .query(options) // this is auto'd so might not be good .then((data: { raw: { numplayers: any; }; maxplayers: any; name: any; query: { duration: any; address: any; port: any; }; password: any; }) => { const curr = data.raw.numplayers const max = data.maxplayers return msg.replyEmbed( new MessageEmbed() .setTitle(data.name) .setThumbnail('https://steamcdn-a.akamaihd.net/steam/apps/211820/header.jpg') .setFooter(`Took ${data.query.duration} to complete.`) .addFields([ { name: 'IP Address', value: `${data.query.address} (port ${data.query.port})` }, { name: "Online Players", value: `${curr}/${max} (${Math.round((curr / max) * 100)}%)` }, { name: "Password Required", value: data.password ? "Yes" : "No" } ]) .setColor(0xFFCC4D) ) }) .catch((err: string) => { if (err === 'UDP Watchdog Timeout') return msg.reply('Server timed out, it\'s probably offline. ' + emoji.random()) console.error(err) return msg.reply('Woops, an unknown error has occured. ' + emoji.random()) }) } finally { return msg.channel.stopTyping() } } };