UNPKG

koishi-plugin-beatsaber-bot

Version:

一个 用于 BeatSaber 的 koishi Bot 插件

116 lines (115 loc) 5.64 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.RenderService = void 0; const types_1 = require("../../types"); const remote_1 = require("./remote"); const result_1 = require("./result"); const qrcode_1 = __importDefault(require("./utils/qrcode")); const renderImg_1 = require("./renderImg"); const noop = () => { }; class RenderService { constructor(ctx, config, api) { this._renderRank = async (accountId, platform, api, renderOpts) => { if (renderOpts.type == 'remote') { let remoteP = platform == types_1.Platform.SS ? 'score-saber' : 'beat-leader'; return (0, remote_1.renderRemoteRank)(accountId, remoteP, renderOpts); } if (platform == types_1.Platform.BL) { const { scores, userInfo } = await api.BeatLeader.getPlayerScoresWithUserInfo(accountId); return (0, result_1.renderBLPlayerImg)(renderOpts.puppeteer, scores, userInfo, renderOpts.onRenderStart, renderOpts.onRenderError); } const { scores, userInfo } = await api.ScoreSaber.getPlayerRecentScoreWithUserInfo(accountId); return (0, result_1.renderSSPlayerImg)(renderOpts.puppeteer, scores, userInfo, renderOpts.onRenderStart, renderOpts.onRenderError); }; this._renderScore = async (scoreId, platform, api, renderOpts) => { let remoteP = 'beat-leader'; if (renderOpts.type == 'remote') { let remoteP = platform == types_1.Platform.SS ? 'score-saber' : 'beat-leader'; return (0, remote_1.renderRemoteScore)(scoreId, remoteP, renderOpts); } const { score, statistic, bsor, bsMap } = await api.BeatLeader .withRetry(3) .onRetry((times, e) => { console.log(`retrying ${times} due to ${e}`); }) .getScoreAndBSMapByScoreId(scoreId) .catch(e => { throw Error('渲染错误'); }); const qrcodeUrl = await (0, qrcode_1.default)(`https://replay.beatleader.xyz/?scoreId=${score.id}`); return (0, result_1.renderBLScoreImg)(renderOpts.puppeteer, score, bsMap, statistic, bsor, qrcodeUrl, renderOpts.onRenderStart, renderOpts.onRenderError); }; this._renderMap = async (bsMap, renderOpts) => { if (renderOpts.type == 'remote') { for (let i = 0; i < 3; i++) { const image = await (0, remote_1.renderRemoteMap)(bsMap.id, renderOpts); if (image) { return image; } } } const previewQrUrl = await (0, qrcode_1.default)(`https://allpoland.github.io/ArcViewer/?id=${bsMap.id}`); const bsMapQrUrl = await (0, qrcode_1.default)(`https://beatsaver.com/maps/${bsMap.id}`); return await (0, result_1.renderBSMapImg)(renderOpts.puppeteer, bsMap, bsMapQrUrl, previewQrUrl, renderOpts.onRenderStart, renderOpts.onRenderError); }; this.puppeteer = ctx.puppeteer; this.config = config; this.api = api; this.baseConfig = { puppeteer: this.puppeteer, renderBaseURL: this.config.remoteRenderURL, waitTimeout: this.config.rankWaitTimeout, }; } static create(ctx, config, api) { // let ins = new RenderService(ctx,config,api) // const proxied = new Proxy<RenderService>(ins, { // get(target, prop, receiver) { // const member = target[prop]; // if(member) { // return createProxiedAPIService(member) // } // return undefined // }, // set(target, property, value, receiver) { // return false // } // }) // return proxied return new RenderService(ctx, config, api); } async renderRank(accountId, platform, onRenderStart, onRenderError, type = this.config.renderMode) { return this._renderRank(accountId, platform, this.api, { ...this.baseConfig, type, onRenderError, onRenderStart }); } async renderScore(scoreId, platform, onRenderStart, onRenderError, type = this.config.renderMode) { return this._renderScore(scoreId, platform, this.api, { ...this.baseConfig, type, onRenderError, onRenderStart }); } async renderMapById(mapId, onRenderStart, onRenderError, type = this.config.renderMode) { const map = await this.api.BeatSaver.searchMapById(mapId); return this._renderMap(map, { ...this.baseConfig, type, onRenderError, onRenderStart }); } async renderMap(map, onRenderStart = noop, onRenderError = noop, type = this.config.renderMode) { return this._renderMap(map, { ...this.baseConfig, type, onRenderError, onRenderStart }); } async renderLBScore() { return (0, renderImg_1.screenshotTmp)(this.puppeteer, 'https://aiobs.ktlab.io/tmp/lb/score', '#render-result', () => { }, 8000); } async renderLBHitCount() { return (0, renderImg_1.screenshotTmp)(this.puppeteer, 'https://aiobs.ktlab.io/tmp/lb/hitcnt', '#render-result', () => { }, 8000); } } exports.RenderService = RenderService; class RenderHelper { constructor() { } onStart(func) { this._onStart = func; return this; } onRenderError(func) { this._onRenderError = func; return this; } }