koishi-plugin-kbot
Version:
A muti-function qq bot for koishi
192 lines (191 loc) • 8.67 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.bilibiliCookie = exports.bilibiliRefreshVup = exports.bilibiliDanmuCheck = exports.bilibiliVupCheck = void 0;
/*
* @Author: Kabuda-czh
* @Date: 2023-02-06 17:22:33
* @LastEditors: Kabuda-czh
* @LastEditTime: 2023-07-24 13:19:56
* @FilePath: \KBot-App\plugins\kbot\src\plugins\bilibili\dynamic\composition\common.tsx
* @Description:
*
* Copyright (c) 2023 by Kabuda-czh, All Rights Reserved.
*/
const fs = __importStar(require("node:fs"));
const __1 = require("..");
const utils_1 = require("../../utils");
const utils_2 = require("../../../utils");
const config_1 = __importDefault(require("../../../../config"));
const enum_1 = require("../../enum");
const render_1 = require("./render");
async function bilibiliVupCheck({ session }, up, _list, ctx, config) {
const { uid } = up;
try {
const { bilibiliVupPath, bilibiliCookiePath, renderFontsDir } = config_1.default.getInstance(ctx.baseDir).getGeneratePathData();
if (ctx.puppeteer) {
const searchUserCardInfo = await (0, utils_1.getMemberCard)(ctx.http, uid);
const needLoadFontList = await (0, utils_2.getFontsList)(renderFontsDir, __1.logger);
let vdb, cookie;
try {
vdb = JSON.parse(await fs.promises.readFile(bilibiliVupPath, 'utf-8'));
}
catch (e) {
__1.logger.error(`Failed to get vup info. ${e}`);
throw new Error('vtb信息未找到, 请使用 --re 或 --refresh 更新vup信息');
}
try {
cookie = JSON.parse(await fs.promises.readFile(bilibiliCookiePath, 'utf-8'));
}
catch (e) {
__1.logger.error(`Failed to get cookie info. ${e}`);
throw new Error('cookie信息未找到, 请使用 --ck 或 --cookie 更新cookie信息');
}
let vups = vdb.filter(vup => searchUserCardInfo.card.attentions.includes(vup.mid));
const vupsLength = vups.length;
const cookieString = Object.entries(cookie)
.map(([key, value]) => `${key}=${value}`)
.join('; ');
const medals = await (0, utils_1.getMedalWall)(ctx.http, uid, cookieString);
const medalArray = medals.data.list;
medalArray.sort((a, b) => b.medal_info.level - a.medal_info.level);
const frontVups = [];
const medalMap = {};
for (const medal of medalArray) {
const up = {
mid: medal.medal_info.target_id,
uname: medal.target_name,
};
frontVups.push(up);
medalMap[medal.medal_info.target_id] = medal;
}
vups = frontVups.concat(vups);
vups = frontVups.concat(vups.slice(frontVups.length));
for (let i = frontVups.length; i < vups.length; i++) {
if (medalMap[vups[i].mid]) {
vups.splice(i, 1);
i--;
}
}
if (vups.length > 50)
await session.send('成分太多了, 只显示前50个');
const image = await (0, render_1.renderVup)(searchUserCardInfo, vups, vupsLength, medalMap, needLoadFontList);
await session.send(image);
}
else {
return '未安装/启用puppeteer, 无法渲染成分信息!';
}
}
catch (e) {
if (['ECONNREFUSED', 'ECONNRESET'].includes(e.code))
return '成分获取失败: 网络连接超时';
__1.logger.error(`Failed to get vup info. ${e}`);
return `成分获取失败: ${e.message}`;
}
}
exports.bilibiliVupCheck = bilibiliVupCheck;
async function bilibiliDanmuCheck({ session }, up, _list, ctx, _config) {
const { uid } = up;
try {
if (ctx.puppeteer) {
const { renderFontsDir } = config_1.default.getInstance(ctx.baseDir).getGeneratePathData();
const searchUserCardInfo = await (0, utils_1.getMemberCard)(ctx.http, uid);
const needLoadFontList = await (0, utils_2.getFontsList)(renderFontsDir, __1.logger);
let danmuku = await (0, utils_1.getDanmukuData)(ctx.http, enum_1.BilibiliDynamicType.DanmakuAPI, uid);
if (!(Object.prototype.toString.call(danmuku) === '[object object]'))
danmuku = await (0, utils_1.getDanmukuData)(ctx.http, enum_1.BilibiliDynamicType.DanmakuAPI2, uid);
const image = await (0, render_1.renderDanmu)(searchUserCardInfo, danmuku, needLoadFontList);
await session.send(image);
}
else {
return '未安装/启用puppeteer, 无法渲染弹幕信息!';
}
}
catch (e) {
if (['ECONNREFUSED', 'ECONNRESET'].includes(e.code))
return '弹幕获取失败: 网络连接超时';
__1.logger.error(`Failed to get danmu info. ${e}`);
return `弹幕获取失败: ${e.message}`;
}
}
exports.bilibiliDanmuCheck = bilibiliDanmuCheck;
async function bilibiliRefreshVup(_, _up, _list, ctx, _config) {
const vtbURLs = [
'https://api.vtbs.moe/v1/short',
'https://api.tokyo.vtbs.moe/v1/short',
'https://vtbs.musedash.moe/v1/short',
];
try {
const { bilibiliDir, bilibiliVupPath } = config_1.default.getInstance(ctx.baseDir).getGeneratePathData();
const vtbFetchs = await Promise.allSettled(vtbURLs.map(url => ctx.http.axios(url)
.then(res => res.data)));
const vtbDatas = vtbFetchs.filter(res => res.status === 'fulfilled');
if (vtbDatas.length === 0)
return 'vup 获取失败';
const vtbs = [];
vtbDatas.forEach((res) => {
vtbs.push(...res.value);
});
if (!(await fs.promises.stat(bilibiliDir)).isDirectory())
await fs.promises.mkdir(bilibiliDir, { recursive: true });
await fs.promises.writeFile(bilibiliVupPath, JSON.stringify(vtbs));
return 'vup 更新成功';
}
catch (err) {
if (['ECONNREFUSED', 'ECONNRESET'].includes(err.code))
return 'vup 更新失败: 网络连接超时';
__1.logger.error(`Failed to update vup. ${err}`);
return `vup 更新失败: ${err.message}`;
}
}
exports.bilibiliRefreshVup = bilibiliRefreshVup;
async function bilibiliCookie({ session, options, }, _up, _list, ctx) {
try {
const { bilibiliDir, bilibiliCookiePath } = config_1.default.getInstance(ctx.baseDir).getGeneratePathData();
if (!options.cookie)
return '请提供cookie';
const cookieRegex = /([^=;\s]+)=([^=;\s]*)/g;
if (!cookieRegex.test(session.content))
return 'cookie 格式错误';
const cookies = session.content.match(cookieRegex);
const cookieJson = {};
cookies.forEach((cookie) => {
const [key, value] = cookie.split('=');
cookieJson[key] = value;
});
if (!(await fs.promises.stat(bilibiliDir)).isDirectory())
await fs.promises.mkdir(bilibiliDir, { recursive: true });
await fs.promises.writeFile(bilibiliCookiePath, JSON.stringify(cookieJson));
return 'cookie 更新成功';
}
catch (err) {
__1.logger.error(`Failed to update cookie. ${err}`);
return `cookie 更新失败: ${err}`;
}
}
exports.bilibiliCookie = bilibiliCookie;