UNPKG

nodesu

Version:
53 lines (47 loc) 2.06 kB
'use strict'; const Component = require('./Component') , ApiConstants = require('../Constants').API , ReplayData = require('../struct/ReplayData'); /** * Replay-related API component * @memberof module:Components * @example * api.replay * .get('1110141', '4222959', Nodesu.Mode.osu) * .then(console.log); */ class ReplayComponent extends Component { /** * Gets the replay. - If ratelimiting is enabled in the Client, this is rate limited under a different bucket with the more stricter conditions that is forced upon this endpoint! * @param {String} beatmapId The beatmap ID of the map. * @param {String} userId The user that played that beatmap. * @param {Mode} mode The gamemode of the play. * @param {LookupType} [lookupType] The lookup type, id/string to lookup the user. * @param {Mods} [mods] The bitwise combination for the mods. * @return {Promise<Object|ReplayData>} An object with the `content` LZMA-stream data encoded as the encoding specified in `object`. If custom classes are enabled, a buffer of the encoded data will be provided by the `content` property. */ get(beatmapId, userId, mode, lookupType, mods) { if (!this.api.disableRateLimiting) { // needs to be cleaned up just like in the requester return new Promise((resolve, reject) => { this.api.ratelimiting.replayBucket.removeTokens(1, () => { this._get(beatmapId, userId, mode, lookupType, mods) .then(resolve) .catch(reject); }); }); } return this._get(beatmapId, userId, mode, lookupType, mods); } _get(beatmapId, userId, mode, type, mods) { let options = { b: beatmapId, u: userId, m: mode, type: type, mods: mods }; return this.api.requester.get(ApiConstants.REPLAY_GET, options, true, false, ReplayData); } } module.exports = ReplayComponent;