karin-plugin-kkk 2.27.4 → 2.27.6

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.
Files changed (91) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/lib/apps/__ready.js +1 -1
  3. package/lib/apps/admin.js +1 -1
  4. package/lib/apps/help.js +1 -1
  5. package/lib/apps/push.js +1 -1
  6. package/lib/apps/qrlogin.js +1 -1
  7. package/lib/apps/statistics.js +1 -1
  8. package/lib/apps/tools.js +1 -1
  9. package/lib/apps/update.js +1 -1
  10. package/lib/build-metadata.json +5 -5
  11. package/lib/core_chunk/ArticleWork-DM-2P7yk.js +2 -0
  12. package/lib/core_chunk/Comment-C7DipcGk.js +2 -0
  13. package/lib/core_chunk/Comment-DyzgsNH4.js +2 -0
  14. package/lib/core_chunk/Comment-_ehzzbCT.js +2 -0
  15. package/lib/core_chunk/{Comment-3FcCu8BO.js → Comment-vmLpukdO.js} +1 -1
  16. package/lib/core_chunk/{DYNAMIC_TYPE_ARTICLE-DIZ4FpfS.js → DYNAMIC_TYPE_ARTICLE-RG5B0GYl.js} +1 -1
  17. package/lib/core_chunk/{DYNAMIC_TYPE_AV-5WXLprJ7.js → DYNAMIC_TYPE_AV-BFmgJoig.js} +1 -1
  18. package/lib/core_chunk/{DYNAMIC_TYPE_DRAW-CA3dYbCJ.js → DYNAMIC_TYPE_DRAW-Be8d7lCg.js} +1 -1
  19. package/lib/core_chunk/{DYNAMIC_TYPE_FORWARD-DEna4cpV.js → DYNAMIC_TYPE_FORWARD-SRgseEdb.js} +1 -1
  20. package/lib/core_chunk/{DYNAMIC_TYPE_LIVE_RCMD-BpDR7WHh.js → DYNAMIC_TYPE_LIVE_RCMD-CDBDKK4u.js} +1 -1
  21. package/lib/core_chunk/{DYNAMIC_TYPE_WORD-uj6LDApK.js → DYNAMIC_TYPE_WORD-D_qb-nmj.js} +1 -1
  22. package/lib/core_chunk/Dynamic-C7sZ7_VA.js +2 -0
  23. package/lib/core_chunk/FavoriteList-BKRXkpgr.js +2 -0
  24. package/lib/core_chunk/GlobalStatistics-D5SYUMFx.js +2 -0
  25. package/lib/core_chunk/GroupStatistics-Mkeip-kD.js +2 -0
  26. package/lib/core_chunk/Help-CSQsl-iG.js +2 -0
  27. package/lib/core_chunk/ImageWork-BjlkvEZl.js +2 -0
  28. package/lib/core_chunk/Live-CBi-Jg5R.js +2 -0
  29. package/lib/core_chunk/MusicInfo-CgN5WBVO.js +2 -0
  30. package/lib/core_chunk/RecommendList-CVmqCepV.js +2 -0
  31. package/lib/core_chunk/UserList-BvG2QasY.js +2 -0
  32. package/lib/core_chunk/UserList-CTZhILez.js +2 -0
  33. package/lib/core_chunk/UserVideoList-B7KG12MD.js +2 -0
  34. package/lib/core_chunk/VersionWarning--dZBxhCO.js +2 -0
  35. package/lib/core_chunk/VideoWork-CLCN8U6n.js +2 -0
  36. package/lib/core_chunk/amagiClient-DutWjgMV.js +2 -0
  37. package/lib/core_chunk/bangumi-U94Tg-9H.js +2 -0
  38. package/lib/core_chunk/changelog-COLIz9yq.js +2 -0
  39. package/lib/core_chunk/db-DQ021gxp.js +2 -0
  40. package/lib/core_chunk/dist-BAaLyQpB.js +2 -0
  41. package/lib/core_chunk/handlerError-CZimBCI0.js +2 -0
  42. package/lib/core_chunk/{main-6Y7nyjx4.js → main-CH1PySBD.js} +627 -363
  43. package/lib/core_chunk/{noteInfo-ceSqTSrs.js → noteInfo-Cc0CdOh6.js} +1 -1
  44. package/lib/core_chunk/qrcodeImg-Cwm5rWx0.js +2 -0
  45. package/lib/core_chunk/qrcodeImg-DLK0ebMK.js +2 -0
  46. package/lib/core_chunk/qrlogin-V7NbxsLi.js +2 -0
  47. package/lib/core_chunk/setup-R3MsfOHe.js +2 -0
  48. package/lib/core_chunk/template.d.mts +351 -15
  49. package/lib/core_chunk/template.js +1 -1
  50. package/lib/core_chunk/{vendor-C2bazYnS.js → vendor-BVonRw7I.js} +6444 -180
  51. package/lib/core_chunk/videoInfo-BsvVR1g1.js +2 -0
  52. package/lib/core_chunk/videoInfo-CZIF1cOh.js +2 -0
  53. package/lib/index.js +1 -1
  54. package/lib/karin-plugin-kkk.css +41 -2
  55. package/lib/root.js +1 -1
  56. package/lib/web.config.js +1 -1
  57. package/package.json +2 -2
  58. package/resources/image/other/handlerError/Milky.png +0 -0
  59. package/resources/image/other/handlerError/onebot.png +0 -0
  60. package/resources/image/other/handlerError/satori.png +0 -0
  61. package/lib/core_chunk/ArticleWork-B_N5AkIO.js +0 -2
  62. package/lib/core_chunk/Comment-B114EV7_.js +0 -2
  63. package/lib/core_chunk/Comment-DnBi7suz.js +0 -2
  64. package/lib/core_chunk/Comment-jN3Jrbqy.js +0 -2
  65. package/lib/core_chunk/Dynamic-CjBqyS5b.js +0 -2
  66. package/lib/core_chunk/FavoriteList-DqEIdIRs.js +0 -2
  67. package/lib/core_chunk/GlobalStatistics-CjRmAre5.js +0 -2
  68. package/lib/core_chunk/GroupStatistics-B1KiWL8O.js +0 -2
  69. package/lib/core_chunk/Help-cUrYFfcV.js +0 -2
  70. package/lib/core_chunk/ImageWork-Q04TjdP2.js +0 -2
  71. package/lib/core_chunk/Live-9Ap-uSUG.js +0 -2
  72. package/lib/core_chunk/MusicInfo-DTgkPZdV.js +0 -2
  73. package/lib/core_chunk/RecommendList-zmL3tGkI.js +0 -2
  74. package/lib/core_chunk/UserList-DXZAtRSu.js +0 -2
  75. package/lib/core_chunk/UserList-DpZY5fHU.js +0 -2
  76. package/lib/core_chunk/UserVideoList-BjL0jy7v.js +0 -2
  77. package/lib/core_chunk/VersionWarning-Brat9oYa.js +0 -2
  78. package/lib/core_chunk/VideoWork-BNvQCKg2.js +0 -2
  79. package/lib/core_chunk/amagiClient-ATxzS7iY.js +0 -2
  80. package/lib/core_chunk/bangumi-Dn8bqGCx.js +0 -2
  81. package/lib/core_chunk/changelog-BEPsRL3p.js +0 -2
  82. package/lib/core_chunk/db-UHhoG96T.js +0 -2
  83. package/lib/core_chunk/dist-BN09jDjE.js +0 -2
  84. package/lib/core_chunk/handlerError-BdKMBVs1.js +0 -2
  85. package/lib/core_chunk/qrcodeImg-8IjCL_dz.js +0 -2
  86. package/lib/core_chunk/qrcodeImg-DYsRwngE.js +0 -2
  87. package/lib/core_chunk/qrlogin-zLF4JsCE.js +0 -2
  88. package/lib/core_chunk/setup-9JCJqKat.js +0 -2
  89. package/lib/core_chunk/videoInfo-C6b97ZWx.js +0 -2
  90. package/lib/core_chunk/videoInfo-JeaHNtaa.js +0 -2
  91. package/resources/image/other/handlerError/cxk.png +0 -0
@@ -1,11 +1,11 @@
1
1
  import { o as __toESM } from "./rolldown-runtime-8i3BgXHp.js";
2
- import { $ as RiTrophyFill, $t as require_qr_code_styling, A as RiBellFill, At as Eye, B as RiLoginCircleFill, Bt as ChartColumn, C as AiOutlineVideoCamera, Ct as MapPin, D as LuFullscreen, Dt as Gift, E as SiBilibili, Et as Hash, F as RiHeart3Line, Ft as Clock, G as RiRobot2Fill, Gt as require_dist, H as RiPieChart2Fill, Ht as Bookmark, I as RiLineChartFill, It as CircleFadingArrowUp, J as RiSparkling2Fill, Jt as zhCN, K as RiSendPlaneFill, Kt as require_lib, L as RiLinkM, Lt as CircleEllipsis, M as RiHashtag, Mt as Crown, N as RiHeart2Line, Nt as CornerDownLeft, O as RiArrowRightFill, Ot as Gamepad2, P as RiHeart3Fill, Pt as Coins, Q as RiTiktokFill, Qt as differenceInSeconds, R as RiListCheck2, Rt as CircleCheckBig, S as AiFillStar, St as MessageCircle, T as Markdown, Tt as Heart, U as RiQuestionFill, Ut as BookOpen, V as RiMessage3Fill, Vt as Calendar, W as RiRefreshLine, Wt as Bell, X as RiStarLine, Xt as formatDistanceToNow, Y as RiStarFill, Yt as fromUnixTime, Z as RiThumbUpFill, Zt as format, _ as FaTiktok, _n as AxiosError$1, _t as Quote, a as VictoryChart, an as button_default, at as User, b as AiFillHeart, bn as zod_default, bt as Play, c as VictoryTheme, cn as clsx, ct as ThumbsUp, d as MdAccessTime, dn as require_jsQR, dt as Smartphone, en as Window, et as RiUserFollowLine, f as MdLocationOn, fn as require_jpeg_js, ft as Shield, g as FaMusic, gn as Chalk, gt as Radio, h as FaCommentDots, hn as require_protobufjs, ht as ScanLine, i as VictoryLine, in as chip_default, it as Users, j as RiGroupLine, jt as ExternalLink, k as RiBarChartFill, kt as FileText, l as TbScan, ln as require_react, lt as Terminal, m as FaCodeBranch, mn as require_express, mt as Share2, n as VictoryScatter, nn as require_server_node, nt as RiVideoLine, o as VictoryAxis, on as HeroUIProvider, ot as UserPlus, p as MdOutlineLightbulb, pn as require_heic_decode, pt as ShieldCheck, q as RiShareForwardFill, r as VictoryPie, rn as code_default, rt as Zap, s as VictoryLabel, sn as require_jsx_runtime, st as TriangleAlert, t as rehypeHighlight, tn as purify, tt as RiVerifiedBadgeFill, u as HiOutlineMenuAlt2, un as require_png, ut as Star, v as FaUserGroup, vn as axios$1, vt as QrCode, w as IoSearch, wt as Info, x as AiFillPushpin, xt as Music, y as BsImage, yn as Xhshow, yt as Plug2, z as RiLiveLine, zt as CircleAlert } from "./vendor-C2bazYnS.js";
2
+ import { $ as RiThumbUpFill, $t as format, A as RiArrowRightFill, At as FileText, B as RiListCheck2, Bt as CircleAlert, C as AiFillStar, Ct as MessageCircle, D as Markdown, Dt as Hash, E as IoSearch, Et as Heart, F as RiHeart2Line, Ft as Coins, G as RiQuestionFill, Gt as Bell, H as RiLoginCircleFill, Ht as Calendar, I as RiHeart3Fill, It as Clock, J as RiSendPlaneFill, K as RiRefreshLine, Kt as require_dist, L as RiHeart3Line, Lt as CircleFadingArrowUp, M as RiBellFill, Mt as ExternalLink, N as RiGroupLine, Nt as Crown, O as SiBilibili, Ot as Gift, P as RiHashtag, Pt as CornerDownLeft, Q as RiStarLine, Qt as formatDistanceToNow, R as RiLineChartFill, Rt as CircleEllipsis, S as AiFillPushpin, Sn as zod_default, St as Music, T as IoExtensionPuzzleOutline, Tt as Info, U as RiMessage3Fill, Ut as Bookmark, V as RiLiveLine, Vt as ChartColumn, W as RiPieChart2Fill, Wt as BookOpen, X as RiSparkling2Fill, Xt as parse, Y as RiShareForwardFill, Yt as zhCN, Z as RiStarFill, Zt as fromUnixTime, _ as FaMusic, _n as require_protobufjs, _t as ScanLine, a as VictoryLine, an as code_default, at as Zap, b as BsImage, bn as axios$1, bt as QrCode, c as VictoryLabel, cn as HeroUIProvider, ct as UserPlus, d as HiOutlineMenuAlt2, dn as require_react, dt as Terminal, en as differenceInSeconds, et as RiTiktokFill, f as MdAccessTime, fn as require_png, ft as Star, g as FaCommentDots, gn as require_express, gt as Share2, h as FaCodeBranch, hn as require_heic_decode, ht as ShieldCheck, i as VictoryPie, in as require_server_node, it as RiVideoLine, j as RiBarChartFill, jt as Eye, k as LuFullscreen, kt as Gamepad2, l as VictoryTheme, ln as require_jsx_runtime, lt as TriangleAlert, m as MdOutlineLightbulb, mn as require_jpeg_js, mt as Shield, n as rehypeHighlight, nn as Window, nt as RiUserFollowLine, o as VictoryChart, on as chip_default, ot as Users, p as MdLocationOn, pn as require_jsQR, pt as Smartphone, q as RiRobot2Fill, qt as require_lib, r as VictoryScatter, rn as purify, rt as RiVerifiedBadgeFill, s as VictoryAxis, sn as button_default, st as User, t as require_lodash, tn as require_qr_code_styling, tt as RiTrophyFill, u as TbScan, un as clsx, ut as ThumbsUp, v as FaTiktok, vn as Chalk, vt as Radio, w as AiOutlineVideoCamera, wt as MapPin, x as AiFillHeart, xn as Xhshow, xt as Play, y as FaUserGroup, yn as AxiosError$1, yt as Quote, z as RiLinkM, zt as CircleCheckBig } from "./vendor-BVonRw7I.js";
3
3
  import "node:module";
4
4
  import fs from "node:fs";
5
5
  import path, { resolve } from "node:path";
6
6
  import URL$1, { fileURLToPath } from "node:url";
7
7
  import os, { platform } from "node:os";
8
- import karin$1, { BOT_CONNECT, app, authMiddleware, checkPkgUpdate, checkPort, common, components, config, copyConfigSync, createBadRequestResponse, createNotFoundResponse, createServerErrorResponse, createSuccessResponse, db, defineConfig, ffmpeg, ffprobe, filesByExt, getBot, hooks, karin, karinPathHtml, karinPathTemp, logger, logger as logger$1, logs, mkdirSync, range, render, requireFileSync, restart, segment, updatePkg, watch } from "node-karin";
8
+ import karin$1, { BOT_CONNECT, app, authMiddleware, checkPkgUpdate, checkPort, common, components, config, copyConfigSync, createBadRequestResponse, createNotFoundResponse, createServerErrorResponse, createSuccessResponse, db, defineConfig, ffmpeg, ffprobe, filesByExt, getBot, hooks, karin, karinPathHtml, karinPathTemp, logger, logger as logger$1, logs, mkdirSync, parseChangelog, range, render, requireFileSync, restart, segment, updatePkg, watch } from "node-karin";
9
9
  import _ from "node-karin/lodash";
10
10
  import { EventEmitter } from "node:events";
11
11
  import crypto from "node:crypto";
@@ -21,7 +21,7 @@ import { snapka } from "@snapka/puppeteer";
21
21
  import { newInjectedPage } from "fingerprint-injector";
22
22
  import express from "node-karin/express";
23
23
  globalThis.__kkkLoadStart ??= process.hrtime.bigint();
24
- import("./setup-9JCJqKat.js");
24
+ import("./setup-R3MsfOHe.js");
25
25
  var resolvePluginRoot = (startUrl) => {
26
26
  let dir = path.dirname(startUrl);
27
27
  for (let i = 0; i < 8; i++) {
@@ -5213,7 +5213,7 @@ var Cfg = class {
5213
5213
  const fileName = path.basename(file, ".yaml");
5214
5214
  if (fileName === "cookies" || fileName === "request") {
5215
5215
  logger.debug(`[Config] 检测到 ${fileName} 配置变化,正在重载 Amagi Client...`);
5216
- import("./amagiClient-ATxzS7iY.js").then(({ reloadAmagiConfig }) => {
5216
+ import("./amagiClient-DutWjgMV.js").then(({ reloadAmagiConfig }) => {
5217
5217
  reloadAmagiConfig();
5218
5218
  }).catch((error) => {
5219
5219
  logger.error(`[Config] 重载 Amagi Client 失败: ${error}`);
@@ -5232,7 +5232,7 @@ var Cfg = class {
5232
5232
  };
5233
5233
  }
5234
5234
  async All() {
5235
- const { getDouyinDB, getBilibiliDB } = await import("./db-UHhoG96T.js");
5235
+ const { getDouyinDB, getBilibiliDB } = await import("./db-DQ021gxp.js");
5236
5236
  const douyinDB = await getDouyinDB();
5237
5237
  const bilibiliDB = await getBilibiliDB();
5238
5238
  const allConfig = {};
@@ -5274,7 +5274,7 @@ var Cfg = class {
5274
5274
  fs.writeFileSync(path, yamlData.toString({ lineWidth: -1 }), "utf8");
5275
5275
  }
5276
5276
  async ModifyPro(name, config, type = "config") {
5277
- const { getDouyinDB, getBilibiliDB } = await import("./db-UHhoG96T.js");
5277
+ const { getDouyinDB, getBilibiliDB } = await import("./db-DQ021gxp.js");
5278
5278
  const douyinDB = await getDouyinDB();
5279
5279
  const bilibiliDB = await getBilibiliDB();
5280
5280
  const filePath = type === "config" ? `${this.dirCfgPath}/${name}.yaml` : `${this.defCfgPath}/${name}.yaml`;
@@ -5379,7 +5379,7 @@ var Cfg = class {
5379
5379
  }
5380
5380
  async syncConfigToDatabase() {
5381
5381
  try {
5382
- const { getDouyinDB, getBilibiliDB } = await import("./db-UHhoG96T.js");
5382
+ const { getDouyinDB, getBilibiliDB } = await import("./db-DQ021gxp.js");
5383
5383
  const douyinDB = await getDouyinDB();
5384
5384
  const bilibiliDB = await getBilibiliDB();
5385
5385
  const pushCfg = this.getYaml("config", "pushlist");
@@ -8030,47 +8030,47 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8030
8030
  switch (baseComponent.id) {
8031
8031
  case "comment": return createComponentConfig(baseComponent, {
8032
8032
  validateData: (data) => data && typeof data.share_url === "string",
8033
- lazyComponent: () => import("./Comment-jN3Jrbqy.js").then((module) => ({ default: module.DouyinComment }))
8033
+ lazyComponent: () => import("./Comment-C7DipcGk.js").then((module) => ({ default: module.DouyinComment }))
8034
8034
  });
8035
8035
  case "dynamic": return createComponentConfig(baseComponent, {
8036
8036
  validateData: (data) => data && typeof data.share_url === "string",
8037
- lazyComponent: () => import("./Dynamic-CjBqyS5b.js").then((module) => ({ default: module.DouyinDynamic }))
8037
+ lazyComponent: () => import("./Dynamic-C7sZ7_VA.js").then((module) => ({ default: module.DouyinDynamic }))
8038
8038
  });
8039
8039
  case "video-work": return createComponentConfig(baseComponent, {
8040
8040
  validateData: (data) => data && typeof data.share_url === "string",
8041
- lazyComponent: () => import("./VideoWork-BNvQCKg2.js").then((module) => ({ default: module.DouyinVideoWork }))
8041
+ lazyComponent: () => import("./VideoWork-CLCN8U6n.js").then((module) => ({ default: module.DouyinVideoWork }))
8042
8042
  });
8043
8043
  case "image-work": return createComponentConfig(baseComponent, {
8044
8044
  validateData: (data) => data && typeof data.share_url === "string",
8045
- lazyComponent: () => import("./ImageWork-Q04TjdP2.js").then((module) => ({ default: module.DouyinImageWork }))
8045
+ lazyComponent: () => import("./ImageWork-BjlkvEZl.js").then((module) => ({ default: module.DouyinImageWork }))
8046
8046
  });
8047
8047
  case "article-work": return createComponentConfig(baseComponent, {
8048
8048
  validateData: (data) => data && typeof data.share_url === "string",
8049
- lazyComponent: () => import("./ArticleWork-B_N5AkIO.js").then((module) => ({ default: module.DouyinArticleWork }))
8049
+ lazyComponent: () => import("./ArticleWork-DM-2P7yk.js").then((module) => ({ default: module.DouyinArticleWork }))
8050
8050
  });
8051
8051
  case "favorite-list": return createComponentConfig(baseComponent, {
8052
8052
  validateData: (data) => data && typeof data.share_url === "string",
8053
- lazyComponent: () => import("./FavoriteList-DqEIdIRs.js").then((module) => ({ default: module.DouyinFavoriteList }))
8053
+ lazyComponent: () => import("./FavoriteList-BKRXkpgr.js").then((module) => ({ default: module.DouyinFavoriteList }))
8054
8054
  });
8055
8055
  case "recommend-list": return createComponentConfig(baseComponent, {
8056
8056
  validateData: (data) => data && typeof data.share_url === "string",
8057
- lazyComponent: () => import("./RecommendList-zmL3tGkI.js").then((module) => ({ default: module.DouyinRecommendList }))
8057
+ lazyComponent: () => import("./RecommendList-CVmqCepV.js").then((module) => ({ default: module.DouyinRecommendList }))
8058
8058
  });
8059
8059
  case "live": return createComponentConfig(baseComponent, {
8060
8060
  validateData: (data) => data && typeof data.share_url === "string",
8061
- lazyComponent: () => import("./Live-9Ap-uSUG.js").then((module) => ({ default: module.DouyinLive }))
8061
+ lazyComponent: () => import("./Live-CBi-Jg5R.js").then((module) => ({ default: module.DouyinLive }))
8062
8062
  });
8063
8063
  case "musicinfo": return createComponentConfig(baseComponent, {
8064
8064
  validateData: (data) => data && typeof data.share_url === "string",
8065
- lazyComponent: () => import("./MusicInfo-DTgkPZdV.js").then((module) => ({ default: module.DouyinMusicInfo }))
8065
+ lazyComponent: () => import("./MusicInfo-CgN5WBVO.js").then((module) => ({ default: module.DouyinMusicInfo }))
8066
8066
  });
8067
- case "user_profile": return createComponentConfig(baseComponent, { lazyComponent: () => import("./UserVideoList-BjL0jy7v.js").then((module) => ({ default: module.DouyinUserVideoList })) });
8067
+ case "user_profile": return createComponentConfig(baseComponent, { lazyComponent: () => import("./UserVideoList-B7KG12MD.js").then((module) => ({ default: module.DouyinUserVideoList })) });
8068
8068
  case "userlist": return createComponentConfig(baseComponent, {
8069
8069
  validateData: (data) => data && Array.isArray(data.renderOpt),
8070
- lazyComponent: () => import("./UserList-DpZY5fHU.js").then((module) => ({ default: module.default }))
8070
+ lazyComponent: () => import("./UserList-CTZhILez.js").then((module) => ({ default: module.default }))
8071
8071
  });
8072
- case "videoInfo": return createComponentConfig(baseComponent, { lazyComponent: () => import("./videoInfo-JeaHNtaa.js").then((module) => ({ default: module.DouyinVideoInfo })) });
8073
- case "qrcodeImg": return createComponentConfig(baseComponent, { lazyComponent: () => import("./qrcodeImg-DYsRwngE.js").then((module) => ({ default: module.DouyinQrcodeImg })) });
8072
+ case "videoInfo": return createComponentConfig(baseComponent, { lazyComponent: () => import("./videoInfo-BsvVR1g1.js").then((module) => ({ default: module.DouyinVideoInfo })) });
8073
+ case "qrcodeImg": return createComponentConfig(baseComponent, { lazyComponent: () => import("./qrcodeImg-Cwm5rWx0.js").then((module) => ({ default: module.DouyinQrcodeImg })) });
8074
8074
  default: return createComponentConfig(baseComponent);
8075
8075
  }
8076
8076
  });
@@ -8080,42 +8080,42 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8080
8080
  switch (baseComponent.id) {
8081
8081
  case "comment": return createComponentConfig(baseComponent, {
8082
8082
  validateData: (data) => data && typeof data.share_url === "string",
8083
- lazyComponent: () => import("./Comment-DnBi7suz.js").then((module) => ({ default: module.BilibiliComment }))
8083
+ lazyComponent: () => import("./Comment-_ehzzbCT.js").then((module) => ({ default: module.BilibiliComment }))
8084
8084
  });
8085
8085
  case "userlist": return createComponentConfig(baseComponent, {
8086
8086
  validateData: (data) => data && Array.isArray(data.renderOpt),
8087
- lazyComponent: () => import("./UserList-DXZAtRSu.js").then((module) => ({ default: module.default }))
8087
+ lazyComponent: () => import("./UserList-BvG2QasY.js").then((module) => ({ default: module.default }))
8088
8088
  });
8089
- case "bangumi": return createComponentConfig(baseComponent, { lazyComponent: () => import("./bangumi-Dn8bqGCx.js").then((module) => ({ default: module.default })) });
8089
+ case "bangumi": return createComponentConfig(baseComponent, { lazyComponent: () => import("./bangumi-U94Tg-9H.js").then((module) => ({ default: module.default })) });
8090
8090
  case "dynamic/DYNAMIC_TYPE_DRAW": return createComponentConfig(baseComponent, {
8091
8091
  validateData: (data) => data && typeof data.share_url === "string",
8092
- lazyComponent: () => import("./DYNAMIC_TYPE_DRAW-CA3dYbCJ.js").then((module) => ({ default: module.BilibiliDrawDynamic }))
8092
+ lazyComponent: () => import("./DYNAMIC_TYPE_DRAW-Be8d7lCg.js").then((module) => ({ default: module.BilibiliDrawDynamic }))
8093
8093
  });
8094
8094
  case "dynamic/DYNAMIC_TYPE_WORD": return createComponentConfig(baseComponent, {
8095
8095
  validateData: (data) => data && typeof data.share_url === "string",
8096
- lazyComponent: () => import("./DYNAMIC_TYPE_WORD-uj6LDApK.js").then((module) => ({ default: module.BilibiliWordDynamic }))
8096
+ lazyComponent: () => import("./DYNAMIC_TYPE_WORD-D_qb-nmj.js").then((module) => ({ default: module.BilibiliWordDynamic }))
8097
8097
  });
8098
8098
  case "dynamic/DYNAMIC_TYPE_AV": return createComponentConfig(baseComponent, {
8099
8099
  validateData: (data) => data && typeof data.share_url === "string",
8100
- lazyComponent: () => import("./DYNAMIC_TYPE_AV-5WXLprJ7.js").then((module) => ({ default: module.BilibiliVideoDynamic }))
8100
+ lazyComponent: () => import("./DYNAMIC_TYPE_AV-BFmgJoig.js").then((module) => ({ default: module.BilibiliVideoDynamic }))
8101
8101
  });
8102
8102
  case "dynamic/DYNAMIC_TYPE_FORWARD": return createComponentConfig(baseComponent, {
8103
8103
  validateData: (data) => data && typeof data.share_url === "string",
8104
- lazyComponent: () => import("./DYNAMIC_TYPE_FORWARD-DEna4cpV.js").then((module) => ({ default: module.BilibiliForwardDynamic }))
8104
+ lazyComponent: () => import("./DYNAMIC_TYPE_FORWARD-SRgseEdb.js").then((module) => ({ default: module.BilibiliForwardDynamic }))
8105
8105
  });
8106
8106
  case "dynamic/DYNAMIC_TYPE_LIVE_RCMD": return createComponentConfig(baseComponent, {
8107
8107
  validateData: (data) => data && typeof data.share_url === "string",
8108
- lazyComponent: () => import("./DYNAMIC_TYPE_LIVE_RCMD-BpDR7WHh.js").then((module) => ({ default: module.BilibiliLiveDynamic }))
8108
+ lazyComponent: () => import("./DYNAMIC_TYPE_LIVE_RCMD-CDBDKK4u.js").then((module) => ({ default: module.BilibiliLiveDynamic }))
8109
8109
  });
8110
8110
  case "dynamic/DYNAMIC_TYPE_WORD": return createComponentConfig(baseComponent, { validateData: (data) => data && typeof data.share_url === "string" });
8111
- case "dynamic/DYNAMIC_TYPE_ARTICLE": return createComponentConfig(baseComponent, { lazyComponent: () => import("./DYNAMIC_TYPE_ARTICLE-DIZ4FpfS.js").then((module) => ({ default: module.BilibiliArticleDynamic })) });
8111
+ case "dynamic/DYNAMIC_TYPE_ARTICLE": return createComponentConfig(baseComponent, { lazyComponent: () => import("./DYNAMIC_TYPE_ARTICLE-RG5B0GYl.js").then((module) => ({ default: module.BilibiliArticleDynamic })) });
8112
8112
  case "videoInfo": return createComponentConfig(baseComponent, {
8113
8113
  validateData: (data) => data && typeof data.share_url === "string",
8114
- lazyComponent: () => import("./videoInfo-C6b97ZWx.js").then((module) => ({ default: module.BilibiliVideoInfo }))
8114
+ lazyComponent: () => import("./videoInfo-CZIF1cOh.js").then((module) => ({ default: module.BilibiliVideoInfo }))
8115
8115
  });
8116
8116
  case "qrcodeImg": return createComponentConfig(baseComponent, {
8117
8117
  validateData: (data) => data && typeof data.share_url === "string",
8118
- lazyComponent: () => import("./qrcodeImg-8IjCL_dz.js").then((module) => ({ default: module.BilibiliQrcodeImg }))
8118
+ lazyComponent: () => import("./qrcodeImg-DLK0ebMK.js").then((module) => ({ default: module.BilibiliQrcodeImg }))
8119
8119
  });
8120
8120
  default: return createComponentConfig(baseComponent);
8121
8121
  }
@@ -8126,7 +8126,7 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8126
8126
  switch (baseComponent.id) {
8127
8127
  case "comment": return createComponentConfig(baseComponent, {
8128
8128
  validateData: (data) => data && typeof data.share_url === "string",
8129
- lazyComponent: () => import("./Comment-B114EV7_.js").then((module) => ({ default: module.KuaishouComment }))
8129
+ lazyComponent: () => import("./Comment-DyzgsNH4.js").then((module) => ({ default: module.KuaishouComment }))
8130
8130
  });
8131
8131
  default: return createComponentConfig(baseComponent);
8132
8132
  }
@@ -8135,8 +8135,8 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8135
8135
  case PlatformType.XIAOHONGSHU:
8136
8136
  platform.components = basePlatform.components.map((baseComponent) => {
8137
8137
  switch (baseComponent.id) {
8138
- case "noteInfo": return createComponentConfig(baseComponent, { lazyComponent: () => import("./noteInfo-ceSqTSrs.js").then((module) => ({ default: module.XiaohongshuNoteInfo })) });
8139
- case "comment": return createComponentConfig(baseComponent, { lazyComponent: () => import("./Comment-3FcCu8BO.js").then((module) => ({ default: module.XiaohongshuComment })) });
8138
+ case "noteInfo": return createComponentConfig(baseComponent, { lazyComponent: () => import("./noteInfo-Cc0CdOh6.js").then((module) => ({ default: module.XiaohongshuNoteInfo })) });
8139
+ case "comment": return createComponentConfig(baseComponent, { lazyComponent: () => import("./Comment-vmLpukdO.js").then((module) => ({ default: module.XiaohongshuComment })) });
8140
8140
  default: return createComponentConfig(baseComponent);
8141
8141
  }
8142
8142
  });
@@ -8144,11 +8144,11 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8144
8144
  case PlatformType.OTHER:
8145
8145
  platform.components = basePlatform.components.map((baseComponent) => {
8146
8146
  switch (baseComponent.id) {
8147
- case "help": return createComponentConfig(baseComponent, { lazyComponent: () => import("./Help-cUrYFfcV.js").then((module) => ({ default: module.default })) });
8148
- case "handlerError": return createComponentConfig(baseComponent, { lazyComponent: () => import("./handlerError-BdKMBVs1.js").then((module) => ({ default: module.handlerError })) });
8149
- case "changelog": return createComponentConfig(baseComponent, { lazyComponent: () => import("./changelog-BEPsRL3p.js").then((module) => ({ default: module.Changelog })) });
8150
- case "version_warning": return createComponentConfig(baseComponent, { lazyComponent: () => import("./VersionWarning-Brat9oYa.js").then((module) => ({ default: module.VersionWarning })) });
8151
- case "qrlogin": return createComponentConfig(baseComponent, { lazyComponent: () => import("./qrlogin-zLF4JsCE.js").then((module) => ({ default: module.QrLogin })) });
8147
+ case "help": return createComponentConfig(baseComponent, { lazyComponent: () => import("./Help-CSQsl-iG.js").then((module) => ({ default: module.default })) });
8148
+ case "handlerError": return createComponentConfig(baseComponent, { lazyComponent: () => import("./handlerError-CZimBCI0.js").then((module) => ({ default: module.handlerError })) });
8149
+ case "changelog": return createComponentConfig(baseComponent, { lazyComponent: () => import("./changelog-COLIz9yq.js").then((module) => ({ default: module.Changelog })) });
8150
+ case "version_warning": return createComponentConfig(baseComponent, { lazyComponent: () => import("./VersionWarning--dZBxhCO.js").then((module) => ({ default: module.VersionWarning })) });
8151
+ case "qrlogin": return createComponentConfig(baseComponent, { lazyComponent: () => import("./qrlogin-V7NbxsLi.js").then((module) => ({ default: module.QrLogin })) });
8152
8152
  default: return createComponentConfig(baseComponent);
8153
8153
  }
8154
8154
  });
@@ -8156,8 +8156,8 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
8156
8156
  case PlatformType.STATISTICS:
8157
8157
  platform.components = basePlatform.components.map((baseComponent) => {
8158
8158
  switch (baseComponent.id) {
8159
- case "group": return createComponentConfig(baseComponent, { lazyComponent: () => import("./GroupStatistics-B1KiWL8O.js").then((module) => ({ default: module.GroupStatistics })) });
8160
- case "global": return createComponentConfig(baseComponent, { lazyComponent: () => import("./GlobalStatistics-CjRmAre5.js").then((module) => ({ default: module.GlobalStatistics })) });
8159
+ case "group": return createComponentConfig(baseComponent, { lazyComponent: () => import("./GroupStatistics-Mkeip-kD.js").then((module) => ({ default: module.GroupStatistics })) });
8160
+ case "global": return createComponentConfig(baseComponent, { lazyComponent: () => import("./GlobalStatistics-D5SYUMFx.js").then((module) => ({ default: module.GlobalStatistics })) });
8161
8161
  default: return createComponentConfig(baseComponent);
8162
8162
  }
8163
8163
  });
@@ -12421,7 +12421,6 @@ var renderErrorImage = async (ctx, opts = {}) => {
12421
12421
  buildTime: buildMetadata?.buildTime ? formatBuildTime(buildMetadata.buildTime) : void 0,
12422
12422
  commitHash: buildMetadata?.commitHash,
12423
12423
  adapterInfo,
12424
- amagiVersion: Client.version,
12425
12424
  isVerification: opts.isVerification,
12426
12425
  verificationUrl: opts.verificationUrl,
12427
12426
  share_url: opts.share_url
@@ -12601,13 +12600,7 @@ var handleBusinessError = async (error, options, logs, event) => {
12601
12600
  logs,
12602
12601
  event,
12603
12602
  buildMetadata: getBuildMetadata(),
12604
- adapterInfo: event.bot?.adapter ? {
12605
- name: event.bot.adapter.name,
12606
- version: event.bot.adapter.version,
12607
- platform: event.bot.adapter.platform,
12608
- protocol: event.bot.adapter.protocol,
12609
- standard: event.bot.adapter.standard
12610
- } : void 0
12603
+ adapterInfo: event.bot?.adapter ? event.bot.adapter : void 0
12611
12604
  };
12612
12605
  for (const strategy of getStrategies()) if (strategy.match(ctx)) {
12613
12606
  logger.debug(`[ErrorHandler] 匹配策略: ${strategy.name}`);
@@ -15523,6 +15516,7 @@ registerErrorStrategy({
15523
15516
  await sendErrorToMaster(ctx, img);
15524
15517
  await sendErrorToAllMasters(ctx, img);
15525
15518
  const resultCtx = await karin$1.ctx(event);
15519
+ if (!resultCtx) return "continue";
15526
15520
  const params = new URLSearchParams(resultCtx.msg);
15527
15521
  const validate = params.get("validate");
15528
15522
  const seccode = params.get("seccode");
@@ -16093,6 +16087,7 @@ var DouYin = class DouYin extends Base {
16093
16087
  aweme_id: data.aweme_id,
16094
16088
  typeMode: "strict"
16095
16089
  });
16090
+ if (VideoData.data.aweme_detail === null) throw new Error("获取作品详情失败,可能是因为该作品已被删除或设置为私密。");
16096
16091
  const aweme_type = VideoData.data.aweme_detail.aweme_type;
16097
16092
  const isArticle = aweme_type === 163;
16098
16093
  const isVideo = aweme_type === 0 || aweme_type === 55;
@@ -17820,7 +17815,7 @@ var DouYinpush = class extends Base {
17820
17815
  listName = "作品列表";
17821
17816
  contentList = (await this.amagi.douyin.fetcher.fetchUserVideoList({
17822
17817
  sec_uid,
17823
- number: 5,
17818
+ number: 15,
17824
17819
  typeMode: "strict"
17825
17820
  })).data.aweme_list || [];
17826
17821
  break;
@@ -17828,7 +17823,7 @@ var DouYinpush = class extends Base {
17828
17823
  listName = "喜欢列表";
17829
17824
  const favoritelist = await this.amagi.douyin.fetcher.fetchUserFavoriteList({
17830
17825
  sec_uid,
17831
- number: 5,
17826
+ number: 15,
17832
17827
  typeMode: "strict"
17833
17828
  });
17834
17829
  if (favoritelist.data.aweme_list.length === 0) logger.warn(`${item.remark}(${item.short_id}) 获取到的喜欢列表数量为零!此博主可能未公开他/她的喜欢列表`);
@@ -17838,7 +17833,7 @@ var DouYinpush = class extends Base {
17838
17833
  listName = "推荐列表";
17839
17834
  const recommendlist = await this.amagi.douyin.fetcher.fetchUserRecommendList({
17840
17835
  sec_uid,
17841
- number: 5,
17836
+ number: 15,
17842
17837
  typeMode: "strict"
17843
17838
  });
17844
17839
  if (recommendlist.data.aweme_list.length === 0) logger.warn(`${item.remark}(${item.short_id}) 获取到的推荐列表数量为零!此博主可能未公开他/她的推荐列表`);
@@ -18548,13 +18543,13 @@ var waitQrcode = async (page) => {
18548
18543
  var handleCacheCleanup = wrapWithErrorHandler(async () => {
18549
18544
  const twoHoursAgo = Date.now() - 7200 * 1e3;
18550
18545
  const videoDeleted = removeOldFiles(Common.tempDri.video, twoHoursAgo);
18551
- logger.mark(`${Common.tempDri.video} 目录下已删除 ${videoDeleted} 个文件`);
18546
+ logger.debug(`${Common.tempDri.video} 目录下已删除 ${videoDeleted} 个文件`);
18552
18547
  if (Config.upload.imageSendMode === "file") {
18553
18548
  const imageDeleted = removeOldFiles(Common.tempDri.images, twoHoursAgo);
18554
- logger.mark(`${Common.tempDri.images} 目录下已删除 ${imageDeleted} 个文件`);
18549
+ logger.debug(`${Common.tempDri.images} 目录下已删除 ${imageDeleted} 个文件`);
18555
18550
  }
18556
18551
  }, { businessName: "缓存自动删除" });
18557
- var task = Config.app.removeCache && karin$1.task("[kkk-缓存自动删除]", "*/30 * * * *", handleCacheCleanup);
18552
+ var task = Config.app.removeCache && karin$1.task("[kkk-缓存自动删除]", "*/30 * * * *", handleCacheCleanup, { log: false });
18558
18553
  var handleBilibiliLogin = wrapWithErrorHandler(async (e) => {
18559
18554
  await bilibiliLogin(e);
18560
18555
  return true;
@@ -19758,6 +19753,17 @@ var versionCore = (v) => {
19758
19753
  const [core] = preBuild.split("-", 2);
19759
19754
  return core;
19760
19755
  };
19756
+ var getLagVersionCount = (changelog, localVersion, remoteVersion) => {
19757
+ const local = versionCore(localVersion);
19758
+ const remote = versionCore(remoteVersion);
19759
+ if (!local || !remote || !isSemverGreater(remote, local)) return 0;
19760
+ const versions = Object.keys(parseChangelog(changelog)).map(versionCore).filter(Boolean);
19761
+ return [...new Set(versions)].filter((version) => {
19762
+ const afterLocal = isSemverGreater(version, local);
19763
+ const notAfterRemote = !isSemverGreater(version, remote);
19764
+ return afterLocal && notAfterRemote;
19765
+ }).length;
19766
+ };
19761
19767
  var getRemoteBuildMetadata = async (version) => {
19762
19768
  const requests = [
19763
19769
  `https://jsd.onmicrosoft.cn/npm/${Root.pluginName}@${version}/lib/build-metadata.json`,
@@ -19781,6 +19787,7 @@ var getRemoteBuildMetadata = async (version) => {
19781
19787
  var getChangelogImage = async (ctx, props) => {
19782
19788
  let changelog = "";
19783
19789
  let buildTime;
19790
+ let lagVersionCount = 0;
19784
19791
  const event = "bot" in ctx ? ctx : { bot: ctx };
19785
19792
  if (props.Tip || props.isRemote) {
19786
19793
  const requests = [
@@ -19814,6 +19821,7 @@ var getChangelogImage = async (ctx, props) => {
19814
19821
  return null;
19815
19822
  }
19816
19823
  if (!changelog) return null;
19824
+ lagVersionCount = getLagVersionCount(changelog, props.localVersion, props.remoteVersion);
19817
19825
  const remoteMeta = await getRemoteBuildMetadata(props.remoteVersion);
19818
19826
  if (remoteMeta?.buildTime) buildTime = formatBuildTime(remoteMeta.buildTime);
19819
19827
  changelog = range({
@@ -19825,6 +19833,7 @@ var getChangelogImage = async (ctx, props) => {
19825
19833
  } else {
19826
19834
  try {
19827
19835
  changelog = fs.readFileSync(Root.pluginPath + "/CHANGELOG.md", "utf8");
19836
+ lagVersionCount = getLagVersionCount(changelog, props.localVersion, props.remoteVersion);
19828
19837
  changelog = range({
19829
19838
  data: changelog,
19830
19839
  startVersion: props.localVersion,
@@ -19842,6 +19851,7 @@ var getChangelogImage = async (ctx, props) => {
19842
19851
  Tip: props.Tip,
19843
19852
  localVersion: props.localVersion,
19844
19853
  remoteVersion: props.remoteVersion,
19854
+ lagVersionCount,
19845
19855
  buildTime
19846
19856
  }) || null;
19847
19857
  };
@@ -33433,148 +33443,237 @@ var VersionWarning = (props) => {
33433
33443
  }),
33434
33444
  (0, import_jsx_runtime.jsxs)("div", {
33435
33445
  className: "space-y-20",
33436
- children: [(0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsxs)("div", {
33437
- className: "flex items-center space-x-4 mb-6",
33438
- children: [
33439
- (0, import_jsx_runtime.jsx)("div", {
33440
- className: "flex items-center justify-center w-10 h-10 rounded-lg",
33441
- style: { backgroundColor: isDark ? "rgba(251,146,60,0.15)" : "rgba(194,65,12,0.1)" },
33442
- children: (0, import_jsx_runtime.jsx)("span", {
33443
- className: "text-[28px] font-black",
33444
- style: { color: accentColor },
33445
- children: "1"
33446
+ children: [
33447
+ (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsxs)("div", {
33448
+ className: "flex items-center space-x-4 mb-6",
33449
+ children: [
33450
+ (0, import_jsx_runtime.jsx)("div", {
33451
+ className: "flex items-center justify-center w-10 h-10 rounded-lg",
33452
+ style: { backgroundColor: isDark ? "rgba(251,146,60,0.15)" : "rgba(194,65,12,0.1)" },
33453
+ children: (0, import_jsx_runtime.jsx)("span", {
33454
+ className: "text-[28px] font-black",
33455
+ style: { color: accentColor },
33456
+ children: "1"
33457
+ })
33458
+ }),
33459
+ (0, import_jsx_runtime.jsxs)("svg", {
33460
+ className: "w-8 h-8",
33461
+ viewBox: "0 0 24 24",
33462
+ fill: "none",
33463
+ stroke: mutedColor,
33464
+ strokeWidth: "2",
33465
+ children: [(0, import_jsx_runtime.jsx)("rect", {
33466
+ x: "3",
33467
+ y: "3",
33468
+ width: "18",
33469
+ height: "18",
33470
+ rx: "2",
33471
+ strokeLinecap: "round",
33472
+ strokeLinejoin: "round"
33473
+ }), (0, import_jsx_runtime.jsx)("path", {
33474
+ d: "M9 3v18M3 9h18M3 15h18",
33475
+ strokeLinecap: "round",
33476
+ strokeLinejoin: "round"
33477
+ })]
33478
+ }),
33479
+ (0, import_jsx_runtime.jsx)("span", {
33480
+ className: "text-[32px] font-bold",
33481
+ style: { color: mutedColor },
33482
+ children: "Web 控制台更新"
33483
+ }),
33484
+ (0, import_jsx_runtime.jsx)(chip_default, {
33485
+ className: "text-[20px] font-semibold px-4",
33486
+ style: {
33487
+ backgroundColor: isDark ? "rgba(251,146,60,0.2)" : "rgba(194,65,12,0.15)",
33488
+ color: accentColor
33489
+ },
33490
+ size: "lg",
33491
+ children: "推荐"
33446
33492
  })
33447
- }),
33448
- (0, import_jsx_runtime.jsxs)("svg", {
33449
- className: "w-8 h-8",
33450
- viewBox: "0 0 24 24",
33451
- fill: "none",
33452
- stroke: mutedColor,
33453
- strokeWidth: "2",
33454
- children: [(0, import_jsx_runtime.jsx)("rect", {
33455
- x: "3",
33456
- y: "3",
33457
- width: "18",
33458
- height: "18",
33459
- rx: "2",
33460
- strokeLinecap: "round",
33461
- strokeLinejoin: "round"
33462
- }), (0, import_jsx_runtime.jsx)("path", {
33463
- d: "M9 3v18M3 9h18M3 15h18",
33464
- strokeLinecap: "round",
33465
- strokeLinejoin: "round"
33466
- })]
33467
- }),
33468
- (0, import_jsx_runtime.jsx)("span", {
33469
- className: "text-[32px] font-bold",
33470
- style: { color: mutedColor },
33471
- children: "Web 控制台更新"
33472
- }),
33473
- (0, import_jsx_runtime.jsx)(chip_default, {
33474
- className: "text-[20px] font-semibold px-4",
33475
- style: {
33476
- backgroundColor: isDark ? "rgba(251,146,60,0.2)" : "rgba(194,65,12,0.15)",
33477
- color: accentColor
33478
- },
33479
- size: "lg",
33480
- children: "推荐"
33481
- })
33482
- ]
33483
- }), (0, import_jsx_runtime.jsxs)("div", {
33484
- className: "ml-14 space-y-4",
33485
- children: [
33486
- (0, import_jsx_runtime.jsxs)("div", {
33487
- className: "flex items-start space-x-4",
33488
- children: [(0, import_jsx_runtime.jsx)("div", {
33489
- className: "w-3 h-3 rounded-full mt-3 flex-shrink-0",
33490
- style: { backgroundColor: mutedColor }
33491
- }), (0, import_jsx_runtime.jsx)("span", {
33492
- className: "text-[28px] leading-relaxed",
33493
- style: { color: secondaryColor },
33494
- children: "访问 Karin Web 控制台首页,查看 Karin 版本信息"
33495
- })]
33496
- }),
33497
- (0, import_jsx_runtime.jsxs)("div", {
33498
- className: "flex items-start space-x-4",
33499
- children: [(0, import_jsx_runtime.jsx)("div", {
33500
- className: "w-3 h-3 rounded-full mt-3 flex-shrink-0",
33501
- style: { backgroundColor: mutedColor }
33502
- }), (0, import_jsx_runtime.jsx)("span", {
33503
- className: "text-[28px] leading-relaxed",
33504
- style: { color: secondaryColor },
33505
- children: "当有新版本时会高亮提示,点击查看更新日志"
33506
- })]
33507
- }),
33508
- (0, import_jsx_runtime.jsxs)("div", {
33509
- className: "flex items-start space-x-4",
33510
- children: [(0, import_jsx_runtime.jsx)("div", {
33511
- className: "w-3 h-3 rounded-full mt-3 flex-shrink-0",
33512
- style: { backgroundColor: mutedColor }
33513
- }), (0, import_jsx_runtime.jsx)("span", {
33514
- className: "text-[28px] leading-relaxed",
33515
- style: { color: secondaryColor },
33516
- children: "点击「更新」按钮,系统将自动完成更新并重启"
33517
- })]
33518
- })
33519
- ]
33520
- })] }), (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsxs)("div", {
33521
- className: "flex items-center space-x-4 mb-6",
33522
- children: [
33523
- (0, import_jsx_runtime.jsx)("div", {
33524
- className: "flex items-center justify-center w-10 h-10 rounded-lg",
33525
- style: { backgroundColor: isDark ? "rgba(251,146,60,0.15)" : "rgba(194,65,12,0.1)" },
33526
- children: (0, import_jsx_runtime.jsx)("span", {
33527
- className: "text-[28px] font-black",
33528
- style: { color: accentColor },
33529
- children: "2"
33493
+ ]
33494
+ }), (0, import_jsx_runtime.jsxs)("div", {
33495
+ className: "ml-14 space-y-4",
33496
+ children: [
33497
+ (0, import_jsx_runtime.jsxs)("div", {
33498
+ className: "flex items-start space-x-4",
33499
+ children: [(0, import_jsx_runtime.jsx)("div", {
33500
+ className: "w-3 h-3 rounded-full mt-3 shrink-0",
33501
+ style: { backgroundColor: mutedColor }
33502
+ }), (0, import_jsx_runtime.jsx)("span", {
33503
+ className: "text-[28px] leading-relaxed",
33504
+ style: { color: secondaryColor },
33505
+ children: "访问 Karin Web 控制台首页,查看 Karin 版本信息"
33506
+ })]
33507
+ }),
33508
+ (0, import_jsx_runtime.jsxs)("div", {
33509
+ className: "flex items-start space-x-4",
33510
+ children: [(0, import_jsx_runtime.jsx)("div", {
33511
+ className: "w-3 h-3 rounded-full mt-3 shrink-0",
33512
+ style: { backgroundColor: mutedColor }
33513
+ }), (0, import_jsx_runtime.jsx)("span", {
33514
+ className: "text-[28px] leading-relaxed",
33515
+ style: { color: secondaryColor },
33516
+ children: "当有新版本时会高亮提示,点击查看更新日志"
33517
+ })]
33518
+ }),
33519
+ (0, import_jsx_runtime.jsxs)("div", {
33520
+ className: "flex items-start space-x-4",
33521
+ children: [(0, import_jsx_runtime.jsx)("div", {
33522
+ className: "w-3 h-3 rounded-full mt-3 shrink-0",
33523
+ style: { backgroundColor: mutedColor }
33524
+ }), (0, import_jsx_runtime.jsxs)("span", {
33525
+ className: "text-[28px] leading-relaxed",
33526
+ style: { color: secondaryColor },
33527
+ children: [
33528
+ "点击",
33529
+ (0, import_jsx_runtime.jsx)("span", {
33530
+ className: "font-mono font-black",
33531
+ children: "「更新」"
33532
+ }),
33533
+ "按钮,系统将自动完成更新并重启"
33534
+ ]
33535
+ })]
33530
33536
  })
33531
- }),
33532
- (0, import_jsx_runtime.jsx)("svg", {
33533
- className: "w-8 h-8",
33534
- viewBox: "0 0 24 24",
33535
- fill: "none",
33536
- stroke: mutedColor,
33537
- strokeWidth: "2",
33538
- children: (0, import_jsx_runtime.jsx)("path", {
33539
- d: "M4 17l6-6-6-6M12 19h8",
33540
- strokeLinecap: "round",
33541
- strokeLinejoin: "round"
33537
+ ]
33538
+ })] }),
33539
+ (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsxs)("div", {
33540
+ className: "flex items-center space-x-4 mb-6",
33541
+ children: [
33542
+ (0, import_jsx_runtime.jsx)("div", {
33543
+ className: "flex items-center justify-center w-10 h-10 rounded-lg",
33544
+ style: { backgroundColor: isDark ? "rgba(251,146,60,0.15)" : "rgba(194,65,12,0.1)" },
33545
+ children: (0, import_jsx_runtime.jsx)("span", {
33546
+ className: "text-[28px] font-black",
33547
+ style: { color: accentColor },
33548
+ children: "2"
33549
+ })
33550
+ }),
33551
+ (0, import_jsx_runtime.jsx)(IoExtensionPuzzleOutline, {
33552
+ className: clsx("w-10 h-auto"),
33553
+ style: { color: mutedColor }
33554
+ }),
33555
+ (0, import_jsx_runtime.jsx)("span", {
33556
+ className: "text-[32px] font-bold",
33557
+ style: { color: mutedColor },
33558
+ children: "使用 basic 插件命令更新"
33559
+ }),
33560
+ (0, import_jsx_runtime.jsx)(chip_default, {
33561
+ className: "text-[20px] font-semibold px-4",
33562
+ style: {
33563
+ backgroundColor: isDark ? "rgba(251,146,60,0.2)" : "rgba(194,65,12,0.15)",
33564
+ color: accentColor
33565
+ },
33566
+ size: "lg",
33567
+ children: "推荐"
33542
33568
  })
33543
- }),
33544
- (0, import_jsx_runtime.jsx)("span", {
33545
- className: "text-[32px] font-bold",
33546
- style: { color: mutedColor },
33547
- children: "命令行更新"
33548
- })
33549
- ]
33550
- }), (0, import_jsx_runtime.jsxs)("div", {
33551
- className: "ml-14 space-y-4",
33552
- children: [
33553
- (0, import_jsx_runtime.jsx)("p", {
33554
- className: "text-[28px]",
33555
- style: { color: secondaryColor },
33556
- children: "在 Karin 根目录下执行以下命令"
33557
- }),
33558
- (0, import_jsx_runtime.jsx)("div", {
33559
- className: "rounded-xl p-6",
33560
- style: { backgroundColor: isDark ? "rgba(0,0,0,0.4)" : "rgba(255,255,255,0.7)" },
33561
- children: (0, import_jsx_runtime.jsxs)("code", {
33562
- className: "text-[40px] font-mono font-bold block",
33563
- style: { color: accentColor },
33564
- children: [
33565
- "pnpm add node-karin@",
33566
- props.data.requireVersion,
33567
- " -w"
33568
- ]
33569
+ ]
33570
+ }), (0, import_jsx_runtime.jsxs)("div", {
33571
+ className: "ml-14 space-y-4",
33572
+ children: [
33573
+ (0, import_jsx_runtime.jsxs)("div", {
33574
+ className: "flex items-start space-x-4",
33575
+ children: [(0, import_jsx_runtime.jsx)("div", {
33576
+ className: "w-3 h-3 rounded-full mt-3 shrink-0",
33577
+ style: { backgroundColor: mutedColor }
33578
+ }), (0, import_jsx_runtime.jsxs)("span", {
33579
+ className: "text-[28px] leading-relaxed",
33580
+ style: { color: secondaryColor },
33581
+ children: [
33582
+ "插件市场搜索",
33583
+ (0, import_jsx_runtime.jsx)("span", {
33584
+ className: "font-mono font-black",
33585
+ children: "「karin-plugin-basic」"
33586
+ }),
33587
+ "插件并安装"
33588
+ ]
33589
+ })]
33590
+ }),
33591
+ (0, import_jsx_runtime.jsxs)("div", {
33592
+ className: "flex items-start space-x-4",
33593
+ children: [(0, import_jsx_runtime.jsx)("div", {
33594
+ className: "w-3 h-3 rounded-full mt-3 shrink-0",
33595
+ style: { backgroundColor: mutedColor }
33596
+ }), (0, import_jsx_runtime.jsxs)("span", {
33597
+ className: "text-[28px] leading-relaxed",
33598
+ style: { color: secondaryColor },
33599
+ children: ["安装完成后发送 ", (0, import_jsx_runtime.jsx)("span", {
33600
+ className: "font-mono font-black",
33601
+ children: "「#更新」"
33602
+ })]
33603
+ })]
33604
+ }),
33605
+ (0, import_jsx_runtime.jsxs)("div", {
33606
+ className: "flex items-start space-x-4",
33607
+ children: [(0, import_jsx_runtime.jsx)("div", {
33608
+ className: "w-3 h-3 rounded-full mt-3 shrink-0",
33609
+ style: { backgroundColor: mutedColor }
33610
+ }), (0, import_jsx_runtime.jsx)("span", {
33611
+ className: "text-[28px] leading-relaxed",
33612
+ style: { color: secondaryColor },
33613
+ children: "插件会自动执行更新流程"
33614
+ })]
33569
33615
  })
33570
- }),
33571
- (0, import_jsx_runtime.jsx)("p", {
33572
- className: "text-[28px] opacity-80",
33573
- style: { color: secondaryColor },
33574
- children: "更新完成后手动重启 Karin 即可"
33575
- })
33576
- ]
33577
- })] })]
33616
+ ]
33617
+ })] }),
33618
+ (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsxs)("div", {
33619
+ className: "flex items-center space-x-4 mb-6",
33620
+ children: [
33621
+ (0, import_jsx_runtime.jsx)("div", {
33622
+ className: "flex items-center justify-center w-10 h-10 rounded-lg",
33623
+ style: { backgroundColor: isDark ? "rgba(251,146,60,0.15)" : "rgba(194,65,12,0.1)" },
33624
+ children: (0, import_jsx_runtime.jsx)("span", {
33625
+ className: "text-[28px] font-black",
33626
+ style: { color: accentColor },
33627
+ children: "3"
33628
+ })
33629
+ }),
33630
+ (0, import_jsx_runtime.jsx)("svg", {
33631
+ className: "w-8 h-8",
33632
+ viewBox: "0 0 24 24",
33633
+ fill: "none",
33634
+ stroke: mutedColor,
33635
+ strokeWidth: "2",
33636
+ children: (0, import_jsx_runtime.jsx)("path", {
33637
+ d: "M4 17l6-6-6-6M12 19h8",
33638
+ strokeLinecap: "round",
33639
+ strokeLinejoin: "round"
33640
+ })
33641
+ }),
33642
+ (0, import_jsx_runtime.jsx)("span", {
33643
+ className: "text-[32px] font-bold",
33644
+ style: { color: mutedColor },
33645
+ children: "命令行手动更新"
33646
+ })
33647
+ ]
33648
+ }), (0, import_jsx_runtime.jsxs)("div", {
33649
+ className: "ml-14 space-y-4",
33650
+ children: [
33651
+ (0, import_jsx_runtime.jsx)("p", {
33652
+ className: "text-[28px]",
33653
+ style: { color: secondaryColor },
33654
+ children: "在 Karin 根目录下执行以下命令"
33655
+ }),
33656
+ (0, import_jsx_runtime.jsx)("div", {
33657
+ className: "rounded-xl p-6",
33658
+ style: { backgroundColor: isDark ? "rgba(0,0,0,0.4)" : "rgba(255,255,255,0.7)" },
33659
+ children: (0, import_jsx_runtime.jsxs)("code", {
33660
+ className: "text-[40px] font-mono font-bold block",
33661
+ style: { color: accentColor },
33662
+ children: [
33663
+ "pnpm add node-karin@",
33664
+ props.data.requireVersion,
33665
+ " -w"
33666
+ ]
33667
+ })
33668
+ }),
33669
+ (0, import_jsx_runtime.jsx)("p", {
33670
+ className: "text-[28px] opacity-80",
33671
+ style: { color: secondaryColor },
33672
+ children: "更新完成后手动重启 Karin 即可"
33673
+ })
33674
+ ]
33675
+ })] })
33676
+ ]
33578
33677
  }),
33579
33678
  (0, import_jsx_runtime.jsx)("div", {
33580
33679
  className: "h-0.5 rounded-full my-10",
@@ -33584,7 +33683,7 @@ var VersionWarning = (props) => {
33584
33683
  className: "rounded-2xl p-6 flex items-start space-x-5",
33585
33684
  style: { backgroundColor: isDark ? "rgba(251,146,60,0.08)" : "rgba(194,65,12,0.08)" },
33586
33685
  children: [(0, import_jsx_runtime.jsxs)("svg", {
33587
- className: "w-10 h-10 mt-1 flex-shrink-0",
33686
+ className: "w-10 h-10 mt-1 shrink-0",
33588
33687
  viewBox: "0 0 24 24",
33589
33688
  fill: accentColor,
33590
33689
  children: [(0, import_jsx_runtime.jsx)("path", { d: "M12 2L22 20H2L12 2Z" }), (0, import_jsx_runtime.jsx)("path", {
@@ -33817,81 +33916,97 @@ var Changelog = import_react.memo((props) => {
33817
33916
  children: [
33818
33917
  props.data.Tip === true ? (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: (0, import_jsx_runtime.jsxs)("div", {
33819
33918
  className: "pt-32",
33820
- children: [(0, import_jsx_runtime.jsx)("div", {
33821
- className: "text-5xl leading-relaxed text-center mb-8 opacity-50 text-default-600",
33822
- children: "以下任意方式均可更新"
33823
- }), (0, import_jsx_runtime.jsxs)("div", {
33824
- className: "flex flex-col gap-6 text-[2.8em] leading-relaxed text-default-700",
33825
- children: [
33826
- (0, import_jsx_runtime.jsxs)("div", {
33827
- className: "flex items-center gap-5",
33828
- children: [
33829
- (0, import_jsx_runtime.jsx)("span", {
33830
- className: "text-default-500 text-[1.2em]",
33831
- children: "•"
33832
- }),
33833
- (0, import_jsx_runtime.jsx)("span", { children: "回复" }),
33834
- (0, import_jsx_runtime.jsx)("span", {
33835
- className: "inline-block text-[1.15em] font-bold text-default-900",
33836
- children: "更新"
33837
- }),
33838
- (0, import_jsx_runtime.jsx)("span", { children: "立刻开始" })
33839
- ]
33840
- }),
33841
- (0, import_jsx_runtime.jsxs)("div", {
33842
- className: "flex items-center gap-5",
33843
- children: [
33844
- (0, import_jsx_runtime.jsx)("span", {
33845
- className: "text-default-500 text-[1.2em]",
33846
- children: "•"
33847
- }),
33848
- (0, import_jsx_runtime.jsx)("span", { children: "进入" }),
33849
- (0, import_jsx_runtime.jsx)(code_default, {
33850
- radius: "lg",
33851
- color: "success",
33852
- className: "text-[0.9em]",
33853
- children: "Karin WebUI"
33854
- }),
33855
- (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33856
- (0, import_jsx_runtime.jsx)(code_default, {
33857
- radius: "lg",
33858
- color: "success",
33859
- className: "text-[0.9em]",
33860
- children: "插件管理"
33861
- }),
33862
- (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33863
- (0, import_jsx_runtime.jsx)(code_default, {
33864
- radius: "lg",
33865
- color: "success",
33866
- className: "text-[0.9em]",
33867
- children: "已安装"
33868
- }),
33869
- (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33870
- (0, import_jsx_runtime.jsx)("span", { children: "一览更新" })
33871
- ]
33872
- }),
33873
- (0, import_jsx_runtime.jsxs)("div", {
33874
- className: "flex items-center gap-5",
33875
- children: [
33876
- (0, import_jsx_runtime.jsx)("span", {
33877
- className: "text-default-500 text-[1.2em]",
33878
- children: "•"
33879
- }),
33880
- (0, import_jsx_runtime.jsx)("span", { children: "Karin 根目录运行" }),
33881
- (0, import_jsx_runtime.jsxs)(code_default, {
33882
- radius: "lg",
33883
- color: "success",
33884
- className: "text-[0.85em] whitespace-nowrap",
33885
- children: [
33886
- "pnpm add karin-plugin-kkk@",
33887
- props.data.remoteVersion,
33888
- " -w"
33889
- ]
33890
- })
33891
- ]
33892
- })
33893
- ]
33894
- })]
33919
+ children: [
33920
+ (0, import_jsx_runtime.jsx)("div", {
33921
+ className: "text-5xl leading-relaxed text-center mb-8 opacity-50 text-default-600",
33922
+ children: "以下任意方式均可更新"
33923
+ }),
33924
+ (0, import_jsx_runtime.jsxs)("div", {
33925
+ className: "mb-10 px-8 py-5 rounded-2xl border border-default-300/70 bg-default-50/50 text-default-700 text-[2.2em] flex items-center justify-center gap-6",
33926
+ children: [
33927
+ (0, import_jsx_runtime.jsxs)("span", { children: ["当前版本: v", props.data.localVersion] }),
33928
+ (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33929
+ (0, import_jsx_runtime.jsxs)("span", { children: ["最新版本: v", props.data.remoteVersion] }),
33930
+ (0, import_jsx_runtime.jsxs)("span", { children: [
33931
+ ",共落后 ",
33932
+ props.data.lagVersionCount ?? 0,
33933
+ " 个版本"
33934
+ ] })
33935
+ ]
33936
+ }),
33937
+ (0, import_jsx_runtime.jsxs)("div", {
33938
+ className: "flex flex-col gap-6 text-[2.8em] leading-relaxed text-default-700",
33939
+ children: [
33940
+ (0, import_jsx_runtime.jsxs)("div", {
33941
+ className: "flex items-center gap-5",
33942
+ children: [
33943
+ (0, import_jsx_runtime.jsx)("span", {
33944
+ className: "text-default-500 text-[1.2em]",
33945
+ children: "•"
33946
+ }),
33947
+ (0, import_jsx_runtime.jsx)("span", { children: "回复" }),
33948
+ (0, import_jsx_runtime.jsx)("span", {
33949
+ className: "inline-block text-[1.15em] font-bold text-default-900",
33950
+ children: "更新"
33951
+ }),
33952
+ (0, import_jsx_runtime.jsx)("span", { children: "立刻开始" })
33953
+ ]
33954
+ }),
33955
+ (0, import_jsx_runtime.jsxs)("div", {
33956
+ className: "flex items-center gap-5",
33957
+ children: [
33958
+ (0, import_jsx_runtime.jsx)("span", {
33959
+ className: "text-default-500 text-[1.2em]",
33960
+ children: "•"
33961
+ }),
33962
+ (0, import_jsx_runtime.jsx)("span", { children: "进入" }),
33963
+ (0, import_jsx_runtime.jsx)(code_default, {
33964
+ radius: "lg",
33965
+ color: "success",
33966
+ className: "text-[0.9em]",
33967
+ children: "Karin WebUI"
33968
+ }),
33969
+ (0, import_jsx_runtime.jsx)("span", { children: "" }),
33970
+ (0, import_jsx_runtime.jsx)(code_default, {
33971
+ radius: "lg",
33972
+ color: "success",
33973
+ className: "text-[0.9em]",
33974
+ children: "插件管理"
33975
+ }),
33976
+ (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33977
+ (0, import_jsx_runtime.jsx)(code_default, {
33978
+ radius: "lg",
33979
+ color: "success",
33980
+ className: "text-[0.9em]",
33981
+ children: "已安装"
33982
+ }),
33983
+ (0, import_jsx_runtime.jsx)("span", { children: "→" }),
33984
+ (0, import_jsx_runtime.jsx)("span", { children: "一览更新" })
33985
+ ]
33986
+ }),
33987
+ (0, import_jsx_runtime.jsxs)("div", {
33988
+ className: "flex items-center gap-5",
33989
+ children: [
33990
+ (0, import_jsx_runtime.jsx)("span", {
33991
+ className: "text-default-500 text-[1.2em]",
33992
+ children: "•"
33993
+ }),
33994
+ (0, import_jsx_runtime.jsx)("span", { children: "Karin 根目录运行" }),
33995
+ (0, import_jsx_runtime.jsxs)(code_default, {
33996
+ radius: "lg",
33997
+ color: "success",
33998
+ className: "text-[0.85em] whitespace-nowrap",
33999
+ children: [
34000
+ "pnpm add karin-plugin-kkk@",
34001
+ props.data.remoteVersion,
34002
+ " -w"
34003
+ ]
34004
+ })
34005
+ ]
34006
+ })
34007
+ ]
34008
+ })
34009
+ ]
33895
34010
  }) }) : null,
33896
34011
  (0, import_jsx_runtime.jsx)("div", {
33897
34012
  className: "changelog-content",
@@ -34226,6 +34341,7 @@ var ERROR_TITLES = [
34226
34341
  "猝不及防"
34227
34342
  ];
34228
34343
  var getRandomErrorTitle = () => ERROR_TITLES[Math.floor(Math.random() * ERROR_TITLES.length)];
34344
+ var import_lodash = __toESM(require_lodash(), 1);
34229
34345
  var ansiColorMap = {
34230
34346
  30: "text-default-900",
34231
34347
  31: "text-danger",
@@ -34380,11 +34496,26 @@ var getAdapterLogo = (adapterName) => {
34380
34496
  const nameLower = adapterName.toLowerCase();
34381
34497
  for (const [key, logoPath] of Object.entries(ADAPTER_LOGO_MAP)) if (nameLower.includes(key)) return (0, import_jsx_runtime.jsx)("img", {
34382
34498
  src: logoPath,
34383
- className: "h-16 w-auto",
34499
+ className: "h-20 w-auto",
34384
34500
  alt: adapterName
34385
34501
  });
34386
- return (0, import_jsx_runtime.jsx)(Plug2, { className: "w-14 h-14 text-default-400" });
34387
- };
34502
+ return (0, import_jsx_runtime.jsx)(IoExtensionPuzzleOutline, { className: "w-16 h-auto text-danger-700/80" });
34503
+ };
34504
+ var SectionTitle = ({ icon, en, zh, color }) => (0, import_jsx_runtime.jsxs)("div", {
34505
+ className: "flex items-center gap-5 mb-6",
34506
+ children: [icon, (0, import_jsx_runtime.jsxs)("div", {
34507
+ className: "flex flex-col leading-tight",
34508
+ children: [(0, import_jsx_runtime.jsx)("span", {
34509
+ className: "text-xl font-semibold tracking-[0.2em] uppercase",
34510
+ style: { color },
34511
+ children: en
34512
+ }), (0, import_jsx_runtime.jsx)("span", {
34513
+ className: "text-base font-medium tracking-[0.08em] opacity-80",
34514
+ style: { color },
34515
+ children: zh
34516
+ })]
34517
+ })]
34518
+ });
34388
34519
  var handlerError = (props) => {
34389
34520
  const { data, qrCodeDataUrl } = props;
34390
34521
  const isDark = data.useDarkTheme === true;
@@ -34398,7 +34529,6 @@ var handlerError = (props) => {
34398
34529
  const accentColor = isDark ? "#fecaca" : "#7f1d1d";
34399
34530
  return (0, import_jsx_runtime.jsxs)(DefaultLayout, {
34400
34531
  ...props,
34401
- version: void 0,
34402
34532
  className: "relative overflow-hidden",
34403
34533
  style: {
34404
34534
  backgroundColor: bgColor,
@@ -34638,12 +34768,13 @@ var handlerError = (props) => {
34638
34768
  style: { color: mutedColor },
34639
34769
  children: "Date"
34640
34770
  }), (0, import_jsx_runtime.jsx)("div", {
34641
- className: "font-mono text-3xl font-bold tracking-widest",
34771
+ className: "font-mono text-3xl font-bold tracking-[0.2em]",
34642
34772
  style: { color: secondaryColor },
34643
- children: new Date(data.timestamp).toLocaleDateString("en-GB", {
34644
- day: "2-digit",
34645
- month: "2-digit"
34646
- }).replace("/", ".")
34773
+ children: new Date(data.timestamp).toLocaleDateString("zh-CN", {
34774
+ year: "numeric",
34775
+ month: "2-digit",
34776
+ day: "2-digit"
34777
+ }).replaceAll("/", "-")
34647
34778
  })]
34648
34779
  })
34649
34780
  ]
@@ -34705,16 +34836,14 @@ var handlerError = (props) => {
34705
34836
  }),
34706
34837
  data.triggerCommand && (0, import_jsx_runtime.jsxs)("div", {
34707
34838
  className: "mb-14",
34708
- children: [(0, import_jsx_runtime.jsxs)("div", {
34709
- className: "flex items-center gap-5 mb-6",
34710
- children: [(0, import_jsx_runtime.jsx)(Terminal, {
34839
+ children: [(0, import_jsx_runtime.jsx)(SectionTitle, {
34840
+ icon: (0, import_jsx_runtime.jsx)(Terminal, {
34711
34841
  className: "w-9 h-9",
34712
34842
  style: { color: mutedColor }
34713
- }), (0, import_jsx_runtime.jsx)("span", {
34714
- className: "text-xl font-semibold tracking-[0.2em] uppercase",
34715
- style: { color: mutedColor },
34716
- children: "Trigger Command"
34717
- })]
34843
+ }),
34844
+ en: "Trigger Command",
34845
+ zh: "触发命令",
34846
+ color: mutedColor
34718
34847
  }), (0, import_jsx_runtime.jsx)("div", {
34719
34848
  className: "p-10 rounded-[36px]",
34720
34849
  style: { backgroundColor: isDark ? "rgba(0,0,0,0.2)" : "rgba(255,255,255,0.5)" },
@@ -34727,16 +34856,14 @@ var handlerError = (props) => {
34727
34856
  }),
34728
34857
  (0, import_jsx_runtime.jsxs)("div", {
34729
34858
  className: "mb-14",
34730
- children: [(0, import_jsx_runtime.jsxs)("div", {
34731
- className: "flex items-center gap-5 mb-6",
34732
- children: [(0, import_jsx_runtime.jsx)(CircleAlert, {
34859
+ children: [(0, import_jsx_runtime.jsx)(SectionTitle, {
34860
+ icon: (0, import_jsx_runtime.jsx)(CircleAlert, {
34733
34861
  className: "w-9 h-9",
34734
34862
  style: { color: primaryColor }
34735
- }), (0, import_jsx_runtime.jsx)("span", {
34736
- className: "text-xl font-semibold tracking-[0.2em] uppercase",
34737
- style: { color: mutedColor },
34738
- children: "Stack Trace"
34739
- })]
34863
+ }),
34864
+ en: "Stack Trace",
34865
+ zh: "错误堆栈",
34866
+ color: mutedColor
34740
34867
  }), (0, import_jsx_runtime.jsx)("div", {
34741
34868
  className: "p-10 rounded-[36px]",
34742
34869
  style: {
@@ -34752,16 +34879,14 @@ var handlerError = (props) => {
34752
34879
  }),
34753
34880
  data.logs && data.logs.length > 0 && (0, import_jsx_runtime.jsxs)("div", {
34754
34881
  className: "mb-14",
34755
- children: [(0, import_jsx_runtime.jsxs)("div", {
34756
- className: "flex items-center gap-5 mb-6",
34757
- children: [(0, import_jsx_runtime.jsx)(FileText, {
34882
+ children: [(0, import_jsx_runtime.jsx)(SectionTitle, {
34883
+ icon: (0, import_jsx_runtime.jsx)(FileText, {
34758
34884
  className: "w-9 h-9",
34759
34885
  style: { color: mutedColor }
34760
- }), (0, import_jsx_runtime.jsx)("span", {
34761
- className: "text-xl font-semibold tracking-[0.2em] uppercase",
34762
- style: { color: mutedColor },
34763
- children: "Execution Logs"
34764
- })]
34886
+ }),
34887
+ en: "Execution Logs",
34888
+ zh: "执行日志",
34889
+ color: mutedColor
34765
34890
  }), (0, import_jsx_runtime.jsx)("div", {
34766
34891
  className: "space-y-6",
34767
34892
  children: data.logs.map((log, index) => {
@@ -34829,7 +34954,7 @@ var handlerError = (props) => {
34829
34954
  }), (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
34830
34955
  className: "text-xl",
34831
34956
  style: { color: mutedColor },
34832
- children: "Framework"
34957
+ children: "Framework / 框架版本"
34833
34958
  }), (0, import_jsx_runtime.jsx)("p", {
34834
34959
  className: "text-3xl font-bold",
34835
34960
  style: { color: accentColor },
@@ -34860,48 +34985,141 @@ var handlerError = (props) => {
34860
34985
  }), (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
34861
34986
  className: "text-xl",
34862
34987
  style: { color: mutedColor },
34863
- children: "Plugin"
34988
+ children: "Plugin / 插件版本"
34864
34989
  }), (0, import_jsx_runtime.jsx)("p", {
34865
34990
  className: "text-3xl font-bold",
34866
34991
  style: { color: accentColor },
34867
34992
  children: data.pluginVersion
34868
34993
  })] })]
34869
34994
  }),
34870
- data.amagiVersion && (0, import_jsx_runtime.jsxs)("div", {
34871
- className: "flex items-center gap-6",
34872
- children: [(0, import_jsx_runtime.jsx)("img", {
34873
- src: "/image/other/handlerError/cxk.png",
34874
- alt: "Amagi",
34875
- className: "w-16 h-16"
34876
- }), (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
34877
- className: "text-xl",
34878
- style: { color: mutedColor },
34879
- children: "API Library"
34880
- }), (0, import_jsx_runtime.jsx)("p", {
34881
- className: "text-3xl font-bold",
34882
- style: { color: accentColor },
34883
- children: data.amagiVersion
34884
- })] })]
34885
- }),
34886
34995
  data.adapterInfo && (0, import_jsx_runtime.jsxs)("div", {
34887
- className: "flex items-center gap-6",
34888
- children: [getAdapterLogo(data.adapterInfo.name), (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
34889
- className: "text-xl",
34890
- style: { color: mutedColor },
34891
- children: "Adapter"
34892
- }), (0, import_jsx_runtime.jsxs)("div", {
34893
- className: "flex items-center gap-4",
34894
- children: [(0, import_jsx_runtime.jsx)("p", {
34895
- className: "text-3xl font-bold",
34896
- style: { color: accentColor },
34897
- children: data.adapterInfo.name
34898
- }), (0, import_jsx_runtime.jsx)(chip_default, {
34899
- size: "lg",
34900
- variant: "flat",
34901
- className: "h-8 text-lg",
34902
- children: data.adapterInfo.version.startsWith("v") ? data.adapterInfo.version : `v${data.adapterInfo.version}`
34996
+ className: "col-span-2 p-8 rounded-3xl",
34997
+ style: {
34998
+ backgroundColor: isDark ? "rgba(0,0,0,0.18)" : "rgba(255,255,255,0.52)",
34999
+ border: `1px solid ${isDark ? "rgba(248,113,113,0.22)" : "rgba(220,38,38,0.14)"}`
35000
+ },
35001
+ children: [(0, import_jsx_runtime.jsxs)("div", {
35002
+ className: "flex items-start justify-between gap-8 mb-6",
35003
+ children: [(0, import_jsx_runtime.jsxs)("div", {
35004
+ className: "flex items-center gap-6 min-w-0",
35005
+ children: [getAdapterLogo(data.adapterInfo.name), (0, import_jsx_runtime.jsxs)("div", {
35006
+ className: "min-w-0",
35007
+ children: [(0, import_jsx_runtime.jsx)("p", {
35008
+ className: "text-xl mb-1",
35009
+ style: { color: mutedColor },
35010
+ children: "Adapter / 适配器"
35011
+ }), (0, import_jsx_runtime.jsxs)("div", {
35012
+ className: "flex items-center gap-4 flex-wrap",
35013
+ children: [(0, import_jsx_runtime.jsx)("p", {
35014
+ className: "text-3xl font-bold truncate",
35015
+ style: { color: accentColor },
35016
+ children: data.adapterInfo.name
35017
+ }), (0, import_jsx_runtime.jsx)(chip_default, {
35018
+ size: "lg",
35019
+ variant: "flat",
35020
+ color: "danger",
35021
+ className: "h-8 text-lg",
35022
+ children: data.adapterInfo.version.startsWith("v") ? data.adapterInfo.version : `v${data.adapterInfo.version}`
35023
+ })]
35024
+ })]
35025
+ })]
35026
+ }), (0, import_jsx_runtime.jsx)("p", {
35027
+ className: "text-xl font-medium mb-4",
35028
+ style: { color: mutedColor },
35029
+ children: "事件信息来源"
34903
35030
  })]
34904
- })] })]
35031
+ }), (0, import_jsx_runtime.jsxs)("div", {
35032
+ className: "grid grid-cols-4 gap-4 text-lg",
35033
+ style: { color: secondaryColor },
35034
+ children: [
35035
+ (0, import_jsx_runtime.jsxs)("div", {
35036
+ className: "rounded-2xl px-4 py-3",
35037
+ style: { backgroundColor: isDark ? "rgba(248,113,113,0.08)" : "rgba(220,38,38,0.05)" },
35038
+ children: [(0, import_jsx_runtime.jsx)("p", {
35039
+ className: "text-sm mb-1 opacity-75",
35040
+ children: "Platform / 对接平台"
35041
+ }), (0, import_jsx_runtime.jsx)("p", {
35042
+ className: "font-semibold break-all text-2xl",
35043
+ children: String(data.adapterInfo.platform)
35044
+ })]
35045
+ }),
35046
+ (0, import_jsx_runtime.jsxs)("div", {
35047
+ className: "rounded-2xl px-4 py-3 relative overflow-hidden",
35048
+ style: { backgroundColor: isDark ? "rgba(248,113,113,0.08)" : "rgba(220,38,38,0.05)" },
35049
+ children: [
35050
+ (0, import_jsx_runtime.jsx)("p", {
35051
+ className: "text-sm mb-1 opacity-75",
35052
+ children: "Standard / 协议标准"
35053
+ }),
35054
+ (0, import_jsx_runtime.jsx)("p", {
35055
+ className: "font-semibold break-all text-2xl",
35056
+ children: import_lodash.default.upperFirst(import_lodash.default.camelCase(String(data.adapterInfo.standard)))
35057
+ }),
35058
+ String(data.adapterInfo.standard).toLowerCase() === "milky" && (0, import_jsx_runtime.jsx)("div", {
35059
+ className: "absolute inset-0 pointer-events-none",
35060
+ children: (0, import_jsx_runtime.jsx)("img", {
35061
+ src: "/image/other/handlerError/Milky.png",
35062
+ alt: "Milky",
35063
+ className: "absolute -right-2 -bottom-3 w-24 h-24 object-contain",
35064
+ style: {
35065
+ WebkitMaskImage: "linear-gradient(to top left, transparent 0%, rgba(0,0,0,1) 60%)",
35066
+ maskImage: "linear-gradient(to top left, transparent 0%, rgba(0,0,0,1) 60%)",
35067
+ opacity: 1
35068
+ }
35069
+ })
35070
+ }),
35071
+ String(data.adapterInfo.standard).toLowerCase() === "satori" && (0, import_jsx_runtime.jsx)("div", {
35072
+ className: "absolute inset-0 pointer-events-none",
35073
+ children: (0, import_jsx_runtime.jsx)("img", {
35074
+ src: "/image/other/handlerError/satori.png",
35075
+ alt: "Satori",
35076
+ className: "absolute -right-2 -bottom-3 w-24 h-24 object-contain",
35077
+ style: {
35078
+ WebkitMaskImage: "linear-gradient(to top left, transparent 0%, rgba(0,0,0,1) 60%)",
35079
+ maskImage: "linear-gradient(to top left, transparent 0%, rgba(0,0,0,1) 60%)",
35080
+ opacity: 1
35081
+ }
35082
+ })
35083
+ }),
35084
+ String(data.adapterInfo.standard).includes("onebot") && (0, import_jsx_runtime.jsx)("div", {
35085
+ className: "absolute inset-0 pointer-events-none",
35086
+ children: (0, import_jsx_runtime.jsx)("img", {
35087
+ src: "/image/other/handlerError/onebot.png",
35088
+ alt: "OneBot",
35089
+ className: "absolute -right-2 -bottom-3 w-24 h-24 object-contain",
35090
+ style: {
35091
+ WebkitMaskImage: "linear-gradient(to top left, transparent 0%, rgba(0,0,0,1) 60%)",
35092
+ maskImage: "linear-gradient(to top left, transparent 0%, rgba(0,0,0,1) 60%)",
35093
+ opacity: 1
35094
+ }
35095
+ })
35096
+ })
35097
+ ]
35098
+ }),
35099
+ (0, import_jsx_runtime.jsxs)("div", {
35100
+ className: "rounded-2xl px-4 py-3",
35101
+ style: { backgroundColor: isDark ? "rgba(248,113,113,0.08)" : "rgba(220,38,38,0.05)" },
35102
+ children: [(0, import_jsx_runtime.jsx)("p", {
35103
+ className: "text-sm mb-1 opacity-75",
35104
+ children: "Protocol / 协议实现"
35105
+ }), (0, import_jsx_runtime.jsx)("p", {
35106
+ className: "font-semibold break-all text-2xl",
35107
+ children: String(data.adapterInfo.protocol)
35108
+ })]
35109
+ }),
35110
+ (0, import_jsx_runtime.jsxs)("div", {
35111
+ className: "rounded-2xl px-4 py-3",
35112
+ style: { backgroundColor: isDark ? "rgba(248,113,113,0.08)" : "rgba(220,38,38,0.05)" },
35113
+ children: [(0, import_jsx_runtime.jsx)("p", {
35114
+ className: "text-sm mb-1 opacity-75",
35115
+ children: "Communication / 通信方式"
35116
+ }), (0, import_jsx_runtime.jsx)("p", {
35117
+ className: "font-semibold break-all text-2xl",
35118
+ children: String(data.adapterInfo.communication)
35119
+ })]
35120
+ })
35121
+ ]
35122
+ })]
34905
35123
  })
34906
35124
  ]
34907
35125
  }),
@@ -34910,46 +35128,92 @@ var handlerError = (props) => {
34910
35128
  style: { color: mutedColor },
34911
35129
  children: [data.buildTime && (0, import_jsx_runtime.jsxs)("div", {
34912
35130
  className: "flex items-center gap-3",
34913
- children: [(0, import_jsx_runtime.jsx)(MdAccessTime, { className: "w-6 h-6" }), (0, import_jsx_runtime.jsxs)("span", { children: ["Built ", data.buildTime] })]
35131
+ children: [(0, import_jsx_runtime.jsx)(MdAccessTime, { className: "w-6 h-6" }), (0, import_jsx_runtime.jsxs)("span", { children: [
35132
+ "Built Time: ",
35133
+ data.buildTime,
35134
+ " 距离 ",
35135
+ formatDistanceToNow(parse(data.buildTime, "yyyy年MM月dd日 HH:mm", /* @__PURE__ */ new Date()), { locale: zhCN })
35136
+ ] })]
34914
35137
  }), data.commitHash && (0, import_jsx_runtime.jsxs)("div", {
34915
35138
  className: "flex items-center gap-3",
34916
- children: [(0, import_jsx_runtime.jsx)(FaCodeBranch, { className: "w-6 h-6" }), (0, import_jsx_runtime.jsxs)("span", { children: ["Commit ", data.commitHash] })]
35139
+ children: [(0, import_jsx_runtime.jsx)(FaCodeBranch, { className: "w-6 h-6" }), (0, import_jsx_runtime.jsxs)("span", { children: ["Commit Hash: ", data.commitHash] })]
34917
35140
  })]
34918
35141
  }),
34919
35142
  (0, import_jsx_runtime.jsxs)("div", {
34920
35143
  className: "p-10 rounded-[36px]",
34921
35144
  style: { backgroundColor: isDark ? "rgba(0,0,0,0.2)" : "rgba(255,255,255,0.5)" },
34922
35145
  children: [
34923
- (0, import_jsx_runtime.jsx)("p", {
34924
- className: "text-3xl font-semibold mb-5",
34925
- style: { color: accentColor },
34926
- children: "需要帮助?"
34927
- }),
34928
- (0, import_jsx_runtime.jsx)("p", {
34929
- className: "text-2xl mb-8",
34930
- style: { color: secondaryColor },
34931
- children: "请提供完整的错误截图和问题复现步骤"
35146
+ (0, import_jsx_runtime.jsxs)("div", {
35147
+ className: "flex items-end justify-between mb-6",
35148
+ children: [(0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
35149
+ className: "text-3xl font-semibold mb-2",
35150
+ style: { color: accentColor },
35151
+ children: "Need Help? / 需要帮助?"
35152
+ }), (0, import_jsx_runtime.jsx)("p", {
35153
+ className: "text-2xl",
35154
+ style: { color: secondaryColor },
35155
+ children: "提交问题时请附上完整报错截图、复现步骤和环境版本信息。"
35156
+ })] }), (0, import_jsx_runtime.jsx)("span", {
35157
+ className: "text-xs font-black tracking-[0.2em] uppercase px-3 py-1 rounded-full",
35158
+ style: {
35159
+ color: primaryColor,
35160
+ backgroundColor: isDark ? "rgba(248,113,113,0.12)" : "rgba(220,38,38,0.08)"
35161
+ },
35162
+ children: "Support"
35163
+ })]
34932
35164
  }),
34933
35165
  (0, import_jsx_runtime.jsxs)("div", {
34934
- className: "flex items-center gap-10 text-2xl",
35166
+ className: "grid grid-cols-2 gap-x-6 gap-y-6 text-2xl leading-relaxed py-6",
35167
+ style: {
35168
+ borderTop: `1px solid ${isDark ? "rgba(248,113,113,0.2)" : "rgba(220,38,38,0.12)"}`,
35169
+ borderBottom: `1px solid ${isDark ? "rgba(248,113,113,0.2)" : "rgba(220,38,38,0.12)"}`
35170
+ },
34935
35171
  children: [
34936
- (0, import_jsx_runtime.jsx)("span", {
35172
+ (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
35173
+ className: "font-semibold mb-1",
35174
+ style: { color: accentColor },
35175
+ children: "GitHub Issue"
35176
+ }), (0, import_jsx_runtime.jsx)("p", {
35177
+ className: "text-xl break-all",
34937
35178
  style: { color: secondaryColor },
34938
- children: "GitHub Issues"
34939
- }),
34940
- (0, import_jsx_runtime.jsx)("span", {
34941
- style: { color: mutedColor },
34942
- children: "·"
34943
- }),
34944
- (0, import_jsx_runtime.jsxs)("span", {
35179
+ children: "https://github.com/ikenxuan/karin-plugin-kkk/issues/new/choose"
35180
+ })] }),
35181
+ (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
35182
+ className: "font-semibold mb-1",
35183
+ style: { color: accentColor },
35184
+ children: "GitHub Repository"
35185
+ }), (0, import_jsx_runtime.jsx)("p", {
35186
+ className: "text-xl break-all",
34945
35187
  style: { color: secondaryColor },
34946
- children: ["QQ 群: ", (0, import_jsx_runtime.jsx)("span", {
34947
- className: "font-bold",
34948
- style: { color: primaryColor },
34949
- children: "795874649"
34950
- })]
34951
- })
35188
+ children: "https://github.com/ikenxuan/karin-plugin-kkk"
35189
+ })] }),
35190
+ (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
35191
+ className: "font-semibold mb-1",
35192
+ style: { color: accentColor },
35193
+ children: "QQ 群"
35194
+ }), (0, import_jsx_runtime.jsx)("p", {
35195
+ className: "text-xl",
35196
+ style: { color: secondaryColor },
35197
+ children: "795874649"
35198
+ })] }),
35199
+ (0, import_jsx_runtime.jsxs)("div", { children: [(0, import_jsx_runtime.jsx)("p", {
35200
+ className: "font-semibold mb-1",
35201
+ style: { color: accentColor },
35202
+ children: "附带信息"
35203
+ }), (0, import_jsx_runtime.jsx)("p", {
35204
+ className: "text-xl",
35205
+ style: { color: secondaryColor },
35206
+ children: "此图片 + 触发命令"
35207
+ })] })
34952
35208
  ]
35209
+ }),
35210
+ (0, import_jsx_runtime.jsxs)("div", {
35211
+ className: "flex items-center gap-4 mt-6 text-xl",
35212
+ style: { color: mutedColor },
35213
+ children: [(0, import_jsx_runtime.jsx)("span", {
35214
+ className: "font-mono",
35215
+ children: "Tips:"
35216
+ }), (0, import_jsx_runtime.jsx)("span", { children: "信息越完整,定位越快。" })]
34953
35217
  })
34954
35218
  ]
34955
35219
  })