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
JavaScript
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;
;