UNPKG

osu-api-extended

Version:

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

180 lines (179 loc) 9.78 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.forums_topics_actions = void 0; const request_1 = require("../../utility/request"); const handleErrors_1 = require("../../utility/handleErrors"); const auth_1 = require("../../utility/auth"); const forums_topics_actions = (params, addons) => __awaiter(void 0, void 0, void 0, function* () { var _a, _b, _c, _d, _e, _f, _g, _h; if (auth_1.credentials.type != 'lazer' && auth_1.credentials.type != 'cli') { return (0, handleErrors_1.handleErrors)(new Error(`Login via lazer or cli to use this endpoint`)); } ; if (auth_1.credentials.type == 'cli' && !auth_1.credentials.scopes.includes('forum.write')) { return (0, handleErrors_1.handleErrors)(new Error(`Requires "forum.write" scope`)); } ; let object = {}; const body = []; let urls = []; let methods = []; const fields = []; switch (params.type) { case 'create': if ((params === null || params === void 0 ? void 0 : params.forum_id) == null) { return (0, handleErrors_1.handleErrors)(new Error(`Specify forum id`)); } ; if ((params === null || params === void 0 ? void 0 : params.title) == null) { return (0, handleErrors_1.handleErrors)(new Error(`Specify title`)); } ; if ((params === null || params === void 0 ? void 0 : params.message) == null) { return (0, handleErrors_1.handleErrors)(new Error(`Specify message`)); } ; urls.push(`https://osu.ppy.sh/api/v2/forums/topics`); methods.push('POST'); if ((params === null || params === void 0 ? void 0 : params.forum_id) != null) object['forum_id'] = params.forum_id; if ((params === null || params === void 0 ? void 0 : params.title) != null) object['title'] = params.title; if ((params === null || params === void 0 ? void 0 : params.message) != null) object['body'] = params.message; if ((params === null || params === void 0 ? void 0 : params.enable_poll) != null) object['with_poll'] = params.enable_poll; if ((params === null || params === void 0 ? void 0 : params.enable_poll) != true) { body.push(object); break; } ; if (((_a = params === null || params === void 0 ? void 0 : params.poll) === null || _a === void 0 ? void 0 : _a.allow_vote_change) != null) object['forum_topic_poll[vote_change]'] = params.poll.allow_vote_change; if (((_b = params === null || params === void 0 ? void 0 : params.poll) === null || _b === void 0 ? void 0 : _b.hide_results) != null) object['forum_topic_poll[hide_results]'] = params.poll.hide_results; if (((_c = params === null || params === void 0 ? void 0 : params.poll) === null || _c === void 0 ? void 0 : _c.title) != null) object['forum_topic_poll[title]'] = params.poll.title; if (((_d = params === null || params === void 0 ? void 0 : params.poll) === null || _d === void 0 ? void 0 : _d.options) != null) object['forum_topic_poll[options]'] = params.poll.options; if (((_e = params === null || params === void 0 ? void 0 : params.poll) === null || _e === void 0 ? void 0 : _e.max_votes_per_user) != null) object['forum_topic_poll[max_options]'] = params.poll.max_votes_per_user; if (((_f = params === null || params === void 0 ? void 0 : params.poll) === null || _f === void 0 ? void 0 : _f.duration_days) != null) object['forum_topic_poll[length_days]'] = params.poll.duration_days; body.push(object); break; case 'reply': if ((params === null || params === void 0 ? void 0 : params.post_id) == null) { return (0, handleErrors_1.handleErrors)(new Error(`Specify post id`)); } ; if ((params === null || params === void 0 ? void 0 : params.message) == null || ((_g = params === null || params === void 0 ? void 0 : params.message) === null || _g === void 0 ? void 0 : _g.trim()) == '') { return (0, handleErrors_1.handleErrors)(new Error(`Specify message`)); } ; urls.push(`https://osu.ppy.sh/api/v2/forums/topics/${params.post_id}/reply`); methods.push('POST'); if (params === null || params === void 0 ? void 0 : params.message) object['body'] = params.message; body.push(object); break; case 'edit_post': if ((params === null || params === void 0 ? void 0 : params.post_id) == null) { return (0, handleErrors_1.handleErrors)(new Error(`Specify post id`)); } ; if ((params === null || params === void 0 ? void 0 : params.message) == null) { return (0, handleErrors_1.handleErrors)(new Error(`Specify message`)); } ; urls.push(`https://osu.ppy.sh/api/v2/forums/posts/${params.post_id}`); methods.push('PATCH'); if (params === null || params === void 0 ? void 0 : params.message) object['body'] = params.message; body.push(object); break; case 'edit_topic': if ((params === null || params === void 0 ? void 0 : params.topic_id) && ((params === null || params === void 0 ? void 0 : params.title) != null && (params === null || params === void 0 ? void 0 : params.title) != '')) { if ((params === null || params === void 0 ? void 0 : params.topic_id) == null) { return (0, handleErrors_1.handleErrors)(new Error(`Specify topic id`)); } ; if ((params === null || params === void 0 ? void 0 : params.title) == null || ((_h = params === null || params === void 0 ? void 0 : params.title) === null || _h === void 0 ? void 0 : _h.trim()) == '') { return (0, handleErrors_1.handleErrors)(new Error(`Specify title`)); } ; urls.push(`https://osu.ppy.sh/api/v2/forums/topics/${params.topic_id}`); methods.push('PUT'); if (params === null || params === void 0 ? void 0 : params.title) object = { forum_topic: { 'topic_title': params.title, }, }; body.push(object); fields.push('topic'); object = {}; } ; if ((params === null || params === void 0 ? void 0 : params.post_id) && ((params === null || params === void 0 ? void 0 : params.message) != null && (params === null || params === void 0 ? void 0 : params.message) != '')) { if ((params === null || params === void 0 ? void 0 : params.post_id) == null) { return (0, handleErrors_1.handleErrors)(new Error(`Specify post id`)); } ; if ((params === null || params === void 0 ? void 0 : params.message) == null) { return (0, handleErrors_1.handleErrors)(new Error(`Specify message`)); } ; urls.push(`https://osu.ppy.sh/api/v2/forums/posts/${params.post_id}`); methods.push('PUT'); if (params === null || params === void 0 ? void 0 : params.message) object['body'] = params.message; body.push(object); fields.push('post'); object = {}; } ; break; default: return (0, handleErrors_1.handleErrors)(new Error(`Unsupported type: ${params.type}`)); } ; const results = []; for (let i = 0; i < urls.length; i++) { const url = urls[i]; const data = yield (0, request_1.request)(url, { method: methods[i], // params: object, // params: body[i], data: JSON.stringify(body[i]), addons, }); if (data.error) { results.push((0, handleErrors_1.handleErrors)(new Error(data.error))); continue; } ; results.push(data); } ; if (params.type == 'edit_topic') { let result = fields.map((r, index) => ({ [r]: results[index] })); if (result[0].error) return result[0].error; return result[0].topic; } ; if (results[0].error) return results[0].error; return results[0]; }); exports.forums_topics_actions = forums_topics_actions;