UNPKG

node-osu

Version:

A library for interacting with the osu api

84 lines (75 loc) 2.25 kB
const { getNumeric } = require('../utils.js'); const Event = require('./Event.js'); /** * A user * @prop {String} id * @prop {String} name * @prop {Object} counts * @prop {String|Number} counts.300 * @prop {String|Number} counts.100 * @prop {String|Number} counts.50 * @prop {String|Number} counts.SSH * @prop {String|Number} counts.SS * @prop {String|Number} counts.SH * @prop {String|Number} counts.S * @prop {String|Number} counts.A * @prop {String|Number} counts.plays * @prop {Object} scores * @prop {String|Number} scores.ranked * @prop {String|Number} scores.total * @prop {Object} pp * @prop {String|Number} pp.raw * @prop {String|Number} pp.rank * @prop {String|Number} pp.countryRank * @prop {String} country * @prop {String|Number} level * @prop {String|Number} accuracy * @prop {String|Number} secondsPlayed * @prop {String} raw_joinDate * @prop {Event[]} events * @prop {String} accuracyFormatted * @prop {Date} joinDate */ class User { constructor(config, data) { const num = getNumeric(config.parseNumeric); this.id = data.user_id; this.name = data.username; this.counts = { '300': num(data.count300), '100': num(data.count100), '50': num(data.count50), 'SSH': num(data.count_rank_ssh), 'SS': num(data.count_rank_ss), 'SH': num(data.count_rank_sh), 'S': num(data.count_rank_s), 'A': num(data.count_rank_a), 'plays': num(data.playcount) }; this.scores = { ranked: num(data.ranked_score), total: num(data.total_score) }; this.pp = { raw: num(data.pp_raw), rank: num(data.pp_rank), countryRank: num(data.pp_country_rank) }; this.country = data.country; this.level = num(data.level); this.accuracy = num(data.accuracy); this.secondsPlayed = num(data.total_seconds_played); this.raw_joinDate = data.join_date; this.events = data.events.map(ev => new Event(config, ev)); } get joinDate() { if (this._joinDate !== undefined) return this._joinDate; this._joinDate = new Date(this.raw_joinDate + ' UTC'); return this._joinDate; } get accuracyFormatted() { return parseFloat(this.accuracy).toFixed(2) + '%'; } } module.exports = User;