UNPKG

koishi-plugin-kbot

Version:
192 lines (191 loc) 8.67 kB
"use strict"; 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;