koishi-plugin-beatsaber-bot
Version:
一个 用于 BeatSaber 的 koishi Bot 插件
63 lines (62 loc) • 3.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SubscribeCmd = exports.JoinSubscribeCmd = exports.UnSubscribeCmd = exports.LeaveSubscribeCmd = void 0;
const koishi_1 = require("koishi");
const alert_1 = require("./alert");
const beatleader_1 = require("./beatleader");
const beatsaver_1 = require("./beatsaver");
var subleave_1 = require("./subleave");
Object.defineProperty(exports, "LeaveSubscribeCmd", { enumerable: true, get: function () { return subleave_1.LeaveSubscribeCmd; } });
var unsubscribe_1 = require("./unsubscribe");
Object.defineProperty(exports, "UnSubscribeCmd", { enumerable: true, get: function () { return unsubscribe_1.UnSubscribeCmd; } });
var subjoin_1 = require("./subjoin");
Object.defineProperty(exports, "JoinSubscribeCmd", { enumerable: true, get: function () { return subjoin_1.JoinSubscribeCmd; } });
function SubscribeCmd(ctx, cfg, render, api, logger) {
const subcmd = ctx
.command('bsbot.subscribe')
.alias('bbsub')
.userFields(['id'])
.option('type', '<type:string>')
.action(async ({ session, options }, input) => {
// check admin permission
if (options.type === "beatsaver-alert") {
return (0, alert_1.alert)(ctx, api, { session, options }, input, logger);
}
if (options.type === "beatsaver") {
return (0, beatsaver_1.beatsaver)(ctx, api, { session, options }, input);
}
if (options.type === "beatleader") {
return (0, beatleader_1.beatleader)(ctx, api, { session, options }, input);
}
const uid = session.user.id;
const jointable = ctx.database.join(['BSBotSubscribe', 'BSSubscribeMember']);
const rows = await jointable.where(row => koishi_1.$.and(koishi_1.$.eq(row.BSBotSubscribe.id, row.BSSubscribeMember.subscribeId), koishi_1.$.eq(row.BSBotSubscribe.channelId, session.channelId)))
.groupBy(['BSBotSubscribe.id'], {
subscribe: row => row.BSBotSubscribe,
members: row => koishi_1.$.count(row.BSSubscribeMember),
me: row => koishi_1.$.in(uid, koishi_1.$.array(row.BSSubscribeMember.memberUid)),
})
.execute();
if (rows.length < 1) {
session.sendQuote(session.text('commands.bsbot.subscribe.info.none'));
return;
}
let text = session.text('commands.bsbot.subscribe.info.header');
for (const row of rows) {
text += session.text('commands.bsbot.subscribe.info.body-item', {
type: row.subscribe.type,
cnt: row.members
});
if (row.me) {
text += session.text('commands.bsbot.subscribe.info.body-item-include-you');
}
text += '\n\n';
}
session.sendQueued((0, koishi_1.h)('message', [(0, koishi_1.h)('quote', { id: session.messageId }), text]));
});
return {
key: 'subscribe',
cmd: subcmd
};
}
exports.SubscribeCmd = SubscribeCmd;