karin-plugin-kkk 2.38.0 → 2.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -38
- package/README.md +70 -35
- package/config/default_config/bilibili.yaml +8 -0
- package/config/default_config/config.json +1 -0
- package/lib/apps/admin.js +1 -1
- package/lib/apps/help.js +2 -2
- package/lib/build-metadata.json +5 -5
- package/lib/core_chunk/amagi.js +1 -1
- package/lib/core_chunk/amagiClient.js +1 -1
- package/lib/core_chunk/db.js +1 -1
- package/lib/core_chunk/main.js +644 -32
- package/lib/core_chunk/richtext.js +1 -1
- package/lib/core_chunk/template.d.mts +75 -3
- package/lib/core_chunk/template.js +1 -1
- package/lib/core_chunk/vendor.js +113 -113
- package/lib/karin-plugin-kkk.css +408 -41
- package/lib/root.js +1 -1
- package/lib/web/assets/{CronEditor-WXijzmDW.js → CronEditor-DiywKvi5.js} +1 -1
- package/lib/web/assets/{DesktopLayout--iy5sAfQ.js → DesktopLayout-Dg2zhXab.js} +1 -1
- package/lib/web/assets/{MobileLayout-f8WFKU7S.js → MobileLayout-Bm9iTFi2.js} +1 -1
- package/lib/web/assets/{ThemeSwitch-BHSl6vlV.js → ThemeSwitch-C-Ak-yA2.js} +1 -1
- package/lib/web/assets/index-DfwUwUnH.css +2 -0
- package/lib/web/assets/index-sIuuHdZD.js +47 -0
- package/lib/web/assets/{separator-Bm0SRDXt.js → separator-eS-a7Ser.js} +1 -1
- package/lib/web/index.html +2 -2
- package/lib/web.config.js +1 -1
- package/package.json +2 -2
- package/lib/web/assets/index-CDqOqICt.css +0 -2
- package/lib/web/assets/index-CEplgYEW.js +0 -47
package/lib/core_chunk/main.js
CHANGED
|
@@ -4,7 +4,7 @@ import "node:module";
|
|
|
4
4
|
import fs from "node:fs";
|
|
5
5
|
import path, { resolve } from "node:path";
|
|
6
6
|
import URL$2, { fileURLToPath } from "node:url";
|
|
7
|
-
import karin, { BOT_CONNECT, app, authMiddleware, checkPkgUpdate, checkPort, common, config, createBadRequestResponse, createNotFoundResponse, createServerErrorResponse, createSuccessResponse, db, defineConfig, ffmpeg, ffprobe, hooks, karin as karin$1, karinPathHtml, karinPathTemp, logger, logger as logger$1, logs, mkdirSync, parseChangelog, range, render, restart, segment, updatePkg, watch } from "node-karin";
|
|
7
|
+
import karin, { BOT_CONNECT, app, authMiddleware, checkPkgUpdate, checkPort, common, config, createBadRequestResponse, createNotFoundResponse, createServerErrorResponse, createSuccessResponse, db, defineConfig, ffmpeg, ffprobe, hooks, isDocker, karin as karin$1, karinPathHtml, karinPathTemp, logger, logger as logger$1, logs, mkdirSync, parseChangelog, range, render, restart, segment, updatePkg, watch } from "node-karin";
|
|
8
8
|
import { EventEmitter } from "node:events";
|
|
9
9
|
import crypto, { createCipheriv, createHash, randomBytes, randomUUID } from "node:crypto";
|
|
10
10
|
import axios, { AxiosError } from "node-karin/axios";
|
|
@@ -12983,7 +12983,7 @@ function processLocalImageFile(filePath) {
|
|
|
12983
12983
|
//#region ../template/src/dev/preview/utils/time.ts
|
|
12984
12984
|
var import_react = /* @__PURE__ */ __toESM(require_react(), 1);
|
|
12985
12985
|
var import_server_node = require_server_node();
|
|
12986
|
-
var formatDuration$
|
|
12986
|
+
var formatDuration$3 = (ms) => {
|
|
12987
12987
|
const totalSeconds = Math.max(Math.floor(ms / 1e3), 0);
|
|
12988
12988
|
const hours = Math.floor(totalSeconds / 3600);
|
|
12989
12989
|
const minutes = Math.floor(totalSeconds % 3600 / 60);
|
|
@@ -13007,7 +13007,7 @@ var buildStatus = (state) => {
|
|
|
13007
13007
|
statusText: `文件 ${filePath} 将在未知时间后删除`,
|
|
13008
13008
|
countdownText: "--:--"
|
|
13009
13009
|
};
|
|
13010
|
-
const countdownText = formatDuration$
|
|
13010
|
+
const countdownText = formatDuration$3(state.remainingMs);
|
|
13011
13011
|
return {
|
|
13012
13012
|
statusText: `文件 ${filePath} 将在 ${countdownText} 后删除`,
|
|
13013
13013
|
countdownText
|
|
@@ -17431,9 +17431,9 @@ var BilibiliDynamicContent = (props) => {
|
|
|
17431
17431
|
})
|
|
17432
17432
|
}),
|
|
17433
17433
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
17434
|
-
className: "relative items-center text-
|
|
17434
|
+
className: "relative items-center text-6xl tracking-wider wrap-break-word text-foreground",
|
|
17435
17435
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
17436
|
-
className: "
|
|
17436
|
+
className: "tracking-[0.5px] leading-[1.6] whitespace-pre-wrap text-foreground select-text",
|
|
17437
17437
|
style: {
|
|
17438
17438
|
wordBreak: "break-word",
|
|
17439
17439
|
overflowWrap: "break-word"
|
|
@@ -17838,7 +17838,7 @@ var BilibiliForwardContent = (props) => {
|
|
|
17838
17838
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
17839
17839
|
className: "flex flex-col px-20 w-full",
|
|
17840
17840
|
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
17841
|
-
className: "relative items-center text-
|
|
17841
|
+
className: "relative items-center text-6xl tracking-wider wrap-break-word text-foreground leading-relaxed",
|
|
17842
17842
|
children: props.text && renderRichTextToReact(props.text, {
|
|
17843
17843
|
at: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
|
|
17844
17844
|
topic: { className: "text-[#006A9E] dark:text-[#58B0D5]" },
|
|
@@ -21015,9 +21015,9 @@ var getTitleClassName$1 = (titleLength) => {
|
|
|
21015
21015
|
*/
|
|
21016
21016
|
var ambientCoverMask$1 = "linear-gradient(to bottom, transparent 0%, rgba(0,0,0,0.08) 6%, rgba(0,0,0,0.32) 16%, rgba(0,0,0,0.68) 28%, black 42%, black 58%, rgba(0,0,0,0.68) 72%, rgba(0,0,0,0.32) 84%, rgba(0,0,0,0.08) 94%, transparent 100%)";
|
|
21017
21017
|
var foregroundCoverMask$1 = "linear-gradient(to bottom, transparent 0%, rgba(0,0,0,0.1) 4%, rgba(0,0,0,0.35) 10%, rgba(0,0,0,0.68) 17%, rgba(0,0,0,0.9) 23%, black 30%, black 70%, rgba(0,0,0,0.9) 77%, rgba(0,0,0,0.68) 83%, rgba(0,0,0,0.35) 90%, rgba(0,0,0,0.1) 96%, transparent 100%)";
|
|
21018
|
-
var getCoverUrl = (data) => data.image_list.images[0]?.url;
|
|
21018
|
+
var getCoverUrl$1 = (data) => data.image_list.images[0]?.url;
|
|
21019
21019
|
var DouyinDiffuseBackground$1 = ({ data }) => {
|
|
21020
|
-
const coverUrl = getCoverUrl(data);
|
|
21020
|
+
const coverUrl = getCoverUrl$1(data);
|
|
21021
21021
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
21022
21022
|
className: "pointer-events-none absolute inset-0 overflow-hidden select-none",
|
|
21023
21023
|
children: [
|
|
@@ -22870,7 +22870,7 @@ var formatCount = (count) => {
|
|
|
22870
22870
|
* 格式化视频时长显示 (如: 6:20)
|
|
22871
22871
|
* @param milliseconds 毫秒数
|
|
22872
22872
|
*/
|
|
22873
|
-
var formatDuration$
|
|
22873
|
+
var formatDuration$2 = (milliseconds) => {
|
|
22874
22874
|
const seconds = Math.floor(milliseconds / 1e3);
|
|
22875
22875
|
return `${Math.floor(seconds / 60)}:${(seconds % 60).toString().padStart(2, "0")}`;
|
|
22876
22876
|
};
|
|
@@ -22906,7 +22906,7 @@ var VideoCard = ({ video }) => {
|
|
|
22906
22906
|
}),
|
|
22907
22907
|
video.is_video && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
22908
22908
|
className: "absolute bottom-4 right-4 px-8 py-3 rounded-2xl text-4xl bg-white/50 text-black backdrop-blur-xs shadow-lg",
|
|
22909
|
-
children: formatDuration$
|
|
22909
|
+
children: formatDuration$2(video.duration)
|
|
22910
22910
|
}),
|
|
22911
22911
|
video.music && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
22912
22912
|
className: "absolute bottom-4 left-4 flex items-center gap-2 px-6 py-3 rounded-2xl text-xl bg-white/50 text-black backdrop-blur-xs shadow-lg",
|
|
@@ -23119,7 +23119,7 @@ var getTitleClassName = (titleLength) => {
|
|
|
23119
23119
|
if (titleLength > 48) return "text-[54px] leading-[1.26]";
|
|
23120
23120
|
return "text-[62px] leading-tight";
|
|
23121
23121
|
};
|
|
23122
|
-
function formatDuration(duration) {
|
|
23122
|
+
function formatDuration$1(duration) {
|
|
23123
23123
|
if (typeof duration !== "number" || !Number.isFinite(duration) || duration < 0) return void 0;
|
|
23124
23124
|
const totalSeconds = Math.floor(duration / 1e3);
|
|
23125
23125
|
const hours = Math.floor(totalSeconds / 3600);
|
|
@@ -23245,7 +23245,7 @@ var DouyinPosterHeader = ({ data }) => {
|
|
|
23245
23245
|
};
|
|
23246
23246
|
var DouyinVideoCover = ({ data }) => {
|
|
23247
23247
|
const { image_url, music, duration } = data;
|
|
23248
|
-
const durationText = formatDuration(duration);
|
|
23248
|
+
const durationText = formatDuration$1(duration);
|
|
23249
23249
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
|
|
23250
23250
|
className: "relative -mx-20 mt-12 overflow-visible",
|
|
23251
23251
|
children: [
|
|
@@ -27707,6 +27707,478 @@ var QrLogin = import_react.memo((props) => {
|
|
|
27707
27707
|
});
|
|
27708
27708
|
QrLogin.displayName = "QrLogin";
|
|
27709
27709
|
//#endregion
|
|
27710
|
+
//#region ../template/src/components/platforms/other/runtime.tsx
|
|
27711
|
+
/**
|
|
27712
|
+
* `#kkk版本` 运行环境诊断海报。
|
|
27713
|
+
*
|
|
27714
|
+
* 面向手机端看图场景:整幅统一底色 + 多色弥散光 + 高对比离散噪点层,内容单列纵向排布、
|
|
27715
|
+
* 不使用卡片容器,靠大留白与字号层级分区,超大实心版本号作为第一视觉中心。
|
|
27716
|
+
* 深色主题为紫罗兰 → 品红 → 琥珀橙弥散;浅色主题为 #271151 / #9754c7 / #deacf5 同色系紫,避免多色对撞。
|
|
27717
|
+
*/
|
|
27718
|
+
var RuntimeReport = import_react.memo((props) => {
|
|
27719
|
+
const { data } = props;
|
|
27720
|
+
const isDark = data.useDarkTheme ?? false;
|
|
27721
|
+
const releaseLabel = data.identity.releaseType.toLowerCase() === "stable" ? "正式版" : data.identity.releaseType.toLowerCase() === "preview" ? "预览版" : data.identity.releaseType;
|
|
27722
|
+
const buildStatus = data.build.state === "matched" ? {
|
|
27723
|
+
label: "构建信息一致",
|
|
27724
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CircleCheck, { className: "h-8 w-8" }),
|
|
27725
|
+
color: "#22c55e"
|
|
27726
|
+
} : data.build.state === "mismatched" ? {
|
|
27727
|
+
label: "构建信息不一致",
|
|
27728
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TriangleAlert, { className: "h-8 w-8" }),
|
|
27729
|
+
color: "#f59e0b"
|
|
27730
|
+
} : {
|
|
27731
|
+
label: "未找到构建信息",
|
|
27732
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TriangleAlert, { className: "h-8 w-8" }),
|
|
27733
|
+
color: "#94a3b8"
|
|
27734
|
+
};
|
|
27735
|
+
const palette = isDark ? {
|
|
27736
|
+
background: "#0d0a1c",
|
|
27737
|
+
glowPrimary: "rgba(139, 92, 246, 0.34)",
|
|
27738
|
+
glowSecondary: "rgba(217, 70, 239, 0.22)",
|
|
27739
|
+
glowWarm: "rgba(251, 146, 60, 0.20)",
|
|
27740
|
+
versionGlow: "radial-gradient(ellipse at center, rgba(167, 139, 250, 0.30) 0%, rgba(240, 171, 252, 0.15) 50%, transparent 75%)",
|
|
27741
|
+
versionInk: "#f6f3ff",
|
|
27742
|
+
versionAccent: "#fdba74",
|
|
27743
|
+
accentText: "#c4b5fd",
|
|
27744
|
+
pillBg: "rgba(139, 92, 246, 0.12)",
|
|
27745
|
+
pillBorder: "rgba(196, 181, 253, 0.35)",
|
|
27746
|
+
pillText: "#c4b5fd",
|
|
27747
|
+
statusDot: "linear-gradient(112deg, #c4b5fd 0%, #f0abfc 48%, #fdba74 100%)",
|
|
27748
|
+
dotGlow: "0 0 28px rgba(192, 132, 252, 0.85)",
|
|
27749
|
+
barAccent: "linear-gradient(112deg, #c4b5fd 0%, #f0abfc 48%, #fdba74 100%)",
|
|
27750
|
+
meterGradient: "linear-gradient(112deg, #c4b5fd 0%, #f0abfc 48%, #fdba74 100%)",
|
|
27751
|
+
bgWord: "#ede9fe",
|
|
27752
|
+
noteHeading: "#f5f3ff",
|
|
27753
|
+
noteBody: "rgba(240, 237, 255, 0.72)",
|
|
27754
|
+
noteStrong: "#ffffff",
|
|
27755
|
+
noteCodeBg: "rgba(139, 92, 246, 0.16)",
|
|
27756
|
+
noteCodeText: "#c4b5fd",
|
|
27757
|
+
noteLink: "#c4b5fd",
|
|
27758
|
+
noteBulletClass: "before:bg-violet-400/70",
|
|
27759
|
+
warnText: "#fbbf24",
|
|
27760
|
+
noiseOpacity: .16
|
|
27761
|
+
} : {
|
|
27762
|
+
background: "#f7f1fe",
|
|
27763
|
+
glowPrimary: "rgba(151, 84, 199, 0.30)",
|
|
27764
|
+
glowSecondary: "rgba(222, 172, 245, 0.55)",
|
|
27765
|
+
glowWarm: "rgba(250, 211, 22, 0.38)",
|
|
27766
|
+
versionGlow: "radial-gradient(ellipse at center, rgba(222, 172, 245, 0.50) 0%, rgba(250, 211, 22, 0.16) 55%, transparent 78%)",
|
|
27767
|
+
versionInk: "#271151",
|
|
27768
|
+
versionAccent: "#9754c7",
|
|
27769
|
+
accentText: "#9754c7",
|
|
27770
|
+
pillBg: "rgba(151, 84, 199, 0.10)",
|
|
27771
|
+
pillBorder: "rgba(151, 84, 199, 0.30)",
|
|
27772
|
+
pillText: "#7a3db0",
|
|
27773
|
+
statusDot: "#9754c7",
|
|
27774
|
+
dotGlow: "0 0 26px rgba(151, 84, 199, 0.55)",
|
|
27775
|
+
barAccent: "linear-gradient(90deg, #271151 0%, #9754c7 100%)",
|
|
27776
|
+
meterGradient: "linear-gradient(90deg, #271151 0%, #9754c7 100%)",
|
|
27777
|
+
bgWord: "#271151",
|
|
27778
|
+
noteHeading: "#271151",
|
|
27779
|
+
noteBody: "rgba(39, 17, 81, 0.70)",
|
|
27780
|
+
noteStrong: "#271151",
|
|
27781
|
+
noteCodeBg: "rgba(151, 84, 199, 0.10)",
|
|
27782
|
+
noteCodeText: "#7a3db0",
|
|
27783
|
+
noteLink: "#7a3db0",
|
|
27784
|
+
noteBulletClass: "before:bg-[#9754c7]/70",
|
|
27785
|
+
warnText: "#8a5a06",
|
|
27786
|
+
noiseOpacity: .12
|
|
27787
|
+
};
|
|
27788
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DefaultLayout, {
|
|
27789
|
+
...props,
|
|
27790
|
+
className: "relative min-h-[1820px] overflow-hidden",
|
|
27791
|
+
style: { backgroundColor: palette.background },
|
|
27792
|
+
children: [
|
|
27793
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
27794
|
+
className: "pointer-events-none absolute inset-0 z-0 overflow-hidden",
|
|
27795
|
+
children: [
|
|
27796
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
27797
|
+
className: "absolute -left-[520px] -top-[480px] h-[1350px] w-[1500px] rounded-full blur-[230px]",
|
|
27798
|
+
style: { background: `radial-gradient(ellipse at center, ${palette.glowPrimary} 0%, transparent 70%)` }
|
|
27799
|
+
}),
|
|
27800
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
27801
|
+
className: "absolute -right-[520px] top-[32%] h-[1250px] w-[1200px] rounded-full blur-[240px]",
|
|
27802
|
+
style: { background: `radial-gradient(ellipse at center, ${palette.glowSecondary} 0%, transparent 72%)` }
|
|
27803
|
+
}),
|
|
27804
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
27805
|
+
className: "absolute -bottom-[480px] -left-[320px] h-[1150px] w-[1350px] rounded-full blur-[260px]",
|
|
27806
|
+
style: { background: `radial-gradient(ellipse at center, ${palette.glowWarm} 0%, transparent 72%)` }
|
|
27807
|
+
}),
|
|
27808
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
27809
|
+
className: "absolute -bottom-[360px] -right-[420px] h-[900px] w-[1000px] rounded-full blur-[240px]",
|
|
27810
|
+
style: { background: `radial-gradient(ellipse at center, ${palette.glowPrimary} 0%, transparent 72%)` }
|
|
27811
|
+
}),
|
|
27812
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
27813
|
+
className: "absolute -right-16 top-[110px] select-none text-[240px] font-black leading-none tracking-[-0.06em] opacity-[0.03]",
|
|
27814
|
+
style: { color: palette.bgWord },
|
|
27815
|
+
children: "RUNTIME"
|
|
27816
|
+
})
|
|
27817
|
+
]
|
|
27818
|
+
}),
|
|
27819
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
27820
|
+
className: "pointer-events-none absolute inset-0 z-0",
|
|
27821
|
+
style: { opacity: palette.noiseOpacity },
|
|
27822
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
|
|
27823
|
+
className: "h-full w-full",
|
|
27824
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
27825
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("filter", {
|
|
27826
|
+
id: "runtimeReportNoise",
|
|
27827
|
+
x: "0%",
|
|
27828
|
+
y: "0%",
|
|
27829
|
+
width: "100%",
|
|
27830
|
+
height: "100%",
|
|
27831
|
+
children: [
|
|
27832
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("feTurbulence", {
|
|
27833
|
+
type: "fractalNoise",
|
|
27834
|
+
baseFrequency: "0.8",
|
|
27835
|
+
numOctaves: "1",
|
|
27836
|
+
stitchTiles: "stitch",
|
|
27837
|
+
result: "noise"
|
|
27838
|
+
}),
|
|
27839
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("feColorMatrix", {
|
|
27840
|
+
type: "saturate",
|
|
27841
|
+
values: "0",
|
|
27842
|
+
result: "gray"
|
|
27843
|
+
}),
|
|
27844
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("feComponentTransfer", { children: [
|
|
27845
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("feFuncR", {
|
|
27846
|
+
type: "discrete",
|
|
27847
|
+
tableValues: "0 1"
|
|
27848
|
+
}),
|
|
27849
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("feFuncG", {
|
|
27850
|
+
type: "discrete",
|
|
27851
|
+
tableValues: "0 1"
|
|
27852
|
+
}),
|
|
27853
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("feFuncB", {
|
|
27854
|
+
type: "discrete",
|
|
27855
|
+
tableValues: "0 1"
|
|
27856
|
+
})
|
|
27857
|
+
] })
|
|
27858
|
+
]
|
|
27859
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("rect", {
|
|
27860
|
+
width: "100%",
|
|
27861
|
+
height: "100%",
|
|
27862
|
+
filter: "url(#runtimeReportNoise)"
|
|
27863
|
+
})]
|
|
27864
|
+
})
|
|
27865
|
+
}),
|
|
27866
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("main", {
|
|
27867
|
+
className: "relative z-10 px-[88px] pb-[64px] pt-[80px]",
|
|
27868
|
+
children: [
|
|
27869
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", {
|
|
27870
|
+
className: "relative",
|
|
27871
|
+
children: [
|
|
27872
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
27873
|
+
className: "flex items-center justify-between gap-12",
|
|
27874
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
27875
|
+
className: "flex items-center gap-4",
|
|
27876
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
27877
|
+
className: "h-3.5 w-3.5 rounded-full",
|
|
27878
|
+
style: {
|
|
27879
|
+
background: palette.statusDot,
|
|
27880
|
+
boxShadow: palette.dotGlow
|
|
27881
|
+
}
|
|
27882
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
27883
|
+
className: "text-[24px] font-bold tracking-[0.28em] text-foreground/44",
|
|
27884
|
+
children: "运行诊断 · RUNTIME REPORT"
|
|
27885
|
+
})]
|
|
27886
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
27887
|
+
className: "whitespace-nowrap rounded-full border px-6 py-2 text-[22px] font-black tracking-[0.14em]",
|
|
27888
|
+
style: {
|
|
27889
|
+
borderColor: palette.pillBorder,
|
|
27890
|
+
background: palette.pillBg,
|
|
27891
|
+
color: palette.pillText
|
|
27892
|
+
},
|
|
27893
|
+
children: releaseLabel
|
|
27894
|
+
})]
|
|
27895
|
+
}),
|
|
27896
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
27897
|
+
className: "mt-[76px]",
|
|
27898
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", {
|
|
27899
|
+
className: "whitespace-nowrap text-[136px] font-black leading-none tracking-[-0.05em] text-foreground",
|
|
27900
|
+
children: "运行环境"
|
|
27901
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
|
|
27902
|
+
className: "mt-8 whitespace-nowrap text-[32px] font-semibold text-foreground/48",
|
|
27903
|
+
children: "插件、框架与本地宿主的精简诊断快照"
|
|
27904
|
+
})]
|
|
27905
|
+
}),
|
|
27906
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
27907
|
+
className: "relative mt-[92px]",
|
|
27908
|
+
children: [
|
|
27909
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
27910
|
+
className: "pointer-events-none absolute -left-16 -top-24 h-[420px] w-[820px] rounded-full blur-[150px]",
|
|
27911
|
+
style: { background: palette.versionGlow }
|
|
27912
|
+
}),
|
|
27913
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
27914
|
+
className: "relative text-[24px] font-bold tracking-[0.2em] text-foreground/36",
|
|
27915
|
+
children: "插件版本"
|
|
27916
|
+
}),
|
|
27917
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
27918
|
+
className: "relative mt-5 whitespace-nowrap font-mono text-[200px] font-black leading-none tracking-[-0.08em]",
|
|
27919
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
27920
|
+
className: "mr-4 text-[64px]",
|
|
27921
|
+
style: { color: palette.versionAccent },
|
|
27922
|
+
children: "v"
|
|
27923
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
27924
|
+
style: { color: palette.versionInk },
|
|
27925
|
+
children: data.identity.pluginVersion
|
|
27926
|
+
})]
|
|
27927
|
+
}),
|
|
27928
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
27929
|
+
className: "relative mt-8 flex items-center gap-4",
|
|
27930
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
27931
|
+
className: "whitespace-nowrap font-mono text-[26px] font-bold text-foreground/46",
|
|
27932
|
+
children: data.identity.pluginName
|
|
27933
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
27934
|
+
className: "flex items-center gap-3 whitespace-nowrap rounded-full border px-5 py-1.5 text-[24px] font-bold",
|
|
27935
|
+
style: {
|
|
27936
|
+
color: buildStatus.color,
|
|
27937
|
+
borderColor: `${buildStatus.color}55`,
|
|
27938
|
+
background: `${buildStatus.color}14`
|
|
27939
|
+
},
|
|
27940
|
+
children: [buildStatus.icon, buildStatus.label]
|
|
27941
|
+
})]
|
|
27942
|
+
}),
|
|
27943
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
27944
|
+
className: "relative mt-[44px] whitespace-nowrap font-mono text-[22px] font-semibold text-foreground/28",
|
|
27945
|
+
children: [
|
|
27946
|
+
"构建 ",
|
|
27947
|
+
data.build.shortCommitHash ?? "未知",
|
|
27948
|
+
" · ",
|
|
27949
|
+
data.build.buildTime ?? "时间未知"
|
|
27950
|
+
]
|
|
27951
|
+
})
|
|
27952
|
+
]
|
|
27953
|
+
})
|
|
27954
|
+
]
|
|
27955
|
+
}),
|
|
27956
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
|
|
27957
|
+
className: "relative mt-[120px]",
|
|
27958
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
27959
|
+
className: "relative flex items-center gap-5",
|
|
27960
|
+
children: [
|
|
27961
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
27962
|
+
className: "h-3 w-3 rounded-full",
|
|
27963
|
+
style: { background: palette.statusDot }
|
|
27964
|
+
}),
|
|
27965
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
27966
|
+
className: "text-[24px] font-black tracking-[0.28em]",
|
|
27967
|
+
style: { color: palette.accentText },
|
|
27968
|
+
children: "环境摘要"
|
|
27969
|
+
}),
|
|
27970
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
27971
|
+
className: "ml-2 h-2 w-[88px] rounded-full",
|
|
27972
|
+
style: { background: palette.barAccent }
|
|
27973
|
+
})
|
|
27974
|
+
]
|
|
27975
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
27976
|
+
className: "relative mt-[64px] grid grid-cols-2 gap-x-[72px] gap-y-[64px]",
|
|
27977
|
+
children: [
|
|
27978
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
27979
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
27980
|
+
className: "text-[22px] font-bold tracking-[0.18em] text-foreground/36",
|
|
27981
|
+
children: "操作系统"
|
|
27982
|
+
}),
|
|
27983
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
27984
|
+
className: "mt-3 truncate whitespace-nowrap text-[48px] font-black tracking-[-0.02em] text-foreground",
|
|
27985
|
+
children: data.runtime.os
|
|
27986
|
+
}),
|
|
27987
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
27988
|
+
className: "mt-4 whitespace-nowrap font-mono text-[26px] font-bold text-foreground/42",
|
|
27989
|
+
children: [
|
|
27990
|
+
data.runtime.platform,
|
|
27991
|
+
" · ",
|
|
27992
|
+
data.runtime.arch
|
|
27993
|
+
]
|
|
27994
|
+
})
|
|
27995
|
+
] }),
|
|
27996
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
27997
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
27998
|
+
className: "text-[22px] font-bold tracking-[0.18em] text-foreground/36",
|
|
27999
|
+
children: "当前适配器"
|
|
28000
|
+
}),
|
|
28001
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
28002
|
+
className: "mt-3 truncate whitespace-nowrap text-[48px] font-black tracking-[-0.02em] text-foreground",
|
|
28003
|
+
children: data.adapter.name
|
|
28004
|
+
}),
|
|
28005
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
28006
|
+
className: "mt-4 whitespace-nowrap font-mono text-[27px] font-black",
|
|
28007
|
+
style: { color: palette.accentText },
|
|
28008
|
+
children: ["v", data.adapter.version]
|
|
28009
|
+
})
|
|
28010
|
+
] }),
|
|
28011
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
28012
|
+
className: "text-[22px] font-bold tracking-[0.18em] text-foreground/36",
|
|
28013
|
+
children: "Karin 版本"
|
|
28014
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
28015
|
+
className: "mt-3 whitespace-nowrap font-mono text-[48px] font-black leading-none tracking-[-0.02em] text-foreground",
|
|
28016
|
+
children: ["v", data.identity.karinVersion]
|
|
28017
|
+
})] }),
|
|
28018
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
28019
|
+
className: "text-[22px] font-bold tracking-[0.18em] text-foreground/36",
|
|
28020
|
+
children: "Node.js 版本"
|
|
28021
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
28022
|
+
className: "mt-3 whitespace-nowrap font-mono text-[48px] font-black leading-none tracking-[-0.02em]",
|
|
28023
|
+
style: { color: palette.accentText },
|
|
28024
|
+
children: data.runtime.nodeVersion
|
|
28025
|
+
})] }),
|
|
28026
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
28027
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
28028
|
+
className: "text-[22px] font-bold tracking-[0.18em] text-foreground/36",
|
|
28029
|
+
children: "内存占用"
|
|
28030
|
+
}),
|
|
28031
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
28032
|
+
className: "mt-3 flex items-end gap-5",
|
|
28033
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
28034
|
+
className: "whitespace-nowrap font-mono text-[72px] font-black leading-none tracking-[-0.04em] text-foreground",
|
|
28035
|
+
children: data.resources.memoryUsagePercent
|
|
28036
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
28037
|
+
className: "whitespace-nowrap pb-2 font-mono text-[24px] font-bold text-foreground/40",
|
|
28038
|
+
children: [
|
|
28039
|
+
data.resources.usedMemory,
|
|
28040
|
+
" / ",
|
|
28041
|
+
data.resources.totalMemory
|
|
28042
|
+
]
|
|
28043
|
+
})]
|
|
28044
|
+
}),
|
|
28045
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
28046
|
+
className: "mt-5 h-[12px] w-full max-w-[420px] overflow-hidden rounded-full bg-foreground/8",
|
|
28047
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
28048
|
+
className: "h-full rounded-full",
|
|
28049
|
+
style: {
|
|
28050
|
+
width: data.resources.memoryUsagePercent,
|
|
28051
|
+
background: palette.meterGradient
|
|
28052
|
+
}
|
|
28053
|
+
})
|
|
28054
|
+
})
|
|
28055
|
+
] }),
|
|
28056
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
28057
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
28058
|
+
className: "text-[22px] font-bold tracking-[0.18em] text-foreground/36",
|
|
28059
|
+
children: "处理器"
|
|
28060
|
+
}),
|
|
28061
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
28062
|
+
className: "mt-3 line-clamp-2 break-words text-[32px] font-black leading-[1.4] text-foreground/78",
|
|
28063
|
+
children: data.resources.cpuModel
|
|
28064
|
+
}),
|
|
28065
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
28066
|
+
className: "mt-4 whitespace-nowrap font-mono text-[24px] font-bold text-foreground/40",
|
|
28067
|
+
children: [data.resources.cpuCores, " 核心"]
|
|
28068
|
+
})
|
|
28069
|
+
] })
|
|
28070
|
+
]
|
|
28071
|
+
})]
|
|
28072
|
+
}),
|
|
28073
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
|
|
28074
|
+
className: "relative mt-[130px]",
|
|
28075
|
+
children: [
|
|
28076
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
28077
|
+
className: "relative flex items-center gap-5",
|
|
28078
|
+
children: [
|
|
28079
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
28080
|
+
className: "h-3 w-3 rounded-full",
|
|
28081
|
+
style: { background: palette.statusDot }
|
|
28082
|
+
}),
|
|
28083
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
28084
|
+
className: "text-[24px] font-black tracking-[0.28em]",
|
|
28085
|
+
style: { color: palette.accentText },
|
|
28086
|
+
children: "仅展示当前版本"
|
|
28087
|
+
}),
|
|
28088
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
28089
|
+
className: "ml-2 h-2 w-[88px] rounded-full",
|
|
28090
|
+
style: { background: palette.barAccent }
|
|
28091
|
+
})
|
|
28092
|
+
]
|
|
28093
|
+
}),
|
|
28094
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", {
|
|
28095
|
+
className: "mt-7 text-[76px] font-black leading-none",
|
|
28096
|
+
style: { color: palette.noteStrong },
|
|
28097
|
+
children: "本版变更"
|
|
28098
|
+
}),
|
|
28099
|
+
data.releaseNotes.available ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
28100
|
+
className: "runtime-release-notes relative mt-[60px]",
|
|
28101
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Markdown, {
|
|
28102
|
+
components: {
|
|
28103
|
+
h2: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", {
|
|
28104
|
+
className: "mb-11 whitespace-nowrap text-[48px] font-black leading-tight",
|
|
28105
|
+
style: { color: palette.noteStrong },
|
|
28106
|
+
children
|
|
28107
|
+
}),
|
|
28108
|
+
h3: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("h3", {
|
|
28109
|
+
className: "mb-5 mt-10 flex items-center gap-5 whitespace-nowrap text-[36px] font-black leading-tight",
|
|
28110
|
+
style: { color: palette.noteHeading },
|
|
28111
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
28112
|
+
className: "h-2.5 w-12 shrink-0 rounded-full",
|
|
28113
|
+
style: { background: palette.barAccent }
|
|
28114
|
+
}), children]
|
|
28115
|
+
}),
|
|
28116
|
+
p: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
|
|
28117
|
+
className: "mb-6 text-[32px] leading-[1.7]",
|
|
28118
|
+
style: { color: palette.noteBody },
|
|
28119
|
+
children
|
|
28120
|
+
}),
|
|
28121
|
+
ul: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", {
|
|
28122
|
+
className: "mb-8 space-y-5 pl-10",
|
|
28123
|
+
children
|
|
28124
|
+
}),
|
|
28125
|
+
ol: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ol", {
|
|
28126
|
+
className: "mb-8 list-decimal space-y-5 pl-12",
|
|
28127
|
+
children
|
|
28128
|
+
}),
|
|
28129
|
+
li: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", {
|
|
28130
|
+
className: `relative break-words text-[32px] font-semibold leading-[1.65] before:absolute before:-left-8 before:top-[0.74em] before:h-2.5 before:w-2.5 before:rounded-full ${palette.noteBulletClass}`,
|
|
28131
|
+
style: { color: palette.noteBody },
|
|
28132
|
+
children
|
|
28133
|
+
}),
|
|
28134
|
+
strong: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", {
|
|
28135
|
+
className: "font-black",
|
|
28136
|
+
style: { color: palette.noteStrong },
|
|
28137
|
+
children
|
|
28138
|
+
}),
|
|
28139
|
+
code: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", {
|
|
28140
|
+
className: "break-all rounded-lg px-3 py-1 font-mono text-[0.88em] font-bold",
|
|
28141
|
+
style: {
|
|
28142
|
+
background: palette.noteCodeBg,
|
|
28143
|
+
color: palette.noteCodeText
|
|
28144
|
+
},
|
|
28145
|
+
children
|
|
28146
|
+
}),
|
|
28147
|
+
a: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
28148
|
+
className: "font-bold",
|
|
28149
|
+
style: { color: palette.noteLink },
|
|
28150
|
+
children
|
|
28151
|
+
})
|
|
28152
|
+
},
|
|
28153
|
+
children: data.releaseNotes.markdown
|
|
28154
|
+
})
|
|
28155
|
+
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
28156
|
+
className: "relative mt-[60px] flex items-start gap-6",
|
|
28157
|
+
style: { color: palette.warnText },
|
|
28158
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TriangleAlert, { className: "mt-1 h-11 w-11 shrink-0" }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
28159
|
+
className: "text-[34px] font-black",
|
|
28160
|
+
children: "当前构建没有可用的变更日志"
|
|
28161
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
28162
|
+
className: "mt-3 text-[27px] font-semibold leading-[1.55] opacity-70",
|
|
28163
|
+
children: "环境摘要仍可正常用于问题定位。"
|
|
28164
|
+
})] })]
|
|
28165
|
+
})
|
|
28166
|
+
]
|
|
28167
|
+
}),
|
|
28168
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("footer", {
|
|
28169
|
+
className: "mt-[80px] flex items-end justify-between gap-12 whitespace-nowrap text-[22px] font-semibold text-foreground/32",
|
|
28170
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "仅包含经过脱敏的本地运行信息" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
28171
|
+
className: "font-mono",
|
|
28172
|
+
children: data.snapshotAt
|
|
28173
|
+
})]
|
|
28174
|
+
})
|
|
28175
|
+
]
|
|
28176
|
+
})
|
|
28177
|
+
]
|
|
28178
|
+
});
|
|
28179
|
+
});
|
|
28180
|
+
RuntimeReport.displayName = "RuntimeReport";
|
|
28181
|
+
//#endregion
|
|
27710
28182
|
//#region ../template/src/components/platforms/other/VersionWarning.tsx
|
|
27711
28183
|
var VersionWarning = (props) => {
|
|
27712
28184
|
const isDark = props.data.useDarkTheme;
|
|
@@ -29091,6 +29563,14 @@ var baseComponentConfigs = [
|
|
|
29091
29563
|
componentPath: "platforms/other/changelog",
|
|
29092
29564
|
exportName: "changelog"
|
|
29093
29565
|
},
|
|
29566
|
+
{
|
|
29567
|
+
id: "runtime",
|
|
29568
|
+
name: "运行环境诊断",
|
|
29569
|
+
description: "KKK插件运行环境诊断页面",
|
|
29570
|
+
enabled: true,
|
|
29571
|
+
componentPath: "platforms/other/runtime",
|
|
29572
|
+
exportName: "RuntimeReport"
|
|
29573
|
+
},
|
|
29094
29574
|
{
|
|
29095
29575
|
id: "version_warning",
|
|
29096
29576
|
name: "版本警告",
|
|
@@ -29290,6 +29770,7 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
|
|
|
29290
29770
|
case "help": return createComponentConfig(baseComponent, { component: Help });
|
|
29291
29771
|
case "handlerError": return createComponentConfig(baseComponent, { component: handlerError });
|
|
29292
29772
|
case "changelog": return createComponentConfig(baseComponent, { component: Changelog });
|
|
29773
|
+
case "runtime": return createComponentConfig(baseComponent, { component: RuntimeReport });
|
|
29293
29774
|
case "version_warning": return createComponentConfig(baseComponent, { component: VersionWarning });
|
|
29294
29775
|
case "qrlogin": return createComponentConfig(baseComponent, { component: QrLogin });
|
|
29295
29776
|
case "live-photo-tip": return createComponentConfig(baseComponent, { component: LivePhotoTip });
|
|
@@ -30636,11 +31117,13 @@ var decideCoverTheme = (buffer) => {
|
|
|
30636
31117
|
var isBilibiliPosterPaletteRequest = (request) => {
|
|
30637
31118
|
return request.templateType === "bilibili" && request.templateName === "dynamic/DYNAMIC_TYPE_LIVE_RCMD";
|
|
30638
31119
|
};
|
|
30639
|
-
var
|
|
31120
|
+
var isCoverThemeRequest = (request) => {
|
|
31121
|
+
if (request.templateType === "bilibili") return request.templateName === "videoInfo";
|
|
30640
31122
|
return request.templateType === "douyin" && (request.templateName === "video-work" || request.templateName === "image-work");
|
|
30641
31123
|
};
|
|
30642
|
-
var
|
|
31124
|
+
var getCoverUrl = (request) => {
|
|
30643
31125
|
const data = request.data || {};
|
|
31126
|
+
if (request.templateType === "bilibili" && request.templateName === "videoInfo") return typeof data.pic === "string" ? data.pic : "";
|
|
30644
31127
|
if (request.templateName === "video-work") return typeof data.image_url === "string" ? data.image_url : "";
|
|
30645
31128
|
if (request.templateName === "image-work") {
|
|
30646
31129
|
const cover = data.image_list?.images?.find((image) => typeof image.url === "string" && image.url.length > 0);
|
|
@@ -30648,8 +31131,8 @@ var getDouyinCoverUrl = (request) => {
|
|
|
30648
31131
|
}
|
|
30649
31132
|
return "";
|
|
30650
31133
|
};
|
|
30651
|
-
var
|
|
30652
|
-
const imageUrl =
|
|
31134
|
+
var applyCoverTheme = async (ctx) => {
|
|
31135
|
+
const imageUrl = getCoverUrl(ctx.request);
|
|
30653
31136
|
if (!imageUrl) return;
|
|
30654
31137
|
const sample = await resolvePosterImageSample(imageUrl);
|
|
30655
31138
|
if (!sample) return;
|
|
@@ -30658,17 +31141,17 @@ var applyDouyinCoverTheme = async (ctx) => {
|
|
|
30658
31141
|
const data = ctx.request.data || {};
|
|
30659
31142
|
ctx.request.useDarkTheme = decision.useDarkTheme;
|
|
30660
31143
|
data.useDarkTheme = decision.useDarkTheme;
|
|
30661
|
-
logger.debug(`[Render]
|
|
31144
|
+
logger.debug(`[Render] 封面智能主题: ${ctx.request.templateType}/${ctx.request.templateName} -> ${decision.useDarkTheme ? "深色" : "浅色"} (luma=${decision.averageLuma.toFixed(2)}, dark=${decision.darkRatio.toFixed(2)}, bright=${decision.brightRatio.toFixed(2)}, vivid=${decision.vividRatio.toFixed(2)})`);
|
|
30662
31145
|
};
|
|
30663
31146
|
var createPosterPalettePlugin = () => {
|
|
30664
31147
|
return {
|
|
30665
31148
|
name: "封面动态取色与智能主题",
|
|
30666
31149
|
enforce: "pre",
|
|
30667
31150
|
apply(request) {
|
|
30668
|
-
return isBilibiliPosterPaletteRequest(request) || Config.app.Theme === 3 &&
|
|
31151
|
+
return isBilibiliPosterPaletteRequest(request) || Config.app.Theme === 3 && isCoverThemeRequest(request);
|
|
30669
31152
|
},
|
|
30670
31153
|
async beforeRender(ctx) {
|
|
30671
|
-
if (Config.app.Theme === 3 &&
|
|
31154
|
+
if (Config.app.Theme === 3 && isCoverThemeRequest(ctx.request)) await applyCoverTheme(ctx);
|
|
30672
31155
|
if (!isBilibiliPosterPaletteRequest(ctx.request)) return;
|
|
30673
31156
|
const data = ctx.request.data || {};
|
|
30674
31157
|
const imageUrl = typeof data.image_url === "string" ? data.image_url : "";
|
|
@@ -36821,7 +37304,7 @@ var Bilibilipush = class extends Base {
|
|
|
36821
37304
|
data: `#kkk帮助`
|
|
36822
37305
|
}])] : [];
|
|
36823
37306
|
status = await karin.sendMsg(botId, Contact, [...watermarkedImg, ...parseButton]);
|
|
36824
|
-
if (Config.bilibili.push.parsedynamic && status.messageId) switch (data[dynamicId].dynamic_type) {
|
|
37307
|
+
if (Config.bilibili.push.parsedynamic && Config.bilibili.push.parseDynamicTypes.includes(data[dynamicId].dynamic_type) && status.messageId) switch (data[dynamicId].dynamic_type) {
|
|
36825
37308
|
case "DYNAMIC_TYPE_AV":
|
|
36826
37309
|
if (send_video) {
|
|
36827
37310
|
let correctList;
|
|
@@ -41821,6 +42304,127 @@ var removeOldFiles = (dir, beforeTimestamp) => {
|
|
|
41821
42304
|
return deletedCount;
|
|
41822
42305
|
};
|
|
41823
42306
|
//#endregion
|
|
42307
|
+
//#region src/module/utils/runtime-report.ts
|
|
42308
|
+
/**
|
|
42309
|
+
* 将秒数格式化为适合诊断海报展示的紧凑时长。
|
|
42310
|
+
*
|
|
42311
|
+
* @param seconds 原始秒数
|
|
42312
|
+
* @returns 例如 `2天 6小时 18分钟`
|
|
42313
|
+
*/
|
|
42314
|
+
var formatDuration = (seconds) => {
|
|
42315
|
+
if (!Number.isFinite(seconds) || seconds < 0) return "未知";
|
|
42316
|
+
const totalMinutes = Math.floor(seconds / 60);
|
|
42317
|
+
const days = Math.floor(totalMinutes / 1440);
|
|
42318
|
+
const hours = Math.floor(totalMinutes % 1440 / 60);
|
|
42319
|
+
const minutes = totalMinutes % 60;
|
|
42320
|
+
if (days > 0) return `${days}天 ${hours}小时 ${minutes}分钟`;
|
|
42321
|
+
if (hours > 0) return `${hours}小时 ${minutes}分钟`;
|
|
42322
|
+
if (minutes > 0) return `${minutes}分钟`;
|
|
42323
|
+
return `${Math.floor(seconds)}秒`;
|
|
42324
|
+
};
|
|
42325
|
+
/**
|
|
42326
|
+
* 从随包发布的 CHANGELOG 中提取指定数量的本地版本记录。
|
|
42327
|
+
* 读取失败时返回空字符串,让调用方决定降级展示或抛出错误。
|
|
42328
|
+
*
|
|
42329
|
+
* @param length 需要提取的版本数量
|
|
42330
|
+
*/
|
|
42331
|
+
var getLocalChangelog = (length) => {
|
|
42332
|
+
try {
|
|
42333
|
+
const changelogPath = path.join(Root.pluginPath, "CHANGELOG.md");
|
|
42334
|
+
const changelogContent = fs.readFileSync(changelogPath, "utf8");
|
|
42335
|
+
return logs({
|
|
42336
|
+
version: Root.pluginVersion,
|
|
42337
|
+
data: changelogContent,
|
|
42338
|
+
length
|
|
42339
|
+
});
|
|
42340
|
+
} catch {
|
|
42341
|
+
return "";
|
|
42342
|
+
}
|
|
42343
|
+
};
|
|
42344
|
+
/**
|
|
42345
|
+
* 采集 `#kkk版本` 使用的安全运行环境快照。
|
|
42346
|
+
*
|
|
42347
|
+
* 不采集账号、主机名、用户目录、网络地址、环境变量内容、启动参数或适配器鉴权信息,
|
|
42348
|
+
* 保证该命令在群聊中触发时不会把机器身份和凭据写入图片。
|
|
42349
|
+
*
|
|
42350
|
+
* @param event 当前消息事件
|
|
42351
|
+
*/
|
|
42352
|
+
var collectRuntimeReport = (event) => {
|
|
42353
|
+
const packageMetadata = Root.pkg;
|
|
42354
|
+
const adapter = event.bot.adapter;
|
|
42355
|
+
const cpus = os.cpus();
|
|
42356
|
+
const memory = process.memoryUsage();
|
|
42357
|
+
const totalMemory = os.totalmem();
|
|
42358
|
+
const usedMemory = Math.max(0, totalMemory - os.freemem());
|
|
42359
|
+
const buildMetadata = getBuildMetadata();
|
|
42360
|
+
const currentChangelog = getLocalChangelog(1);
|
|
42361
|
+
const renderScale = Math.min(2, Math.max(.5, Number(Config.app.renderScale) / 100));
|
|
42362
|
+
const buildState = !buildMetadata ? "unavailable" : buildMetadata.version === Root.pluginVersion ? "matched" : "mismatched";
|
|
42363
|
+
return {
|
|
42364
|
+
snapshotAt: new Intl.DateTimeFormat("zh-CN", {
|
|
42365
|
+
year: "numeric",
|
|
42366
|
+
month: "2-digit",
|
|
42367
|
+
day: "2-digit",
|
|
42368
|
+
hour: "2-digit",
|
|
42369
|
+
minute: "2-digit",
|
|
42370
|
+
second: "2-digit",
|
|
42371
|
+
hour12: false
|
|
42372
|
+
}).format(/* @__PURE__ */ new Date()),
|
|
42373
|
+
identity: {
|
|
42374
|
+
pluginName: Root.pluginName,
|
|
42375
|
+
pluginVersion: Root.pluginVersion,
|
|
42376
|
+
karinVersion: Root.karinVersion || "未知",
|
|
42377
|
+
releaseType: /^\d+\.\d+\.\d+$/.test(Root.pluginVersion) ? "Stable" : "Preview",
|
|
42378
|
+
requiredNodeVersion: packageMetadata.engines?.node ?? "未声明",
|
|
42379
|
+
requiredKarinVersion: packageMetadata.karin?.engines ?? packageMetadata.engines?.karin ?? "未声明"
|
|
42380
|
+
},
|
|
42381
|
+
build: {
|
|
42382
|
+
state: buildState,
|
|
42383
|
+
version: buildMetadata?.version,
|
|
42384
|
+
buildTime: buildMetadata?.buildTime ? formatBuildTime(buildMetadata.buildTime) : void 0,
|
|
42385
|
+
shortCommitHash: buildMetadata?.shortCommitHash
|
|
42386
|
+
},
|
|
42387
|
+
runtime: {
|
|
42388
|
+
nodeVersion: process.version,
|
|
42389
|
+
nodeEnv: process.env.NODE_ENV ?? "未设置",
|
|
42390
|
+
os: `${os.type()} ${os.release()}`,
|
|
42391
|
+
platform: os.platform(),
|
|
42392
|
+
arch: os.arch(),
|
|
42393
|
+
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone || "未知",
|
|
42394
|
+
container: isDocker,
|
|
42395
|
+
systemUptime: formatDuration(os.uptime()),
|
|
42396
|
+
processUptime: formatDuration(process.uptime())
|
|
42397
|
+
},
|
|
42398
|
+
adapter: {
|
|
42399
|
+
name: adapter.name || "未知",
|
|
42400
|
+
version: adapter.version || "未知",
|
|
42401
|
+
platform: String(adapter.platform || "未知"),
|
|
42402
|
+
protocol: String(adapter.protocol || "未知"),
|
|
42403
|
+
standard: String(adapter.standard || "未知"),
|
|
42404
|
+
communication: String(adapter.communication || "未知"),
|
|
42405
|
+
connectedFor: formatDuration(Math.max(0, (Date.now() - adapter.connectTime) / 1e3))
|
|
42406
|
+
},
|
|
42407
|
+
renderer: {
|
|
42408
|
+
scale: `${renderScale.toFixed(2)}x`,
|
|
42409
|
+
timeout: `${Config.app.RenderWaitTime}秒`,
|
|
42410
|
+
multiPage: Config.app.multiPageRender && adapter.protocol !== "qqbot"
|
|
42411
|
+
},
|
|
42412
|
+
resources: {
|
|
42413
|
+
cpuModel: cpus[0]?.model?.trim() || "未知处理器",
|
|
42414
|
+
cpuCores: cpus.length,
|
|
42415
|
+
totalMemory: formatBytes(totalMemory),
|
|
42416
|
+
usedMemory: formatBytes(usedMemory),
|
|
42417
|
+
memoryUsagePercent: totalMemory > 0 ? `${(usedMemory / totalMemory * 100).toFixed(1)}%` : "未知",
|
|
42418
|
+
processRss: formatBytes(memory.rss),
|
|
42419
|
+
heapUsed: formatBytes(memory.heapUsed)
|
|
42420
|
+
},
|
|
42421
|
+
releaseNotes: {
|
|
42422
|
+
markdown: currentChangelog,
|
|
42423
|
+
available: currentChangelog.length > 0
|
|
42424
|
+
}
|
|
42425
|
+
};
|
|
42426
|
+
};
|
|
42427
|
+
//#endregion
|
|
41824
42428
|
//#region src/apps/help.ts
|
|
41825
42429
|
var HELP_MENU_CONFIG = [
|
|
41826
42430
|
{
|
|
@@ -41925,8 +42529,13 @@ var HELP_MENU_CONFIG = [
|
|
|
41925
42529
|
{
|
|
41926
42530
|
title: "其他",
|
|
41927
42531
|
items: [{
|
|
42532
|
+
title: "#kkk版本",
|
|
42533
|
+
description: "查看插件、Karin、Node.js、适配器与系统资源等运行环境诊断信息",
|
|
42534
|
+
icon: "ph:monitor-fill",
|
|
42535
|
+
roles: ["member", "master"]
|
|
42536
|
+
}, {
|
|
41928
42537
|
title: "「#kkk更新日志」「#kkk更新」",
|
|
41929
|
-
description: "
|
|
42538
|
+
description: "查看更新日志或执行插件更新",
|
|
41930
42539
|
icon: "ph:arrows-clockwise-fill",
|
|
41931
42540
|
roles: ["master"]
|
|
41932
42541
|
}]
|
|
@@ -41975,22 +42584,25 @@ var handleHelp = wrapWithErrorHandler(async (e) => {
|
|
|
41975
42584
|
return true;
|
|
41976
42585
|
}, { businessName: "KKK帮助" });
|
|
41977
42586
|
var handleVersion = wrapWithErrorHandler(async (e) => {
|
|
41978
|
-
const
|
|
42587
|
+
const img = await Render(e, "other/runtime", collectRuntimeReport(e));
|
|
42588
|
+
await e.reply(img);
|
|
42589
|
+
return true;
|
|
42590
|
+
}, { businessName: "KKK版本" });
|
|
42591
|
+
var handleChangelog = wrapWithErrorHandler(async (e) => {
|
|
42592
|
+
const forwardLogs = getLocalChangelog(10);
|
|
42593
|
+
if (!forwardLogs) throw new Error("当前构建未携带可用的 CHANGELOG.md");
|
|
41979
42594
|
const img = await Render(e, "other/changelog", {
|
|
41980
|
-
markdown:
|
|
41981
|
-
version: Root.pluginVersion,
|
|
41982
|
-
data: changelogContent,
|
|
41983
|
-
length: 10
|
|
41984
|
-
}),
|
|
42595
|
+
markdown: forwardLogs,
|
|
41985
42596
|
Tip: false,
|
|
41986
42597
|
localVersion: "",
|
|
41987
42598
|
remoteVersion: ""
|
|
41988
42599
|
});
|
|
41989
|
-
e.reply(img);
|
|
42600
|
+
await e.reply(img);
|
|
41990
42601
|
return true;
|
|
41991
|
-
}, { businessName: "KKK
|
|
42602
|
+
}, { businessName: "KKK更新日志" });
|
|
41992
42603
|
var help = karin.command(/^#?kkk帮助$/, handleHelp, { name: "kkk-帮助" });
|
|
41993
|
-
var version = karin.command(/^#?kkk
|
|
42604
|
+
var version = karin.command(/^#?kkk版本$/, handleVersion, { name: "kkk-版本" });
|
|
42605
|
+
var changelog = karin.command(/^#?kkk更新日志$/, handleChangelog, { name: "kkk-更新日志" });
|
|
41994
42606
|
//#endregion
|
|
41995
42607
|
//#region src/apps/push.ts
|
|
41996
42608
|
var handleDouyinPush = wrapWithErrorHandler(async () => {
|
|
@@ -43636,7 +44248,7 @@ app$1.use(ASSETS_PREFIX, staticRouter);
|
|
|
43636
44248
|
app.use(KKK_PREFIX, app$1);
|
|
43637
44249
|
//#endregion
|
|
43638
44250
|
//#region src/setup.ts
|
|
43639
|
-
var requireVersion = "1.16.
|
|
44251
|
+
var requireVersion = "1.16.3";
|
|
43640
44252
|
if (process.env.NODE_ENV !== "development" && isSemverGreater(requireVersion, Root.karinVersion)) {
|
|
43641
44253
|
const msg = `[karin-plugin-kkk] 插件构建时的 karin 版本 (${requireVersion}) 高于当前运行版本 (${Root.karinVersion}),可能会出现兼容性问题!`;
|
|
43642
44254
|
logger.warn(msg);
|
|
@@ -43680,4 +44292,4 @@ mkdirSync(`${karinPathBase}/${Root.pluginName}/data`);
|
|
|
43680
44292
|
mkdirSync(Common.tempDri.images);
|
|
43681
44293
|
mkdirSync(Common.tempDri.video);
|
|
43682
44294
|
//#endregion
|
|
43683
|
-
export {
|
|
44295
|
+
export { createImageNode as $, xiaohongshuApiUrls as $n, emitLog as $r, MajorType as $t, testWrapWithErrorHandler as A, fetchResponse as An, BilibiliBangumiStreamParamsSchema as Ar, DouyinMethodMapping as At, StatisticsDBBase as B, createBoundDouyinFetcher as Bn, BilibiliMethodRoutes as Br, DouyinFetcherMethods as Bt, changelog as C, bv2av as Cn, DouyinWorkParamsSchema as Cr, softFetch as Ct, dylogin as D, logMiddleware as Dn, BilibiliArticleParamsSchema as Dr, BilibiliApiRoutes as Dt, biLogin as E, initLogger as En, BilibiliArticleInfoParamsSchema as Er, amagiClient$1 as Et, douyinDBInstance as F, createBoundKuaishouFetcher as Fn, BilibiliDanmakuParamsSchema as Fr, getApiRoute as Ft, renderRichTextToReact as G, createErrorResponse as Gn, BilibiliValidationSchemas as Gr, KuaishouMethodToFetcher as Gt, BilibiliDBBase as H, douyinSign as Hn, BilibiliQrcodeStatusParamsSchema as Hr, DouyinMethodToFetcher as Ht, getBilibiliDB as I, kuaishouFetcher$1 as In, BilibiliDynamicParamsSchema as Ir, getEnglishMethodName as It, createCodeBlockNode as J, validateDouyinParams as Jn, amagiEvents as Jr, XiaohongshuInternalMethods as Jt, createAtNode as K, createSuccessResponse$1 as Kn, BilibiliVideoDownloadParamsSchema as Kr, MethodMaps as Kt, getDouyinDB as L, kuaishouSign as Ln, BilibiliEmojiParamsSchema as Lr, BilibiliFetcherMethods as Lt, webConfig as M, isNetworkErrorResult as Mn, BilibiliColumnInfoParamsSchema as Mr, KuaishouMethodMapping as Mt, bilibiliDBInstance as N, createBoundXiaohongshuFetcher as Nn, BilibiliCommentParamsSchema as Nr, XiaohongshuApiRoutes as Nt, removeOldFiles as O, logger$2 as On, BilibiliAv2BvParamsSchema as Or, BilibiliMethodMapping as Ot, cleanOldDynamicCache as P, xiaohongshuFetcher$1 as Pn, BilibiliCommentReplyParamsSchema as Pr, XiaohongshuMethodMapping as Pt, createHorizontalRuleNode as Q, XiaohongshuValidationSchemas as Qn, emitHttpResponse as Qr, AdditionalType as Qt, getStatisticsDB as R, kuaishouApiUrls as Rn, BilibiliLiveParamsSchema as Rr, BilibiliInternalMethods as Rt, setdyPush as S, av2bv as Sn, DouyinValidationSchemas as Sr, reloadAmagiConfig as St, version as T, httpLogger as Tn, BilibiliArticleCardParamsSchema as Tr, amagi as Tt, reactServerRender as U, bilibiliFetcher$1 as Un, BilibiliUserParamsSchema as Ur, KuaishouFetcherMethods as Ut, DouyinDBBase as V, douyinApiUrls as Vn, BilibiliQrcodeParamsSchema as Vr, DouyinInternalMethods as Vt, renderVideoPreviewPage as W, createBoundBilibiliFetcher as Wn, BilibiliValidateCaptchaParamsSchema as Wr, KuaishouInternalMethods as Wt, createHashtagNode as X, validateXiaohongshuParams as Xn, emitApiSuccess as Xr, toFetcherMethod as Xt, createEmojiNode as Y, validateKuaishouParams as Yn, emitApiError as Yr, XiaohongshuMethodToFetcher as Yt, createHeadingNode as Z, XiaohongshuMethodRoutes as Zn, emitHttpRequest as Zr, DynamicType as Zt, douyinPush as _, ValidationError as _n, DouyinMusicParamsSchema as _r, AmagiError as _t, bilibiliAPP as a, emitNetworkError as ai, xiaohongshu$1 as an, KuaishouUserProfileParamsSchema as ar, createMentionNode as at, globalIgnore as b, wbi_sign as bn, DouyinUserListParamsSchema as br, douyinFetcher as bt, prefix as c, createBoundBilibiliApi as ci, createBoundKuaishouApi as cn, KuaishouVideoParamsSchema as cr, createSearchKeywordNode as ct, globalStatistics as d, getDouyinData as di, createDouyinRoutes as dn, DouyinDanmakuParamsSchema as dr, createViewPictureNode as dt, emitLogDebug as ei, CommentType as en, xiaohongshuSign as er, createLineBreakNode as et, groupStatistics as f, getKuaishouData as fi, createBoundDouyinApi as fn, DouyinEmojiListParamsSchema as fr, createVoteNode as ft, changeBotID as g, ApiError as gn, DouyinMethodRoutes as gr, AmagiBase as gt, bilibiliPushList as h, createBilibiliRoutes as hn, DouyinLiveRoomParamsSchema as hr, normalizeRichTextNodes as ht, update as i, emitLogWarn as ii, createBoundXiaohongshuApi as in, KuaishouMethodRoutes as ir, createLotteryNode as it, template_default as j, getHeadersAndData as jn, BilibiliBv2AvParamsSchema as jr, KuaishouApiRoutes as jt, task as k, fetchData as kn, BilibiliBangumiInfoParamsSchema as kr, DouyinApiRoutes as kt, xiaohongshuAPP as l, bilibiliApiUrls as li, kuaishou$1 as ln, DouyinCommentParamsSchema as lr, createTextNode as lt, bilibiliPush as m, bilibiliUtils as mn, DouyinHotWordsParamsSchema as mr, extractRichTextPlainText as mt, kkkUpdateCommand as n, emitLogInfo as ni, xiaohongshuUtils as nn, KuaishouEmojiParamsSchema as nr, createListItemNode as nt, douyinAPP as o, emitNetworkRetry as oi, kuaishouUtils as on, KuaishouUserWorkListParamsSchema as or, createParagraphNode as ot, qrLogin as p, Root as pi, douyin$1 as pn, DouyinEmojiProParamsSchema as pr, createWebLinkNode as pt, createBlockquoteNode as q, validateBilibiliParams as qn, BilibiliVideoParamsSchema as qr, XiaohongshuFetcherMethods as qt, kkkUpdateTest as r, emitLogMark as ri, createXiaohongshuRoutes as rn, KuaishouLiveRoomInfoParamsSchema as rr, createListNode as rt, kuaishouAPP as s, bilibili$1 as si, createKuaishouRoutes as sn, KuaishouValidationSchemas as sr, createRichTextDocument as st, kkkUpdate as t, emitLogError as ti, createAmagiClient as tn, KuaishouCommentParamsSchema as tr, createLinkCardNode as tt, testPush as u, getBilibiliData as ui, douyinUtils as un, DouyinCommentReplyParamsSchema as ur, createTopicNode as ut, douyinPushList as v, handleError as vn, DouyinQrcodeParamsSchema as vr, SOFT_ERROR_CODES as vt, help as w, qtparam as wn, BilibiliApplyCaptchaParamsSchema as wr, CreateApp as wt, setbiliPush as x, parseDmSegMobileReply as xn, DouyinUserParamsSchema as xr, kuaishouFetcher as xt, forcePush as y, bilibiliErrorCodeMap as yn, DouyinSearchParamsSchema as yr, bilibiliFetcher as yt, initAllDatabases as z, douyinFetcher$1 as zn, BilibiliLoginParamsSchema as zr, BilibiliMethodToFetcher as zt };
|