UNPKG

gamedig

Version:

Query for the status of any game server in Node.JS

47 lines (39 loc) 1.43 kB
import Core from './core.js' import beammpmaster from './beammpmaster.js' export default class beammp extends Core { async run (state) { const master = new beammpmaster() master.options = this.options const masterState = await master.runOnceSafe() const servers = masterState.raw.servers const sameIpServers = servers.filter(s => s.ip === this.options.address) const sortedServers = sameIpServers.sort(s => parseInt(s.port)) // Cause some don't have ports specified, so we prioritize those who do const server = sortedServers.find(s => s.ip === this.options.address && this.matchPort(s.port)) if (!server) { throw new Error('Server not found in the master list') } state.name = server.sname.replace(/\^./g, '') state.map = server.map state.password = server.password state.numplayers = parseInt(server.players) state.maxplayers = parseInt(server.maxplayers) const players = server.playerslist.split(';') if (players[players.length - 1] === '') { players.pop() } players.forEach(player => { state.players.push({ name: player }) }) state.raw = server if ('version' in state.raw) state.version = state.raw.version } matchPort (givenPort) { const parsedPort = parseInt(givenPort) const port = this.options.port if (!port || isNaN(parsedPort)) { return true } return port === parsedPort } }