node-gamedig/protocols/farmingsimulator.js
Pedro Ivo Hudson a7c3b5474c
feat: Add version as a top level field (#532)
* add top level version on existing entries

* start adding version on new protocols WIP

* add version to more games

* more games with version

* add more games

* more version

* even more games with version

* add 'delete state.raw.version'

* fix delete version

* Update CHANGELOG.md

* add version in Results.js

* more games

* add new game

* more games

* add version on README

* add new game

* other game

* new game

* add unreal2 version

* add ventrilo version

* add eldewrito eldewrito

* add beammp version

* fix starmade version

* add new version in samp protocol

* docs: tweak the changelog line a bit

---------

Co-authored-by: CosminPerRam <cosmin.p@live.com>
2024-02-24 20:46:40 +02:00

56 lines
1.6 KiB
JavaScript

import Core from './core.js'
import cheerio from 'cheerio'
export default class farmingsimulator extends Core {
async run (state) {
if (!this.options.port) this.options.port = 8080
if (!this.options.token) throw new Error(`No token provided. You can get it from http://${this.options.host}:${this.options.port}/settings.html`)
const request = await this.request({
url: `http://${this.options.host}:${this.options.port}/feed/dedicated-server-stats.xml?code=${this.options.token}`,
responseType: 'text'
})
const $ = cheerio.load(request, {
xmlMode: true
})
const serverInfo = $('Server')
const playerInfo = serverInfo.find('Slots')
state.name = serverInfo.attr('name')
state.map = serverInfo.attr('mapName')
state.numplayers = playerInfo.attr('numUsed')
state.maxplayers = playerInfo.attr('capacity')
$('Player').each(function () {
if ($(this).attr('isUsed') === 'true') {
state.players.push({
name: $(this).text(),
raw: {
isAdmin: $(this).attr('isAdmin') === 'true',
uptime: parseInt($(this).attr('uptime'), 10)
}
})
}
})
state.raw.mods = []
$('Mod').each(function () {
if ($(this).attr('name') !== undefined) {
state.raw.mods.push({
name: $(this).text(),
short_name: $(this).attr('name'),
author: $(this).attr('author'),
version: $(this).attr('version'),
hash: $(this).attr('hash')
})
}
})
state.version = serverInfo.attr('version')
// TODO: Add state.raw
}
}