UNPKG

koishi-plugin-beatsaber-bot

Version:

一个 用于 BeatSaber 的 koishi Bot 插件

61 lines (60 loc) 3.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BeatLeaderWS = void 0; const koishi_1 = require("koishi"); const bl_filter_1 = require("./bl-filter"); const types_1 = require("../types"); function BeatLeaderWS(ctx, cfg, render, logger) { const ws = ctx.http.ws("wss://sockets.api.beatleader.xyz/scores"); ws.on('open', (event) => { logger.info("BeatleaderWS opened"); }); ws.on('message', async (message, isBinary) => { try { const data = JSON.parse(message.toString()); const playerId = data.player.id; const ok = (0, bl_filter_1.BeatLeaderFilter)(data, ...cfg.BLScoreFilters); if (!ok) { return; } // logger.info('Received beatleader message',data.id, data.player.id); const selection = ctx.database.join(['BSSubscribeMember', 'BSRelateOAuthAccount', 'user', 'BSBotSubscribe']); const subscribe = await selection.where(row => koishi_1.$.and(koishi_1.$.eq(row.BSBotSubscribe.enable, true), koishi_1.$.eq(row.user.id, row.BSRelateOAuthAccount.uid), koishi_1.$.eq(row.user.id, row.BSSubscribeMember.memberUid), koishi_1.$.eq(row.BSSubscribeMember.subscribeId, row.BSBotSubscribe.id), koishi_1.$.eq(row.BSRelateOAuthAccount.platformUid, playerId), koishi_1.$.eq(row.BSBotSubscribe.type, 'beatleader'), koishi_1.$.eq(row.BSRelateOAuthAccount.platform, 'beatleader'))).execute(); const subscribes = subscribe.map(item => ({ sub: item.BSBotSubscribe, member: item.BSSubscribeMember, user: item.user, account: item.BSRelateOAuthAccount })); // .filter(item=> { // const channelFilters = item.sub.data as BLScoreFilter[] // const memberFilters = item.member.subscribeData // return BeatLeaderFilter(data, ...channelFilters, ...memberFilters) // }) for (const item of subscribes) { const bot = ctx.bots[`${item.sub.platform}:${item.sub.selfId}`]; if (!bot) continue; const img = await render.renderScore(data.id.toString(), types_1.Platform.BL); const res = await ctx.database.get('binding', { platform: item.sub.platform, aid: item.member.memberUid }); bot.sendMessage(item.sub.channelId, (0, koishi_1.h)('message', [ "恭喜", (0, koishi_1.h)('at', { id: res[0].pid, }), `刚刚在谱面「${data.leaderboard.song.name}」中打出了 ${(data.accuracy * 100).toFixed(2)}% 的好成绩` ])); bot.sendMessage(item.sub.channelId, (0, koishi_1.h)('message', [img])); } } catch (err) { logger.info('err', err); } }); ws.on('close', (evt) => { logger.info("BeatleaderWS closed"); }); return ws; } exports.BeatLeaderWS = BeatLeaderWS;