karin-plugin-kkk 2.36.2 → 2.36.3

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,23 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ## [2.36.3](https://github.com/ikenxuan/karin-plugin-kkk/compare/v2.36.2...v2.36.3) (2026-07-07)
6
+
7
+
8
+ ### 🐛 错误修复
9
+
10
+ * 1 ([b33a64f](https://github.com/ikenxuan/karin-plugin-kkk/commit/b33a64fda635534e194e78cfad779506a4063875))
11
+ * **core:** 优化本地开发环境判断 ([#328](https://github.com/ikenxuan/karin-plugin-kkk/issues/328)) ([3a4ba32](https://github.com/ikenxuan/karin-plugin-kkk/commit/3a4ba32a649e7bbf9e146136d705425606f9ac14))
12
+ * **douyin:** 移除部分错误捕获 ([2a924d1](https://github.com/ikenxuan/karin-plugin-kkk/commit/2a924d1e32111d2db71271e3bb457bea379f47c7))
13
+ * 主动消息默认重试次数改为0 ([e0779bf](https://github.com/ikenxuan/karin-plugin-kkk/commit/e0779bf6b118ef0ca8c201c4ca821793b9abc102))
14
+ * 依赖缺失 ([0e7fd57](https://github.com/ikenxuan/karin-plugin-kkk/commit/0e7fd5719355c084f753b06aee2b1638cebd2da2))
15
+ * 更新 @ikenxuan/qrcode 依赖至 1.4.0,并使用同步方法解析二维码 ([edf1db5](https://github.com/ikenxuan/karin-plugin-kkk/commit/edf1db5d0e0245358fa1daac132a5a19ae023caf))
16
+
17
+
18
+ ### 📦 依赖更新
19
+
20
+ * update ([6458627](https://github.com/ikenxuan/karin-plugin-kkk/commit/64586271d96f71c6b45444a3bae59ea180cabe49))
21
+
5
22
  ## [2.36.2](https://github.com/ikenxuan/karin-plugin-kkk/compare/v2.36.1...v2.36.2) (2026-06-30)
6
23
 
7
24
 
@@ -1,10 +1,10 @@
1
1
  {
2
- "version": "2.36.2",
3
- "buildTime": "2026-06-30T05:23:18.288Z",
4
- "buildTimestamp": 1782796998288,
2
+ "version": "2.36.3",
3
+ "buildTime": "2026-07-07T09:21:01.284Z",
4
+ "buildTimestamp": 1783416061284,
5
5
  "name": "karin-plugin-kkk",
6
6
  "description": "Karin 的「抖音」「B 站」视频解析/动态推送插件",
7
7
  "homepage": "https://github.com/ikenxuan/karin-plugin-kkk",
8
- "commitHash": "5f45e5b1970487e14530cb41472bd928b7a5e1ed",
9
- "shortCommitHash": "5f45e5b1"
8
+ "commitHash": "713f028bd0432595508092edf1427f661f820279",
9
+ "shortCommitHash": "713f028b"
10
10
  }
@@ -1,5 +1,5 @@
1
1
  import { i as __toESM } from "./rolldown-runtime.js";
2
- import { $ as SiXiaomi, $n as CircleCheckBig, $t as Quote, A as AiFillHeart, An as Copy, At as X, B as RiHeartLine, Bn as Box, Bt as Square, C as MdLocationOn, Cn as Eye, Ct as parse, D as FaTiktok, Dn as Crown, Dt as differenceInSeconds, E as FaMusic, En as Download, Et as format, F as RiArrowRightFill, Fn as CircleFadingArrowUp, Ft as Upload, G as RiStarFill, Gn as WandSparkles, Gt as Share2, H as RiMessage3Fill, Hn as Bookmark, Ht as ShoppingBag, I as RiGroupLine, In as CircleEllipsis, It as Trash2, J as RiTiktokFill, Jn as SquarePen, Jt as ScanLine, K as RiStarLine, Kn as UsersRound, Kt as Settings2, L as RiHashtag, Ln as Check, Lt as Terminal, M as AiFillStar, Mn as Clock, Mt as Users, N as AiOutlineVideoCamera, Nn as Clock3, Nt as User, O as FaUserGroup, On as Cpu, Ot as twMerge, P as Markdown, Pn as Clapperboard, Pt as UserPlus, Q as RiVideoLine, Qn as CircleQuestionMark, Qt as Radio, R as RiHeart3Fill, Rn as Camera, Rt as Sun, S as MdLightbulbOutline, Sn as FileText, St as zhCN, T as FaCommentDots, Tn as ExternalLink, Tt as formatDistanceToNow, U as RiPieChart2Fill, Un as BellRing, Ut as Shield, V as RiLiveLine, Vn as Bot, Vt as Smartphone, W as RiShareForwardFill, Wn as ArrowDownToLine, Wt as ShieldCheck, X as RiUserFollowLine, Xn as LoaderCircle, Xt as RotateCcw, Y as RiTrophyFill, Yn as Sparkles, Yt as Save, Z as RiVerifiedBadgeFill, Zn as FilePlay, Zt as RefreshCw, _ as tailwind_css, _n as Heart, _t as n, a as VictoryScatter, an as Palette, ar as clsx, at as SiHonor, b as MdFitScreen, bn as Gift, bt as o$1, c as VictoryChart, cn as Monitor, cr as require_react, ct as SiBilibili, d as VictoryTheme, dn as Maximize, dr as CryptoConfig, dt as o$2, en as QrCode, er as CircleCheck, et as SiVivo, f as rehypeHighlight, fn as MapPin, fr as FingerprintGenerator, ft as r, g as tsdown, gn as Image$1, gt as a, h as typescript, hn as Info, ht as m, i as require_heic_decode, in as Pencil, ir as Button, it as SiHuawei, j as AiFillPushpin, jn as Code, jt as Video, k as BiImage, kn as CornerDownLeft, kt as Zap, l as VictoryAxis, ln as MessageCircle, lr as require_protobufjs, lt as SiApple, m as vite, mn as LayoutTemplate, mr as zod_default, mt as o$3, n as require_lib, nn as Plus, nr as ChartColumn, nt as SiOppo, o as VictoryPie, on as Music, or as require_jsx_runtime, ot as SiGooglephotos, p as webassembly, pn as Link, pr as Xhshow, pt as o, q as RiThumbUpFill, qn as TriangleAlert, qt as Search, r as require_jpeg_js, rn as Play, rr as Chip, rt as SiOneplus, s as VictoryLine, sn as Moon, sr as require_server_node, st as SiGithub, t as createProxyMiddleware, tn as Puzzle, tr as CircleAlert, tt as SiSamsung, u as VictoryLabel, un as Menu, ur as Chalk, ut as SiAnthropic, v as sqlite, vn as Hash, vt as e, w as MdSchedule, wn as EyeOff, wt as fromUnixTime, x as MdInfoOutline, xn as Gamepad2, xt as c, y as react, yn as GitBranch, yt as a$1, z as RiHeart3Line, zn as Calendar, zt as Star } from "./vendor.js";
2
+ import { $ as SiXiaomi, $n as CircleCheck, $t as Quote, A as AiFillHeart, An as Copy, At as X, B as RiHeartLine, Bn as Box, Bt as Square, C as MdLocationOn, Cn as EyeOff, Ct as parse, D as FaTiktok, Dn as Crown, Dt as differenceInSeconds, E as FaMusic, En as Download, Et as format, F as RiArrowRightFill, Fn as CircleFadingArrowUp, Ft as Upload, G as RiStarFill, Gn as WandSparkles, Gt as Share2, H as RiMessage3Fill, Hn as Bookmark, Ht as ShoppingBag, I as RiGroupLine, In as CircleEllipsis, It as Trash2, J as RiTiktokFill, Jn as SquarePen, Jt as ScanLine, K as RiStarLine, Kn as UsersRound, Kt as Settings2, L as RiHashtag, Ln as Check, Lt as Terminal, M as AiFillStar, Mn as Clock, Mt as Users, N as AiOutlineVideoCamera, Nn as Clock3, Nt as User, O as FaUserGroup, On as Cpu, Ot as twMerge, P as Markdown, Pn as Clapperboard, Pt as UserPlus, Q as RiVideoLine, Qn as CircleQuestionMark, Qt as Radio, R as RiHeart3Fill, Rn as Camera, Rt as Sun, S as MdLightbulbOutline, Sn as FileText, St as zhCN, T as FaCommentDots, Tn as ExternalLink, Tt as formatDistanceToNow, U as RiPieChart2Fill, Un as BellRing, Ut as Shield, V as RiLiveLine, Vn as Bot, Vt as Smartphone, W as RiShareForwardFill, Wn as ArrowDownToLine, Wt as ShieldCheck, X as RiUserFollowLine, Xn as LoaderCircle, Xt as RotateCcw, Y as RiTrophyFill, Yn as Sparkles, Yt as Save, Z as RiVerifiedBadgeFill, Zn as FilePlay, Zt as RefreshCw, _ as tailwind_css, _n as Heart, _t as n, a as VictoryScatter, an as Palette, ar as clsx, at as SiHonor, b as MdFitScreen, bn as Gift, bt as o$1, c as VictoryChart, cn as Monitor, cr as require_react, ct as SiBilibili, d as VictoryTheme, dn as Maximize, dr as CryptoConfig, dt as o$2, en as QrCode, er as CircleCheckBig, et as SiVivo, f as rehypeHighlight, fn as MapPin, fr as FingerprintGenerator, ft as r, g as tsdown, gn as Image$1, gt as a, h as typescript, hn as Info, ht as m, i as require_heic_decode, in as Pencil, ir as Button, it as SiHuawei, j as AiFillPushpin, jn as Code, jt as Video, k as BiImage, kn as CornerDownLeft, kt as Zap, l as VictoryAxis, ln as MessageCircle, lr as require_protobufjs, lt as SiApple, m as vite, mn as LayoutTemplate, mr as zod_default, mt as o$3, n as require_lib, nn as Plus, nr as ChartColumn, nt as SiOppo, o as VictoryPie, on as Music, or as require_jsx_runtime, ot as SiGooglephotos, p as webassembly, pn as Link, pr as Xhshow, pt as o, q as RiThumbUpFill, qn as TriangleAlert, qt as Search, r as require_jpeg_js, rn as Play, rr as Chip, rt as SiOneplus, s as VictoryLine, sn as Moon, sr as require_server_node, st as SiGithub, t as createProxyMiddleware, tn as Puzzle, tr as CircleAlert, tt as SiSamsung, u as VictoryLabel, un as Menu, ur as Chalk, ut as SiAnthropic, v as sqlite, vn as Hash, vt as e, w as MdSchedule, wn as Eye, wt as fromUnixTime, x as MdInfoOutline, xn as Gamepad2, xt as c, y as react, yn as GitBranch, yt as a$1, z as RiHeart3Line, zn as Calendar, zt as Star } from "./vendor.js";
3
3
  import "node:module";
4
4
  import fs from "node:fs";
5
5
  import path, { resolve } from "node:path";
@@ -14,7 +14,7 @@ import { karinPathBase, karinPathTemp as karinPathTemp$1 } from "node-karin/root
14
14
  import sqlite3 from "node-karin/sqlite3";
15
15
  import YAML from "node-karin/yaml";
16
16
  import util from "node:util";
17
- import { generate, scan } from "@ikenxuan/qrcode";
17
+ import { generateSync, scanSync } from "@ikenxuan/qrcode";
18
18
  import { Transform } from "node:stream";
19
19
  import { pipeline } from "node:stream/promises";
20
20
  import _ from "node-karin/lodash";
@@ -10926,7 +10926,7 @@ var uploadFile = async (event, file, videoUrl, options) => {
10926
10926
  await bot.uploadFile(contact, File, file.originTitle ? `${file.originTitle}.mp4` : `${File.split("/").pop()}`);
10927
10927
  } else {
10928
10928
  logger.mark(`${logger.blue("主动消息:")} 视频大小: ${newFileSize.toFixed(1)}MB 正在通过${logger.yellow("karin.sendMsg")}回复...`);
10929
- sendStatus = (await karin.sendMsg(selfId, contact, [segment.video(File)])).messageId ? true : false;
10929
+ sendStatus = (await karin.sendMsg(selfId, contact, [segment.video(File)], { retryCount: 0 })).messageId ? true : false;
10930
10930
  }
10931
10931
  else if (options?.useGroupFile) {
10932
10932
  logger.mark(`${logger.blue("被动消息:")} 视频大小: ${newFileSize.toFixed(1)}MB 正在通过${logger.yellow("e.bot.uploadFile")}回复...`);
@@ -11123,7 +11123,7 @@ var Common = new class Tools {
11123
11123
  try {
11124
11124
  logger.debug(`检测到${source}为图片,尝试识别二维码...`);
11125
11125
  const response = await axios.get(imageUrl, { responseType: "arraybuffer" });
11126
- const qrContent = scan(Buffer.from(response.data));
11126
+ const qrContent = scanSync(Buffer.from(response.data));
11127
11127
  if (qrContent && [
11128
11128
  /(https?:\/\/)?(www|v|jx|m|jingxuan)\.(douyin|iesdouyin)\.com/i,
11129
11129
  /https:\/\/aweme\.snssdk\.com\/aweme\/v1\/play/i,
@@ -15546,7 +15546,7 @@ var renderRichTextToReact = (document, options = {}) => {
15546
15546
  * @return {string} The base64-encoded QR code image.
15547
15547
  */
15548
15548
  var generateQRCode = (text, useDarkTheme = false) => {
15549
- return `data:image/webp;base64,${generate({
15549
+ return `data:image/webp;base64,${generateSync({
15550
15550
  data: text,
15551
15551
  size: 1e3,
15552
15552
  dotsOptions: {
@@ -32917,6 +32917,14 @@ var cleanOldDynamicCache = async (platform, days = 7) => {
32917
32917
  };
32918
32918
  //#endregion
32919
32919
  //#region src/web.config.ts
32920
+ var resolveRealPath = (value) => {
32921
+ try {
32922
+ return fs.realpathSync.native(value);
32923
+ } catch {
32924
+ return path.resolve(value);
32925
+ }
32926
+ };
32927
+ var isLocalDevelopment = process.env.NODE_ENV === "development" && resolveRealPath(Root.pluginPath) === resolveRealPath(process.cwd());
32920
32928
  var webConfig = defineConfig({
32921
32929
  info: {
32922
32930
  id: "karin-plugin-kkk",
@@ -32938,7 +32946,7 @@ var webConfig = defineConfig({
32938
32946
  }]
32939
32947
  },
32940
32948
  page: {
32941
- url: process.env.NODE_ENV === "development" ? "http://localhost:5176/kkk/assets/karin-config" : "/kkk/assets/karin-config",
32949
+ url: isLocalDevelopment ? "http://localhost:5176/kkk/assets/karin-config" : "/kkk/assets/karin-config",
32942
32950
  title: "kkk插件配置管理",
32943
32951
  description: "使用 kkk 插件自带的配置管理页面"
32944
32952
  }
@@ -39996,7 +40004,7 @@ var DouYinpush = class extends Base {
39996
40004
  if (Config.douyin.push.parsedynamic && status.message_id) {
39997
40005
  const workTypeInfo = getWorkTypeInfo(Detail_Data);
39998
40006
  logger.debug(`开始解析作品,类型为:${getWorkTypeDisplayName(workTypeInfo)}`);
39999
- if (workTypeInfo.isVideo) try {
40007
+ if (workTypeInfo.isVideo) {
40000
40008
  /** 默认视频下载地址 */
40001
40009
  let downloadUrl = `https://aweme.snssdk.com/aweme/v1/play/?video_id=${Detail_Data.video.play_addr.uri}&ratio=1080p&line=0`;
40002
40010
  logger.debug(`开始排除不符合条件的视频分辨率;\n
@@ -40023,10 +40031,7 @@ var DouYinpush = class extends Base {
40023
40031
  group_id: groupId
40024
40032
  }
40025
40033
  });
40026
- } catch (error) {
40027
- throw new Error(`下载视频失败: ${error}`);
40028
- }
40029
- else if (workTypeInfo.isImage && iddata.type === "one_work") {
40034
+ } else if (workTypeInfo.isImage && iddata.type === "one_work") {
40030
40035
  if (Detail_Data.is_slides === true && Detail_Data.images) {
40031
40036
  const images = [];
40032
40037
  const temp = [];
@@ -41724,7 +41729,7 @@ var waitQrcode = async (page) => {
41724
41729
  const response = await fetch(originalImage);
41725
41730
  imageBuffer = Buffer.from(await response.arrayBuffer());
41726
41731
  }
41727
- const qrContent = scan(imageBuffer);
41732
+ const qrContent = scanSync(imageBuffer);
41728
41733
  if (qrContent) {
41729
41734
  logger.mark("二维码解码成功:", qrContent);
41730
41735
  return {
@@ -43608,7 +43613,7 @@ app$1.use(ASSETS_PREFIX, staticRouter);
43608
43613
  app.use(KKK_PREFIX, app$1);
43609
43614
  //#endregion
43610
43615
  //#region src/setup.ts
43611
- var requireVersion = "1.16.1";
43616
+ var requireVersion = "1.16.2";
43612
43617
  if (process.env.NODE_ENV !== "development" && isSemverGreater(requireVersion, Root.karinVersion)) {
43613
43618
  const msg = `[karin-plugin-kkk] 插件构建时的 karin 版本 (${requireVersion}) 高于当前运行版本 (${Root.karinVersion}),可能会出现兼容性问题!`;
43614
43619
  logger.warn(msg);
@@ -1810,7 +1810,7 @@ declare namespace WebSocket {
1810
1810
  }
1811
1811
  }
1812
1812
  //#endregion
1813
- //#region ../../node_modules/.pnpm/node-karin@1.16.1/node_modules/node-karin/dist/index.d.ts
1813
+ //#region ../../node_modules/.pnpm/node-karin@1.16.2/node_modules/node-karin/dist/index.d.ts
1814
1814
  //#endregion
1815
1815
  //#region src/types/adapter/info.d.ts
1816
1816
  /**