koishi-plugin-kbot
Version:
A muti-function qq bot for koishi
256 lines (229 loc) • 13.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.renderDanmu = exports.renderVup = void 0;
const jsx_runtime_1 = require("@satorijs/element/jsx-runtime");
/*
* @Author: Kabuda-czh
* @Date: 2023-02-11 15:12:57
* @LastEditors: Kabuda-czh
* @LastEditTime: 2023-06-07 10:04:44
* @FilePath: \KBot-App\plugins\kbot\src\plugins\bilibili\dynamic\composition\render.tsx
* @Description:
*
* Copyright (c) 2023 by Kabuda-czh, All Rights Reserved.
*/
const utils_1 = require("../../../utils");
async function renderVup(searchUserCardInfo, vups, vupsLength, medalMap, needLoadFontList) {
const loadList = await (0, utils_1.loadFont)(needLoadFontList);
return (0, jsx_runtime_1.jsxs)("html", { children: [(0, jsx_runtime_1.jsx)("style", { children: `
* {
margin: 0;
padding: 0;
}
${loadList[0]}
.flex-cc {
display: flex;
align-items: center;
justify-content: center;
}
.uid {
color: #696969;
background-color: #DDDDDD;
border-radius: 2px;
font-size: 11px;
padding: 0 5px;
}
.medalBg {
background-color: #F6F6F6;
}
.padding-x5 {
padding: 0 5px;
}
#card {
font-size: 12px;
font-family: ${loadList[1]};
}
.header {
display: flex;
align-items: center;
}
.headerImg {
height: 120px;
width: 120px;
}
.info {
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
width: 100%;
margin: 0 10px;
font-size: 10px;
}
.info div {
display: flex;
align-items: center;
justify-content: flex-start;
gap: 10px;
width: 100%;
}
.vup {
display: flex;
flex-direction: column;
width: 100%;
}
.vupInfo {
display: flex;
align-items: center;
padding: 10px;
gap: 5px;
}
` }), (0, jsx_runtime_1.jsxs)("div", { id: "card", children: [(0, jsx_runtime_1.jsxs)("div", { class: "header", children: [(0, jsx_runtime_1.jsx)("img", { class: "headerImg", src: searchUserCardInfo.card.face }), (0, jsx_runtime_1.jsxs)("div", { class: "info", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("p", { children: searchUserCardInfo.card.name }), (0, jsx_runtime_1.jsx)("p", { class: "uid", children: searchUserCardInfo.card.mid })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("p", { style: "margin-right: 20px", children: ["\u7C89\u4E1D: ", searchUserCardInfo.card.fans] }), (0, jsx_runtime_1.jsxs)("p", { children: ["\u5173\u6CE8: ", searchUserCardInfo.card.attentions.length] })] }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("p", { children: ["\u7BA1\u4EBA\u75F4\u6210\u5206:\u00A0", (vupsLength
/ searchUserCardInfo.card.attentions.length * 100).toFixed(2), "% (", vupsLength, " / ", searchUserCardInfo.card.attentions.length, ")"] }) }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("p", { children: ["\u6CE8\u518C\u65E5\u671F: ", new Date(searchUserCardInfo.card.regtime * 1000).toLocaleString()] }) }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("p", { children: ["\u67E5\u8BE2\u65E5\u671F: ", new Date().toLocaleDateString()] }) })] })] }), (0, jsx_runtime_1.jsxs)("div", { class: "vup", children: [...vups.map((vup, index) => {
if (medalMap[vup.mid] && medalMap[vup.mid].medal_info.level) {
return (0, jsx_runtime_1.jsx)("div", { class: (index % 2) && 'medalBg', children: (0, jsx_runtime_1.jsxs)("div", { class: "vupInfo", children: [(0, jsx_runtime_1.jsx)("p", { children: vup.uname }), (0, jsx_runtime_1.jsx)("div", { class: "flex-cc uid", children: (0, jsx_runtime_1.jsx)("p", { children: vup.mid }) }), (0, jsx_runtime_1.jsxs)("div", { style: {
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
backgroundImage: `linear-gradient(to right, ${int2rgb(medalMap[vup.mid].medal_info.medal_color_start)}, ${int2rgb(medalMap[vup.mid].medal_info.medal_color_end)})`,
border: `1px solid ${int2rgb(medalMap[vup.mid].medal_info.medal_color_border)}`,
}, children: [(0, jsx_runtime_1.jsx)("p", { class: "padding-x5", style: {
color: '#FFF',
}, children: medalMap[vup.mid].medal_info.medal_name }), (0, jsx_runtime_1.jsx)("p", { class: "padding-x5", style: {
backgroundColor: '#FFF',
color: `${int2rgb(medalMap[vup.mid].medal_info.medal_color_border)}`,
}, children: medalMap[vup.mid].medal_info.level })] })] }) });
}
return null;
})] })] })] });
}
exports.renderVup = renderVup;
async function renderDanmu(searchUserCardInfo, danmukuData, needLoadFontList) {
const danmuMap = {
0: '普通消息',
1: '礼物',
2: '上舰',
3: 'Superchat',
4: '进入直播间',
5: '标题变动',
6: '分区变动',
7: '直播中止',
8: '直播继续',
};
const loadList = await (0, utils_1.loadFont)(needLoadFontList);
return (0, jsx_runtime_1.jsxs)("html", { children: [(0, jsx_runtime_1.jsx)("style", { children: `
* {
margin: 0;
padding: 0;
}
${loadList[0]}
#card {
font-size: 12px;
font-family: ${loadList[1]};
}
.user {
display: flex;
align-items: center;
}
.userFace, .upFace {
height: 100px;
width: 100px;
}
.uid {
color: #696969;
background-color: #DDDDDD;
border-radius: 2px;
font-size: 11px;
padding: 0 5px;
}
.userInfo {
display: flex;
flex-direction: column;
align-items: center;
gap: 5px;
width: 100%;
margin: 0 10px;
font-size: 10px;
}
.userInfo div {
display: flex;
align-items: center;
justify-content: flex-start;
gap: 10px;
width: 100%;
}
.danmu {
margin-top: 10px;
font-size: 8px;
}
.upData {
display: flex;
padding-left: 10px;
padding-right: 10px;
}
.roomData {
margin-left: 15px;
}
.danmuData {
margin-top: 3px;
}
.nameTitleColor {
color: rgb(24, 144, 255);
}
.redColor {
color: rgb(255, 0, 0);
}
.greenColor {
color: rgb(0, 128, 0);
}
` }), (0, jsx_runtime_1.jsxs)("div", { id: "card", children: [(0, jsx_runtime_1.jsxs)("div", { class: "user", children: [(0, jsx_runtime_1.jsx)("img", { class: "userFace", src: searchUserCardInfo.card.face }), (0, jsx_runtime_1.jsxs)("div", { class: "userInfo", children: [(0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("p", { children: searchUserCardInfo.card.name }), (0, jsx_runtime_1.jsx)("p", { class: "uid", children: searchUserCardInfo.card.mid })] }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("p", { style: "margin-right: 20px", children: ["\u7C89\u4E1D: ", searchUserCardInfo.card.fans] }), (0, jsx_runtime_1.jsxs)("p", { children: ["\u5173\u6CE8: ", searchUserCardInfo.card.attentions.length] })] }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("p", { children: ["\u9875\u7801 [0 / ", Math.floor((danmukuData.data.total - 1) / 5), "]"] }) }), (0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsxs)("p", { children: ["\u7F51\u9875\u94FE\u63A5: https://danmakus.com/user/", searchUserCardInfo.card.mid] }) })] })] }), (0, jsx_runtime_1.jsx)("div", { class: "danmukuDatas", children: danmukuData.data.data.map((item) => {
return (0, jsx_runtime_1.jsxs)("div", { class: "danmu", children: [(0, jsx_runtime_1.jsxs)("div", { class: "upData", children: [(0, jsx_runtime_1.jsx)("img", { class: "upFace", src: item.channel.faceUrl }), (0, jsx_runtime_1.jsxs)("div", { class: "roomData", children: [(0, jsx_runtime_1.jsxs)("p", { class: "nameTitleColor", children: ["\u6807\u9898: ", item.live.title] }), (0, jsx_runtime_1.jsxs)("p", { class: "nameTitleColor", children: ["\u4E3B\u64AD: ", item.channel.name] }), (0, jsx_runtime_1.jsxs)("p", { children: ["\u5F00\u59CB\u65F6\u95F4: ", new Date(item.live.startDate).toLocaleString()] }), (0, jsx_runtime_1.jsxs)("p", { children: ["\u7ED3\u675F\u65F6\u95F4: ", item.live.isFinish
? new Date(item.live.stopDate).toLocaleString()
: (0, jsx_runtime_1.jsx)("span", { class: "greenColor", children: "\u6B63\u5728\u76F4\u64AD" })] }), (0, jsx_runtime_1.jsxs)("p", { children: ["\u76F4\u64AD\u65F6\u957F: ", `${(((item.live.isFinish ? item.live.stopDate : Date.now()) - item.live.startDate) / 3600000).toFixed(1)}小时`] }), (0, jsx_runtime_1.jsxs)("p", { children: ["\u5F39\u5E55\u6570\u91CF: ", item.live.danmakusCount] }), (0, jsx_runtime_1.jsxs)("p", { children: ["\u89C2\u770B\u6B21\u6570: ", item.live.watchCount] }), (0, jsx_runtime_1.jsxs)("p", { children: ["\u6536\u76CA: ", (0, jsx_runtime_1.jsxs)("span", { class: "redColor", children: ["\uFFE5", item.live.totalIncome] })] })] })] }), (0, jsx_runtime_1.jsx)("div", { class: "danmuData", children: item.danmakus.map((danmu) => {
let messageInfo;
switch (danmu.type) {
case 0:
messageInfo = [(0, jsx_runtime_1.jsx)("span", { children: danmu.message })];
break;
case 1:
messageInfo = [
(0, jsx_runtime_1.jsx)("span", { children: danmuMap[danmu.type] }),
(0, jsx_runtime_1.jsx)("span", { children: "\u00A0\u00A0" }),
(0, jsx_runtime_1.jsx)("span", { children: danmu.message })
];
break;
case 2:
case 3:
{
const color = danmu.type === 3 ? 'rgb(0, 85, 255)' : 'rgb(128, 0, 128)';
messageInfo = [
(0, jsx_runtime_1.jsx)("span", { style: { color }, children: danmuMap[danmu.type] }),
(0, jsx_runtime_1.jsx)("span", { children: "\u00A0\u00A0" }),
(0, jsx_runtime_1.jsxs)("span", { style: { color }, children: [danmu.message, "["] }),
(0, jsx_runtime_1.jsxs)("span", { class: "redColor", children: ["\uFFE5", +danmu.price.toFixed(1), "]"] }),
(0, jsx_runtime_1.jsx)("span", { style: { color }, children: "]" })
];
break;
}
case 4:
case 5:
case 6:
case 7:
case 8:
messageInfo = [(0, jsx_runtime_1.jsx)("span", { class: "greenColor", children: danmuMap[danmu.type] })];
break;
default:
messageInfo = [(0, jsx_runtime_1.jsxs)("span", { children: ["\u672A\u77E5\u7C7B\u578B ", danmu.type] })];
break;
}
return (0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)("span", { children: new Date(danmu.sendDate).toLocaleTimeString() }), "\u00A0\u00A0", (0, jsx_runtime_1.jsx)("span", { class: "nameTitleColor", children: danmu.name }), "\u00A0\u00A0", ...messageInfo] });
}) })] });
}) })] })] });
}
exports.renderDanmu = renderDanmu;
function int2rgb(int) {
const r = int >> 16;
const g = (int >> 8) & 255;
const b = int & 255;
return `rgb(${r}, ${g}, ${b})`;
}