karin-plugin-kkk 2.30.3 → 2.30.4

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 CHANGED
@@ -2,6 +2,21 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ## [2.30.4](https://github.com/ikenxuan/karin-plugin-kkk/compare/v2.30.3...v2.30.4) (2026-05-13)
6
+
7
+
8
+ ### 🐛 错误修复
9
+
10
+ * 更新日志diff二维码链接错误 ([50d1029](https://github.com/ikenxuan/karin-plugin-kkk/commit/50d1029ecb9e30e51767ebbc05d1b10e50b1cde9))
11
+
12
+
13
+ ### 💄 UI 优化
14
+
15
+ * 优化更新日志背景配色 ([b49b21f](https://github.com/ikenxuan/karin-plugin-kkk/commit/b49b21f8ad0ea4d61217b683929405c2c586cbae))
16
+ * 更新评论图标为B站官方图标 ([6c53d92](https://github.com/ikenxuan/karin-plugin-kkk/commit/6c53d92158ee1e23dfc6e67821c1d190194a0aae))
17
+ * 细优报错图 ([4385094](https://github.com/ikenxuan/karin-plugin-kkk/commit/4385094a68d1aa5b3688d9339e9f39962f341242))
18
+ * 细优推送列表图片,添加群头像 ([6bfc87c](https://github.com/ikenxuan/karin-plugin-kkk/commit/6bfc87c3d9ef5d09f047b689f4d61e818abd9845))
19
+
5
20
  ## [2.30.3](https://github.com/ikenxuan/karin-plugin-kkk/compare/v2.30.2...v2.30.3) (2026-05-12)
6
21
 
7
22
 
@@ -1,10 +1,10 @@
1
1
  {
2
- "version": "2.30.3",
3
- "buildTime": "2026-05-12T12:15:31.336Z",
4
- "buildTimestamp": 1778588131336,
2
+ "version": "2.30.4",
3
+ "buildTime": "2026-05-13T06:19:24.938Z",
4
+ "buildTimestamp": 1778653164939,
5
5
  "name": "karin-plugin-kkk",
6
6
  "description": "Karin 的「抖音」「B 站」视频解析/动态推送插件",
7
7
  "homepage": "https://github.com/ikenxuan/karin-plugin-kkk",
8
- "commitHash": "4c456b46b7e55ba7cb5bf617c33ee8db2f9e83c5",
9
- "shortCommitHash": "4c456b46"
8
+ "commitHash": "1a0cccc489cbfbc5047d3514dbb717ead4f01c8a",
9
+ "shortCommitHash": "1a0cccc4"
10
10
  }
@@ -1,9 +1,9 @@
1
1
  import { i as __toESM } from "./rolldown-runtime.js";
2
- import { $ as zhCN, $t as Hash, A as n, An as Button, At as Save, B as RiPieChart2Fill, Bn as Chalk, Bt as Palette, C as BiImage, Cn as Camera, Ct as ShoppingBag, D as AiOutlineVideoCamera, Dn as Bookmark, Dt as Settings2, E as AiFillStar, En as Bot, Et as Share2, F as RiHeart3Fill, Fn as require_png, Ft as QrCode, G as RiTiktokFill, Gt as Menu, H as RiStarFill, Hn as zod_default, Ht as Moon, I as RiHeart3Line, In as require_jsQR, It as Puzzle, J as RiVerifiedBadgeFill, Jt as LoaderCircle, K as RiTrophyFill, Kt as Maximize, L as RiHeartLine, Ln as require_jpeg_js, Lt as Plus, M as RiArrowRightFill, Mn as require_jsx_runtime, Mt as RefreshCw, N as RiGroupLine, Nn as require_server_node, Nt as Radio, O as m, On as BellRing, Ot as Search, P as RiHashtag, Pn as require_react, Pt as Quote, Q as SiAnthropic, Qt as Heart, R as RiLiveLine, Rn as require_heic_decode, Rt as Play, S as FaUserGroup, Sn as ChartColumn, St as Smartphone, T as AiFillPushpin, Tn as Box, Tt as ShieldCheck, U as RiStarLine, Ut as Monitor, V as RiShareForwardFill, Vn as Xhshow, Vt as Music, W as RiThumbUpFill, Wt as MessageCircle, X as SiGithub, Xt as Info, Y as RiVideoLine, Yt as LayoutTemplate, Z as SiBilibili, Zt as Image$1, _ as MdLocationOn, _n as CircleEllipsis, _t as Sun, a as purify, an as Eye, at as Zap, b as FaMusic, bn as CircleAlert, bt as SquarePen, c as VictoryLine, cn as Download, ct as Video, d as VictoryLabel, dn as CornerDownLeft, dt as User, en as GitBranch, et as parse, f as VictoryTheme, fn as Copy, ft as UserPlus, g as MdLightbulbOutline, gn as CircleFadingArrowUp, gt as Terminal, h as MdInfoOutline, hn as CircleQuestionMark, ht as Trash2, i as Window, in as FilePlay, it as differenceInSeconds, j as Markdown, jn as clsx, jt as RotateCcw, k as a, kn as Chip, kt as ScanLine, l as VictoryChart, ln as Crown, lt as Users, m as MdFitScreen, mn as Clock, mt as TriangleAlert, n as require_lib, nn as Gamepad2, nt as formatDistanceToNow, o as VictoryScatter, on as EyeOff, ot as X, p as rehypeHighlight, pn as Code, pt as Upload, q as RiUserFollowLine, qt as MapPin, r as require_qr_code_styling, rn as FileText, rt as format, s as VictoryPie, sn as ExternalLink, st as WandSparkles, t as createProxyMiddleware, tn as Gift, tt as fromUnixTime, u as VictoryAxis, un as Cpu, ut as UsersRound, v as MdSchedule, vn as CircleCheckBig, vt as Star, w as AiFillHeart, wn as Calendar, wt as Shield, x as FaTiktok, xn as Check, xt as Sparkles, y as FaCommentDots, yn as CircleCheck, yt as Square, z as RiMessage3Fill, zn as require_protobufjs, zt as Pencil } from "./vendor.js";
2
+ import { $ as zhCN, $t as Hash, A as n, An as Chip, At as Save, B as RiPieChart2Fill, Bn as require_protobufjs, Bt as Palette, C as BiImage, Cn as ChartColumn, Ct as ShoppingBag, D as AiOutlineVideoCamera, Dn as Bot, Dt as Settings2, E as AiFillStar, En as Box, Et as Share2, F as RiHeart3Fill, Fn as require_react, Ft as QrCode, G as RiTiktokFill, Gt as Menu, H as RiStarFill, Hn as Xhshow, Ht as Moon, I as RiHeart3Line, In as require_png, It as Puzzle, J as RiVerifiedBadgeFill, Jt as LoaderCircle, K as RiTrophyFill, Kt as Maximize, L as RiHeartLine, Ln as require_jsQR, Lt as Plus, M as RiArrowRightFill, Mn as clsx, Mt as RefreshCw, N as RiGroupLine, Nn as require_jsx_runtime, Nt as Radio, O as m, On as Bookmark, Ot as Search, P as RiHashtag, Pn as require_server_node, Pt as Quote, Q as SiAnthropic, Qt as Heart, R as RiLiveLine, Rn as require_jpeg_js, Rt as Play, S as FaUserGroup, Sn as Check, St as Smartphone, T as AiFillPushpin, Tn as Calendar, Tt as ShieldCheck, U as RiStarLine, Un as zod_default, Ut as Monitor, V as RiShareForwardFill, Vn as Chalk, Vt as Music, W as RiThumbUpFill, Wt as MessageCircle, X as SiGithub, Xt as Info, Y as RiVideoLine, Yt as LayoutTemplate, Z as SiBilibili, Zt as Image$1, _ as MdLocationOn, _n as CircleFadingArrowUp, _t as Sun, a as purify, an as Eye, at as Zap, b as FaMusic, bn as CircleCheck, bt as SquarePen, c as VictoryLine, cn as Download, ct as Video, d as VictoryLabel, dn as CornerDownLeft, dt as User, en as GitBranch, et as parse, f as VictoryTheme, fn as Copy, ft as UserPlus, g as MdLightbulbOutline, gn as CircleQuestionMark, gt as Terminal, h as MdInfoOutline, hn as Clapperboard, ht as Trash2, i as Window, in as FilePlay, it as differenceInSeconds, j as Markdown, jn as Button, jt as RotateCcw, k as a, kn as BellRing, kt as ScanLine, l as VictoryChart, ln as Crown, lt as Users, m as MdFitScreen, mn as Clock, mt as TriangleAlert, n as require_lib, nn as Gamepad2, nt as formatDistanceToNow, o as VictoryScatter, on as EyeOff, ot as X, p as rehypeHighlight, pn as Code, pt as Upload, q as RiUserFollowLine, qt as MapPin, r as require_qr_code_styling, rn as FileText, rt as format, s as VictoryPie, sn as ExternalLink, st as WandSparkles, t as createProxyMiddleware, tn as Gift, tt as fromUnixTime, u as VictoryAxis, un as Cpu, ut as UsersRound, v as MdSchedule, vn as CircleEllipsis, vt as Star, w as AiFillHeart, wn as Camera, wt as Shield, x as FaTiktok, xn as CircleAlert, xt as Sparkles, y as FaCommentDots, yn as CircleCheckBig, yt as Square, z as RiMessage3Fill, zn as require_heic_decode, zt as Pencil } from "./vendor.js";
3
3
  import "node:module";
4
4
  import fs from "node:fs";
5
5
  import path, { resolve } from "node:path";
6
- import URL$2, { fileURLToPath } from "node:url";
6
+ import URL$1, { fileURLToPath } from "node:url";
7
7
  import os, { platform } from "node:os";
8
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";
@@ -3270,7 +3270,7 @@ var XBogus = class {
3270
3270
  * @returns 包含完整URL、X-Bogus值和使用的User-Agent的元组
3271
3271
  */
3272
3272
  getXBogus(url, ua) {
3273
- const parsedUrl = new URL$2.URL(url);
3273
+ const parsedUrl = new URL$1.URL(url);
3274
3274
  const urlPath = parsedUrl.pathname + parsedUrl.search;
3275
3275
  const currentUa = ua ?? this.defaultUa;
3276
3276
  const rc4EncryptedUa = this.rc4Encrypt(this.uaKey, currentUa);
@@ -15989,6 +15989,31 @@ var CoinIcon = ({ className, size, variant = "solid" }) => {
15989
15989
  })
15990
15990
  });
15991
15991
  };
15992
+ /** B站官方评论图标 */
15993
+ var CommentIcon = ({ className, size, variant = "solid" }) => {
15994
+ if (variant === "line") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", {
15995
+ viewBox: "0 0 18 18",
15996
+ xmlns: "http://www.w3.org/2000/svg",
15997
+ className,
15998
+ fill: "currentColor",
15999
+ width: size,
16000
+ height: size,
16001
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
16002
+ fillRule: "evenodd",
16003
+ clipRule: "evenodd",
16004
+ d: "M1.5625 7.875C1.5625 4.59581 4.22081 1.9375 7.5 1.9375H10.5C13.7792 1.9375 16.4375 4.59581 16.4375 7.875C16.4375 11.0504 13.9447 13.6435 10.8093 13.8041C10.097 14.723 8.92088 15.8807 7.2671 16.3313C6.97351 16.4113 6.70476 16.2862 6.55411 16.0923C6.40789 15.9041 6.3561 15.63435 6.46524 15.383C6.72879 14.77625 6.77646 14.22103 6.73402 13.7618C3.81677 13.3871 1.5625 10.8945 1.5625 7.875ZM7.5 2.9375C4.77309 2.9375 2.5625 5.14809 2.5625 7.875C2.5625 10.5026 4.61524 12.6511 7.20419 12.8038C7.43059 12.8172 7.61962 12.9812 7.66472 13.2035C7.77257 13.7346 7.8012 14.4054 7.58843 15.1484C8.74832 14.6682 9.606 13.7598 10.1513 13.0165C10.2444 12.8895 10.3921 12.8138 10.5496 12.8123C13.2536 12.7857 15.4375 10.58535 15.4375 7.875C15.4375 5.14809 13.2269 2.9375 10.5 2.9375H7.5Z"
16005
+ })
16006
+ });
16007
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", {
16008
+ viewBox: "0 0 18 18",
16009
+ xmlns: "http://www.w3.org/2000/svg",
16010
+ className,
16011
+ fill: "currentColor",
16012
+ width: size,
16013
+ height: size,
16014
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M1.5625 7.875C1.5625 4.59581 4.22081 1.9375 7.5 1.9375H10.5C13.7792 1.9375 16.4375 4.59581 16.4375 7.875C16.4375 11.0504 13.9447 13.6435 10.8093 13.8041C10.097 14.723 8.92088 15.8807 7.2671 16.3313C6.97351 16.4113 6.70476 16.2862 6.55411 16.0923C6.40789 15.9041 6.3561 15.63435 6.46524 15.383C6.72879 14.77625 6.77646 14.22103 6.73402 13.7618C3.81677 13.3871 1.5625 10.8945 1.5625 7.875Z" })
16015
+ });
16016
+ };
15992
16017
  //#endregion
15993
16018
  //#region ../template/src/components/platforms/bilibili/Comment.tsx
15994
16019
  var bilibiliMentionClassName = "text-[#006A9E] dark:text-[#58B0D5]";
@@ -16713,7 +16738,7 @@ var BilibiliArticleStatus = import_react.memo((props) => {
16713
16738
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
16714
16739
  className: "flex gap-3 items-center text-[42px]",
16715
16740
  children: [
16716
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MessageCircle, { size: 32 }),
16741
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentIcon, { size: 32 }),
16717
16742
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
16718
16743
  className: "font-medium",
16719
16744
  children: props.data.stats.reply || 0
@@ -17004,7 +17029,7 @@ var BilibiliVideoDynamicContent = (props) => {
17004
17029
  }),
17005
17030
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17006
17031
  className: "flex gap-3 items-center",
17007
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(MessageCircle, { size: 48 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17032
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentIcon, { size: 48 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
17008
17033
  className: "select-text",
17009
17034
  children: [props.data.pinglun, "评论"]
17010
17035
  })]
@@ -17652,7 +17677,7 @@ var BilibiliDynamicStatus$1 = (props) => {
17652
17677
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
17653
17678
  className: "flex gap-2 items-center",
17654
17679
  children: [
17655
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MessageCircle, { size: 48 }),
17680
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentIcon, { size: 48 }),
17656
17681
  props.pinglun,
17657
17682
  "评论"
17658
17683
  ]
@@ -18190,7 +18215,7 @@ var BilibiliForwardStatus = (props) => {
18190
18215
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18191
18216
  className: "flex gap-2 items-center",
18192
18217
  children: [
18193
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MessageCircle, { size: 48 }),
18218
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentIcon, { size: 48 }),
18194
18219
  props.pinglun,
18195
18220
  "评论"
18196
18221
  ]
@@ -18984,7 +19009,7 @@ var BilibiliDynamicStatus = (props) => {
18984
19009
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
18985
19010
  className: "flex gap-2 items-center",
18986
19011
  children: [
18987
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MessageCircle, { size: 48 }),
19012
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentIcon, { size: 48 }),
18988
19013
  props.pinglun,
18989
19014
  "评论"
18990
19015
  ]
@@ -19382,32 +19407,32 @@ BilibiliQrcodeImg.displayName = "BilibiliQrcodeImg";
19382
19407
  var pushTypeConfig$1 = {
19383
19408
  video: {
19384
19409
  label: "投稿视频",
19385
- color: "bg-accent/8 text-accent border-accent/25",
19410
+ color: "bg-accent/6 text-accent/80 border-accent-soft",
19386
19411
  icon: Video
19387
19412
  },
19388
19413
  draw: {
19389
19414
  label: "图文动态",
19390
- color: "bg-[#23ade5]/10 text-[#23ade5] border-[#23ade5]/25",
19415
+ color: "bg-[#23ade5]/5 text-[#1a8fb8] border-[#23ade5]/12",
19391
19416
  icon: Image$1
19392
19417
  },
19393
19418
  word: {
19394
19419
  label: "纯文动态",
19395
- color: "bg-warning/10 text-warning border-warning/25",
19420
+ color: "bg-warning/5 text-warning/80 border-warning/12",
19396
19421
  icon: FileText
19397
19422
  },
19398
19423
  live: {
19399
19424
  label: "直播动态",
19400
- color: "bg-success/10 text-success border-success/25",
19425
+ color: "bg-success/5 text-success/80 border-success/12",
19401
19426
  icon: Radio
19402
19427
  },
19403
19428
  forward: {
19404
19429
  label: "转发动态",
19405
- color: "bg-[#f97316]/10 text-[#f97316] border-[#f97316]/25",
19430
+ color: "bg-[#f97316]/5 text-[#cc6b1f] border-[#f97316]/12",
19406
19431
  icon: Share2
19407
19432
  },
19408
19433
  article: {
19409
19434
  label: "投稿专栏",
19410
- color: "bg-[#7c3aed]/10 text-[#7c3aed] border-[#7c3aed]/25",
19435
+ color: "bg-[#7c3aed]/5 text-[#6b4fa8] border-[#7c3aed]/12",
19411
19436
  icon: FileText
19412
19437
  }
19413
19438
  };
@@ -19523,7 +19548,7 @@ var BilibiliUserItem = (props) => {
19523
19548
  className: `h-full min-h-18.5 px-2.5 py-2.5 rounded-xl border backdrop-blur-sm flex flex-col justify-between transition-colors duration-200 ${isActive ? config.color : "bg-surface/45 text-muted border-border/15"}`,
19524
19549
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(config.icon, {
19525
19550
  size: 18,
19526
- className: isActive ? "" : "opacity-50"
19551
+ className: isActive ? "" : "opacity-40"
19527
19552
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
19528
19553
  className: "text-[13px] font-bold tracking-wide leading-tight",
19529
19554
  children: config.label
@@ -19692,12 +19717,11 @@ var BilibiliUserList = (props) => {
19692
19717
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
19693
19718
  className: "flex items-center gap-3 mb-4",
19694
19719
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
19695
- className: "w-10 h-10 rounded-xl bg-foreground flex items-center justify-center text-background shadow-lg",
19696
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", {
19697
- className: "w-6 h-6",
19698
- fill: "currentColor",
19699
- viewBox: "0 0 24 24",
19700
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-4.41-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-5.5-2.5l7.51-3.49L17.5 6.5 9.99 9.99 6.5 17.5zm5.5-6.6c.61 0 1.1.49 1.1 1.1s-.49 1.1-1.1 1.1-1.1-.49-1.1-1.1.49-1.1 1.1-1.1z" })
19720
+ className: "w-10 h-10 rounded-xl overflow-hidden shadow-lg border border-border/30",
19721
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EnhancedImage, {
19722
+ src: props.data.groupInfo.groupAvatar,
19723
+ alt: "Group Avatar",
19724
+ className: "w-full h-full object-cover"
19701
19725
  })
19702
19726
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
19703
19727
  className: "font-mono text-sm font-bold tracking-widest uppercase opacity-50 text-foreground",
@@ -19891,7 +19915,8 @@ var BilibiliVideoInfo = import_react.memo((props) => {
19891
19915
  }),
19892
19916
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
19893
19917
  className: "flex items-center gap-1.5",
19894
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(MessageCircle, {
19918
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CommentIcon, {
19919
+ variant: "line",
19895
19920
  size: 28,
19896
19921
  className: "text-foreground/20"
19897
19922
  }), formatNumber$2(props.data.stat.reply)]
@@ -20398,7 +20423,7 @@ var VideoInfoHeader = (props) => {
20398
20423
  })
20399
20424
  }),
20400
20425
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
20401
- className: "flex items-center gap-12 flex-wrap",
20426
+ className: "grid grid-cols-2 gap-8",
20402
20427
  children: [
20403
20428
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
20404
20429
  className: "flex items-center gap-4 text-foreground/50",
@@ -22807,23 +22832,23 @@ var StatItem$2 = ({ icon: IconComponent, value, iconClassName }) => /* @__PURE__
22807
22832
  var pushTypeConfig = {
22808
22833
  post: {
22809
22834
  label: "作品更新",
22810
- color: "bg-accent/5 text-accent border-accent-soft-hover",
22811
- icon: RiVideoLine
22835
+ color: "bg-accent/5 text-accent/80 border-accent/12",
22836
+ icon: Clapperboard
22812
22837
  },
22813
22838
  favorite: {
22814
22839
  label: "喜欢列表",
22815
- color: "bg-danger/5 text-danger border-danger-soft-hover",
22816
- icon: RiHeartLine
22840
+ color: "bg-[#d94f50]/5 text-[#b04546] border-[#d94f50]/12",
22841
+ icon: Heart
22817
22842
  },
22818
22843
  recommend: {
22819
22844
  label: "推荐列表",
22820
- color: "bg-warning/5 text-warning border-warning-soft-hover",
22821
- icon: RiStarLine
22845
+ color: "bg-[#c9943a]/5 text-[#a07d30] border-[#c9943a]/12",
22846
+ icon: Sparkles
22822
22847
  },
22823
22848
  live: {
22824
22849
  label: "直播状态",
22825
- color: "bg-surface-secondary/40 text-accent border-border/20",
22826
- icon: RiLiveLine
22850
+ color: "bg-[#3aa876]/5 text-[#2e8a5e] border-[#3aa876]/12",
22851
+ icon: Radio
22827
22852
  }
22828
22853
  };
22829
22854
  /**
@@ -22911,7 +22936,7 @@ var DouyinUserItem = (props) => {
22911
22936
  children: props.username
22912
22937
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
22913
22938
  className: "inline-flex items-center gap-1 px-2 py-1 rounded-md bg-surface/50 border border-border/50 text-xs font-mono font-bold text-muted",
22914
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(RiHashtag, {
22939
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Hash, {
22915
22940
  size: 12,
22916
22941
  className: "opacity-70"
22917
22942
  }), props.short_id]
@@ -22947,17 +22972,17 @@ var DouyinUserItem = (props) => {
22947
22972
  className: "flex-1 flex flex-col gap-2",
22948
22973
  children: [
22949
22974
  {
22950
- icon: RiGroupLine,
22975
+ icon: UsersRound,
22951
22976
  value: props.fans,
22952
22977
  label: "粉丝"
22953
22978
  },
22954
22979
  {
22955
- icon: RiHeart3Line,
22980
+ icon: Heart,
22956
22981
  value: props.total_favorited,
22957
22982
  label: "获赞"
22958
22983
  },
22959
22984
  {
22960
- icon: RiUserFollowLine,
22985
+ icon: UserPlus,
22961
22986
  value: props.following_count,
22962
22987
  label: "关注"
22963
22988
  }
@@ -23101,12 +23126,11 @@ var DouyinUserList = (props) => {
23101
23126
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
23102
23127
  className: "flex items-center gap-3 mb-4",
23103
23128
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
23104
- className: "w-10 h-10 rounded-xl bg-foreground flex items-center justify-center text-background shadow-lg",
23105
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", {
23106
- className: "w-6 h-6",
23107
- fill: "currentColor",
23108
- viewBox: "0 0 24 24",
23109
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M19 4h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 16H5V10h14v10zm0-12H5V6h14v2zm-7 5h5v5h-5z" })
23129
+ className: "w-10 h-10 rounded-xl overflow-hidden shadow-lg border border-border/30",
23130
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
23131
+ src: props.data.groupInfo.groupAvatar,
23132
+ alt: "Group Avatar",
23133
+ className: "w-full h-full object-cover"
23110
23134
  })
23111
23135
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
23112
23136
  className: "font-mono text-sm font-bold tracking-widest uppercase opacity-50 text-foreground",
@@ -24220,8 +24244,8 @@ var KuaishouComment = import_react.memo((props) => {
24220
24244
  var InlineCalloutCode = ({ children, className }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
24221
24245
  className: `inline-flex items-center rounded-[0.55em] px-[0.48em] py-[0.18em] font-semibold ${className ?? ""}`.trim(),
24222
24246
  style: {
24223
- background: "color-mix(in oklab, var(--success) 12%, transparent)",
24224
- color: "var(--success)"
24247
+ background: "color-mix(in oklab, #d4af37 14%, transparent)",
24248
+ color: "#d4af37"
24225
24249
  },
24226
24250
  children
24227
24251
  });
@@ -24234,27 +24258,27 @@ var Changelog = import_react.memo((props) => {
24234
24258
  const isDark = props.data.useDarkTheme ?? false;
24235
24259
  const { qrCodeDataUrl } = props;
24236
24260
  const backgroundColors = isDark ? {
24237
- base: "#06110d",
24238
- primary: "rgba(70, 184, 145, 0.26)",
24239
- secondary: "rgba(135, 214, 84, 0.22)",
24240
- accent: "rgba(88, 154, 210, 0.18)",
24241
- wash: "rgba(7, 24, 18, 0.8)",
24242
- tint: "rgba(162, 224, 103, 0.1)",
24243
- noiseOpacity: .22,
24261
+ base: "#0a0a0a",
24262
+ primary: "rgba(212, 175, 55, 0.28)",
24263
+ secondary: "rgba(184, 134, 11, 0.24)",
24264
+ accent: "rgba(205, 133, 63, 0.20)",
24265
+ wash: "rgba(10, 10, 10, 0.85)",
24266
+ tint: "rgba(212, 175, 55, 0.12)",
24267
+ noiseOpacity: .2,
24244
24268
  noiseBlend: "screen",
24245
- inlineCodeBg: "rgba(255, 255, 255, 0.08)",
24246
- inlineCodeText: "#dff3db"
24269
+ inlineCodeBg: "rgba(255, 215, 0, 0.10)",
24270
+ inlineCodeText: "#f0c040"
24247
24271
  } : {
24248
- base: "#f5fbfc",
24249
- primary: "rgba(214, 236, 240, 0.95)",
24250
- secondary: "rgba(189, 221, 34, 0.42)",
24251
- accent: "rgba(214, 236, 240, 0.72)",
24252
- wash: "rgba(255, 255, 255, 0.36)",
24253
- tint: "rgba(189, 221, 34, 0.12)",
24254
- noiseOpacity: .16,
24272
+ base: "#faf8f3",
24273
+ primary: "rgba(212, 175, 55, 0.20)",
24274
+ secondary: "rgba(184, 134, 11, 0.16)",
24275
+ accent: "rgba(205, 133, 63, 0.14)",
24276
+ wash: "rgba(250, 248, 243, 0.65)",
24277
+ tint: "rgba(212, 175, 55, 0.07)",
24278
+ noiseOpacity: .12,
24255
24279
  noiseBlend: "multiply",
24256
- inlineCodeBg: "rgba(15, 23, 42, 0.06)",
24257
- inlineCodeText: "#314329"
24280
+ inlineCodeBg: "rgba(184, 134, 11, 0.12)",
24281
+ inlineCodeText: "#8b6914"
24258
24282
  };
24259
24283
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DefaultLayout, {
24260
24284
  ...props,
@@ -24348,7 +24372,7 @@ var Changelog = import_react.memo((props) => {
24348
24372
  })
24349
24373
  }),
24350
24374
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
24351
- className: "relative px-20 pt-5 pb-0 w-full max-w-none prose prose-lg prose-invert from-surface to-surface",
24375
+ className: "relative px-16 pt-5 pb-0 w-full max-w-none prose prose-lg prose-invert from-surface to-surface",
24352
24376
  children: [
24353
24377
  props.data.Tip === true ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
24354
24378
  className: "pt-32",
@@ -24397,7 +24421,7 @@ var Changelog = import_react.memo((props) => {
24397
24421
  }),
24398
24422
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "进入" }),
24399
24423
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(InlineCalloutCode, {
24400
- className: "text-[0.9em]",
24424
+ className: "text-[0.9em] font-mono",
24401
24425
  children: "Karin WebUI"
24402
24426
  }),
24403
24427
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "→" }),
@@ -24423,7 +24447,7 @@ var Changelog = import_react.memo((props) => {
24423
24447
  }),
24424
24448
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Karin 根目录运行" }),
24425
24449
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(InlineCalloutCode, {
24426
- className: "text-[0.85em] whitespace-nowrap",
24450
+ className: "text-[0.85em] whitespace-nowrap font-mono",
24427
24451
  children: [
24428
24452
  "pnpm add karin-plugin-kkk@",
24429
24453
  props.data.remoteVersion,
@@ -24437,7 +24461,7 @@ var Changelog = import_react.memo((props) => {
24437
24461
  ]
24438
24462
  }) }) : null,
24439
24463
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
24440
- className: "changelog-content",
24464
+ className: "changelog-content px-6",
24441
24465
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Markdown, {
24442
24466
  rehypePlugins: [rehypeHighlight],
24443
24467
  components: {
@@ -24480,7 +24504,7 @@ var Changelog = import_react.memo((props) => {
24480
24504
  children
24481
24505
  }),
24482
24506
  ul: ({ children, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", {
24483
- className: "pl-[5em] mb-[2em] list-disc text-foreground",
24507
+ className: "pl-[5em] mb-[4em] list-disc text-foreground",
24484
24508
  ...props,
24485
24509
  children
24486
24510
  }),
@@ -24512,12 +24536,15 @@ var Changelog = import_react.memo((props) => {
24512
24536
  ...props,
24513
24537
  children
24514
24538
  }),
24515
- a: ({ children, href, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
24516
- className: "inline-flex gap-3 items-baseline cursor-pointer text-foreground/50 hover:underline",
24517
- onClick: (e) => e.preventDefault(),
24518
- ...props,
24519
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children })
24520
- }),
24539
+ a: ({ children, href, ...props }) => {
24540
+ const isVersionLink = href?.includes("/compare/");
24541
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", {
24542
+ className: `inline-flex gap-3 items-baseline cursor-pointer font-medium hover:underline ${isVersionLink ? "text-success" : "text-foreground/50"}`,
24543
+ onClick: (e) => e.preventDefault(),
24544
+ ...props,
24545
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children })
24546
+ });
24547
+ },
24521
24548
  img: ({ ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("img", {
24522
24549
  className: "max-w-full h-auto rounded",
24523
24550
  ...props
@@ -24553,7 +24580,7 @@ var Changelog = import_react.memo((props) => {
24553
24580
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
24554
24581
  className: "text-4xl text-foreground/60",
24555
24582
  children: [
24556
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "查看实际运行代码从" }),
24583
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "扫码查看实际运行代码从" }),
24557
24584
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
24558
24585
  className: "font-bold text-foreground/80",
24559
24586
  children: [" v", props.data.localVersion]
@@ -24563,7 +24590,7 @@ var Changelog = import_react.memo((props) => {
24563
24590
  className: "font-bold text-foreground/80",
24564
24591
  children: [" v", props.data.remoteVersion]
24565
24592
  }),
24566
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: " 的 Diff 差异" })
24593
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: " 的差异" })
24567
24594
  ]
24568
24595
  })]
24569
24596
  }),
@@ -25959,56 +25986,56 @@ var getLogLevelTheme = (level, isDark) => {
25959
25986
  borderClass: "border-muted/20",
25960
25987
  textClass: "text-muted",
25961
25988
  iconClass: "text-muted",
25962
- levelClass: isDark ? "text-muted/10" : "text-muted/5",
25963
- dotClass: "bg-muted/20"
25989
+ levelClass: isDark ? "text-muted/10" : "text-muted/10",
25990
+ dotClass: "bg-muted/40"
25964
25991
  },
25965
25992
  "DEBU": {
25966
25993
  bgClass: isDark ? "bg-cyan-400/10" : "bg-cyan-500/5",
25967
25994
  borderClass: isDark ? "border-cyan-400/20" : "border-cyan-500/20",
25968
25995
  textClass: isDark ? "text-cyan-400" : "text-cyan-600",
25969
25996
  iconClass: isDark ? "text-cyan-400" : "text-cyan-600",
25970
- levelClass: isDark ? "text-cyan-400/10" : "text-cyan-600/5",
25971
- dotClass: isDark ? "bg-cyan-400/20" : "bg-cyan-500/20"
25997
+ levelClass: isDark ? "text-cyan-400/10" : "text-cyan-600/10",
25998
+ dotClass: isDark ? "bg-cyan-400/40" : "bg-cyan-500/40"
25972
25999
  },
25973
26000
  "MARK": {
25974
26001
  bgClass: isDark ? "bg-muted/10" : "bg-muted/5",
25975
26002
  borderClass: "border-muted/20",
25976
26003
  textClass: "text-muted",
25977
26004
  iconClass: "text-muted",
25978
- levelClass: isDark ? "text-muted/10" : "text-muted/5",
25979
- dotClass: "bg-muted/20"
26005
+ levelClass: isDark ? "text-muted/10" : "text-muted/10",
26006
+ dotClass: "bg-muted/40"
25980
26007
  },
25981
26008
  "INFO": {
25982
26009
  bgClass: "bg-success-soft",
25983
26010
  borderClass: "border-success/25",
25984
26011
  textClass: "text-success",
25985
26012
  iconClass: "text-success",
25986
- levelClass: isDark ? "text-success/10" : "text-success/5",
25987
- dotClass: "bg-success/25"
26013
+ levelClass: isDark ? "text-success/10" : "text-success/10",
26014
+ dotClass: "bg-success/40"
25988
26015
  },
25989
26016
  "WARN": {
25990
26017
  bgClass: "bg-warning-soft",
25991
26018
  borderClass: "border-warning/25",
25992
26019
  textClass: "text-warning",
25993
26020
  iconClass: "text-warning",
25994
- levelClass: isDark ? "text-warning/10" : "text-warning/5",
25995
- dotClass: "bg-warning/25"
26021
+ levelClass: isDark ? "text-warning/10" : "text-warning-soft",
26022
+ dotClass: "bg-warning/40"
25996
26023
  },
25997
26024
  "ERRO": {
25998
26025
  bgClass: "bg-danger-soft",
25999
26026
  borderClass: "border-danger/25",
26000
26027
  textClass: "text-danger",
26001
26028
  iconClass: "text-danger",
26002
- levelClass: isDark ? "text-danger/10" : "text-danger/5",
26003
- dotClass: "bg-danger/25"
26029
+ levelClass: isDark ? "text-danger/10" : "text-danger/10",
26030
+ dotClass: "bg-danger/40"
26004
26031
  },
26005
26032
  "FATA": {
26006
26033
  bgClass: isDark ? "bg-pink-400/10" : "bg-pink-500/5",
26007
26034
  borderClass: isDark ? "border-pink-400/25" : "border-pink-500/25",
26008
26035
  textClass: isDark ? "text-pink-400" : "text-pink-500",
26009
26036
  iconClass: isDark ? "text-pink-400" : "text-pink-500",
26010
- levelClass: isDark ? "text-pink-400/10" : "text-pink-500/5",
26011
- dotClass: isDark ? "bg-pink-400/25" : "bg-pink-500/25"
26037
+ levelClass: isDark ? "text-pink-400/10" : "text-pink-500/10",
26038
+ dotClass: isDark ? "bg-pink-400/40" : "bg-pink-500/40"
26012
26039
  }
26013
26040
  };
26014
26041
  return themeMap[level] || themeMap["TRAC"];
@@ -26398,7 +26425,7 @@ var handlerError = (props) => {
26398
26425
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(SectionTitle, {
26399
26426
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CircleAlert, {
26400
26427
  size: 36,
26401
- style: { color: primaryColor }
26428
+ style: { color: mutedColor }
26402
26429
  }),
26403
26430
  en: "Stack Trace",
26404
26431
  zh: "错误堆栈",
@@ -26436,7 +26463,7 @@ var handlerError = (props) => {
26436
26463
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("legend", {
26437
26464
  className: "flex items-center gap-2 ml-4",
26438
26465
  children: [
26439
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: `w-3 h-3 rounded-full -mr-1.5 ${theme.dotClass}` }),
26466
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: `w-2 h-6 rounded-full -mr-1.5 ${theme.dotClass}` }),
26440
26467
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
26441
26468
  className: "flex items-center gap-2 px-3",
26442
26469
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Clock, {
@@ -26447,14 +26474,14 @@ var handlerError = (props) => {
26447
26474
  children: log.timestamp
26448
26475
  })]
26449
26476
  }),
26450
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: `w-3 h-3 rounded-full -ml-1.5 ${theme.dotClass}` })
26477
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: `w-2 h-6 rounded-full -ml-1.5 ${theme.dotClass}` })
26451
26478
  ]
26452
26479
  }),
26453
26480
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
26454
26481
  className: "absolute bottom-2 right-6 pointer-events-none",
26455
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
26456
- className: `text-[56px] font-black uppercase leading-none tracking-tight ${theme.levelClass}`,
26457
- children: log.level
26482
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
26483
+ className: `text-6xl font-black uppercase leading-none tracking-tight ${theme.levelClass}`,
26484
+ children: [log.level, "」"]
26458
26485
  })
26459
26486
  }),
26460
26487
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
@@ -26660,8 +26687,9 @@ var handlerError = (props) => {
26660
26687
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(MdSchedule, { size: 24 }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
26661
26688
  "Built Time: ",
26662
26689
  data.buildTime,
26663
- " 距离 ",
26664
- formatDistanceToNow(parse(data.buildTime, "yyyy年MM月dd日 HH:mm", /* @__PURE__ */ new Date()), { locale: zhCN })
26690
+ " ",
26691
+ formatDistanceToNow(parse(data.buildTime, "yyyy年MM月dd日 HH:mm", /* @__PURE__ */ new Date()), { locale: zhCN }),
26692
+ "前"
26665
26693
  ] })]
26666
26694
  }), data.commitHash && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
26667
26695
  className: "flex items-center gap-3",
@@ -38908,7 +38936,8 @@ var Bilibilipush = class extends Base {
38908
38936
  renderOpt,
38909
38937
  groupInfo: {
38910
38938
  groupId: groupInfo.groupId || "",
38911
- groupName: groupInfo.groupName || ""
38939
+ groupName: groupInfo.groupName || "",
38940
+ groupAvatar: groupInfo.avatar || ""
38912
38941
  }
38913
38942
  });
38914
38943
  await this.e.reply(img);
@@ -41784,7 +41813,8 @@ var DouYinpush = class extends Base {
41784
41813
  renderOpt,
41785
41814
  groupInfo: {
41786
41815
  groupId: groupInfo.groupId || "",
41787
- groupName: groupInfo.groupName || ""
41816
+ groupName: groupInfo.groupName || "",
41817
+ groupAvatar: groupInfo.avatar || ""
41788
41818
  }
41789
41819
  });
41790
41820
  await this.e.reply(img);
@@ -43939,7 +43969,7 @@ var getChangelogImage = async (ctx, props) => {
43939
43969
  remoteVersion: props.remoteVersion,
43940
43970
  lagVersionCount,
43941
43971
  buildTime,
43942
- share_url: `https://karin-plugin-kkk-docs.vercel.app/zh-CN/diff?old=${props.localVersion}&new=latest`
43972
+ share_url: `https://karin-plugin-kkk-docs.vercel.app/diff?old=${props.localVersion}&new=latest`
43943
43973
  }) || null;
43944
43974
  };
43945
43975
  //#endregion
@@ -333,7 +333,8 @@ interface DouyinUserListProps extends BaseComponentProps {
333
333
  /** 是否使用深色主题 */useDarkTheme?: boolean; /** 群组信息 */
334
334
  groupInfo: {
335
335
  /** 群号 */groupId: string; /** 群名称 */
336
- groupName: string;
336
+ groupName: string; /** 群头像 */
337
+ groupAvatar: string;
337
338
  }; /** 用户列表数据 */
338
339
  renderOpt: {
339
340
  /** 用户头像图片URL */avatar_img: string; /** 用户名 */
@@ -1297,7 +1298,8 @@ interface BilibiliUserListProps extends BaseComponentProps {
1297
1298
  /** 是否使用深色主题 */useDarkTheme?: boolean; /** 群组信息 */
1298
1299
  groupInfo: {
1299
1300
  /** 群号 */groupId: string; /** 群名称 */
1300
- groupName: string;
1301
+ groupName: string; /** 群头像 */
1302
+ groupAvatar: string;
1301
1303
  }; /** 用户列表数据 */
1302
1304
  renderOpt: {
1303
1305
  /** 用户头像图片URL */avatar_img: string; /** 用户名 */