UNPKG

osu-api-extended

Version:

Advanced osu! api wrapper cover all V2 and V1 endpoints, and provide useful tools

141 lines (140 loc) 5.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const languages = ['any', 'other', 'english', 'japanese', 'chinese', 'instrumental', 'korean', 'french', 'german', 'swedish', 'italian']; const genres = ['any', 'unspecified', 'video game', 'anime', 'rock', 'pop', 'other', 'novelty', 'other', 'hip hop', 'electronic']; const modes = ['std', 'taiko', 'ctb', 'mania']; const status_name = (id) => { switch (id) { case -2: return 'graveyard'; case -1: return 'WIP'; case 0: return 'pending'; case 1: return 'ranked'; case 2: return 'approved'; case 3: return 'qualified'; case 4: return 'loved'; default: return 'undefined'; } }; const parse = (num, amount) => parseFloat(Number(num).toFixed(amount)); const name = (data) => { const info = { id: { set: +data[0].beatmapset_id, diff: +data[0].beatmap_id, }, date: { submit: data[0].submit_date, approved: data[0].approved_date, update: data[0].last_update, }, metadata: { artist: { original: data[0].artist, unicode: data[0].artist_unicode, }, title: { original: data[0].title, unicode: data[0].title_unicode, }, creator: { id: +data[0].creator_id, name: data[0].creator, }, favs: +data[0].favourite_count, rating: parseFloat(Number(data[0].rating).toFixed(2)), source: data[0].source, genre_id: { id: +data[0].genre_id, name: genres[+data[0].genre_id], }, language_id: { id: +data[0].language_id, name: languages[+data[0].genre_id], }, tags: data[0].tags, }, status: { id: +data[0].approved, name: status_name(+data[0].approved), }, difficulties: [], misc: { download_unavailable: !!data[0].download_unavailable, audio_unavailable: !!data[0].audio_unavailable, storyboard: !!data[0].storyboard, video: !!data[0].video, packs: data[0].packs, bg: { full: `https://assets.ppy.sh/beatmaps/${data[0].beatmapset_id}/covers/fullsize.jpg`, raw: `https://assets.ppy.sh/beatmaps/${data[0].beatmapset_id}/covers/raw.jpg`, slim: { 1: `https://assets.ppy.sh/beatmaps/${data[0].beatmapset_id}/covers/slimcover.jpg`, 2: `https://assets.ppy.sh/beatmaps/${data[0].beatmapset_id}/covers/slimcover@2x.jpg`, }, cover: { 1: `https://assets.ppy.sh/beatmaps/${data[0].beatmapset_id}/covers/cover.jpg`, 2: `https://assets.ppy.sh/beatmaps/${data[0].beatmapset_id}/covers/cover@2x.jpg`, }, card: { 1: `https://assets.ppy.sh/beatmaps/${data[0].beatmapset_id}/covers/card.jpg`, 2: `https://assets.ppy.sh/beatmaps/${data[0].beatmapset_id}/covers/card@2x.jpg`, }, list: { 1: `https://assets.ppy.sh/beatmaps/${data[0].beatmapset_id}/covers/list.jpg`, 2: `https://assets.ppy.sh/beatmaps/${data[0].beatmapset_id}/covers/list@2x.jpg`, }, }, }, }; for (let i = 0; i < data.length; i++) { const d = data[i]; const obj = { id: +d.beatmap_id, diff: d.version, mode: { id: +d.mode, name: modes[+d.mode], }, file_md5: d.file_md5, stats: { star: { pure: parse(d.difficultyrating, 2), aim: parse(d.diff_aim, 2), speed: parse(d.diff_speed, 2), }, ar: parse(d.diff_approach, 2), od: parse(d.diff_overall, 2), cs: parse(d.diff_size, 2), hp: parse(d.diff_drain, 2), bpm: { avg: +d.bpm, }, combo: +d.max_combo, time: { full: +d.total_length, drain: +d.hit_length, }, objects: { all: +d.count_normal + +d.count_slider + +d.count_spinner, circles: +d.count_normal, sliders: +d.count_slider, spinners: +d.count_spinner, }, }, plays: +d.playcount, pass: +d.passcount, }; info.difficulties.push(obj); } ; return info; }; exports.default = name;