diff --git a/services/bstats/bstats-players.service.js b/services/bstats/bstats-players.service.js new file mode 100644 index 0000000000000000000000000000000000000000..393bfb50bee868659046b6733b8f668544463469 --- /dev/null +++ b/services/bstats/bstats-players.service.js @@ -0,0 +1,70 @@ +'use strict' + +const BaseJsonService = require('../base-json') + +const Joi = require('joi') +const schema = Joi.array() + .items(Joi.array().items([Joi.number().required(), Joi.number().required()])) + .required() + +module.exports = class BStatsPlayers extends BaseJsonService { + static get route() { + return { + base: 'bstats/players', + pattern: ':pluginid', + } + } + + static get defaultBadgeData() { + return { + label: 'players', + color: 'blue', + } + } + + async handle({ pluginid }) { + const json = await this.fetch({ pluginid }) + const { players } = this.transform({ json }) + return this.constructor.render({ players }) + } + + transform({ json }) { + const players = json[0][1] + return { players } + } + + async fetch({ pluginid }) { + const url = `https://bstats.org/api/v1/plugins/${pluginid}/charts/players/data` + + return this._requestJson({ + schema, + options: { + qs: { + maxElements: 1, + }, + }, + url, + }) + } + + static render({ players }) { + return { + message: players, + } + } + + static get category() { + return 'other' + } + static get examples() { + return [ + { + title: 'bStats Players', + namedParams: { + pluginid: '1', + }, + staticPreview: this.render({ players: 74299 }), + }, + ] + } +} diff --git a/services/bstats/bstats-players.tester.js b/services/bstats/bstats-players.tester.js new file mode 100644 index 0000000000000000000000000000000000000000..e74890abf9aa120dfd7b3a7e7ebf65259197a6e3 --- /dev/null +++ b/services/bstats/bstats-players.tester.js @@ -0,0 +1,14 @@ +'use strict' + +const Joi = require('joi') + +const t = (module.exports = require('../create-service-tester')()) + +t.create('Players') + .get('/1.json') + .expectJSONTypes( + Joi.object().keys({ + name: 'players', + value: Joi.number(), + }) + ) diff --git a/services/bstats/bstats-servers.service.js b/services/bstats/bstats-servers.service.js new file mode 100644 index 0000000000000000000000000000000000000000..2cdb9b45153b0c804dabfea819ba87eeee31a033 --- /dev/null +++ b/services/bstats/bstats-servers.service.js @@ -0,0 +1,70 @@ +'use strict' + +const BaseJsonService = require('../base-json') + +const Joi = require('joi') +const schema = Joi.array() + .items(Joi.array().items([Joi.number().required(), Joi.number().required()])) + .required() + +module.exports = class BStatsServers extends BaseJsonService { + static get route() { + return { + base: 'bstats/servers', + pattern: ':pluginid', + } + } + + static get defaultBadgeData() { + return { + label: 'servers', + color: 'blue', + } + } + + async handle({ pluginid }) { + const json = await this.fetch({ pluginid }) + const { servers } = this.transform({ json }) + return this.constructor.render({ servers }) + } + + transform({ json }) { + const servers = json[0][1] + return { servers } + } + + async fetch({ pluginid }) { + const url = `https://bstats.org/api/v1/plugins/${pluginid}/charts/servers/data` + + return this._requestJson({ + schema, + options: { + qs: { + maxElements: 1, + }, + }, + url, + }) + } + + static render({ servers }) { + return { + message: servers, + } + } + + static get category() { + return 'other' + } + static get examples() { + return [ + { + title: 'bStats Servers', + namedParams: { + pluginid: '1', + }, + staticPreview: this.render({ servers: 57479 }), + }, + ] + } +} diff --git a/services/bstats/bstats-servers.tester.js b/services/bstats/bstats-servers.tester.js new file mode 100644 index 0000000000000000000000000000000000000000..69daf9393efa3eff4b25bb0b85dec94d18e2d443 --- /dev/null +++ b/services/bstats/bstats-servers.tester.js @@ -0,0 +1,14 @@ +'use strict' + +const Joi = require('joi') + +const t = (module.exports = require('../create-service-tester')()) + +t.create('Servers') + .get('/1.json') + .expectJSONTypes( + Joi.object().keys({ + name: 'servers', + value: Joi.number(), + }) + )