@tencent-connect/dsh-qqbot 0.4.0 → 0.5.1
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/.orange-ci.yml +2 -68
- package/CHANGELOG.md +56 -0
- package/CHANGELOG_EN.md +95 -0
- package/README.md +119 -18
- package/README_EN.md +107 -17
- package/cordis.patch.yml +1 -1
- package/cordis.yml +46 -3
- package/dist/commands/help.d.ts +6 -7
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +23 -7
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +7 -5
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +12 -12
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/misc.d.ts +10 -8
- package/dist/commands/misc.d.ts.map +1 -1
- package/dist/commands/misc.js +45 -8
- package/dist/commands/misc.js.map +1 -1
- package/dist/commands/model.d.ts +3 -4
- package/dist/commands/model.d.ts.map +1 -1
- package/dist/commands/model.js +8 -7
- package/dist/commands/model.js.map +1 -1
- package/dist/commands/preset.d.ts +8 -0
- package/dist/commands/preset.d.ts.map +1 -0
- package/dist/commands/preset.js +52 -0
- package/dist/commands/preset.js.map +1 -0
- package/dist/commands/session.d.ts +11 -7
- package/dist/commands/session.d.ts.map +1 -1
- package/dist/commands/session.js +29 -13
- package/dist/commands/session.js.map +1 -1
- package/dist/commands/status.d.ts +3 -4
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +2 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/types.d.ts +9 -2
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/config.d.ts +40 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +45 -9
- package/dist/config.js.map +1 -1
- package/dist/features/answer-parser.d.ts +9 -0
- package/dist/features/answer-parser.d.ts.map +1 -0
- package/dist/features/answer-parser.js +23 -0
- package/dist/features/answer-parser.js.map +1 -0
- package/dist/features/approval-channel.d.ts +76 -0
- package/dist/features/approval-channel.d.ts.map +1 -0
- package/dist/features/approval-channel.js +142 -0
- package/dist/features/approval-channel.js.map +1 -0
- package/dist/features/approval-renderer.d.ts +18 -0
- package/dist/features/approval-renderer.d.ts.map +1 -0
- package/dist/features/approval-renderer.js +52 -0
- package/dist/features/approval-renderer.js.map +1 -0
- package/dist/features/button-utils.d.ts +33 -0
- package/dist/features/button-utils.d.ts.map +1 -0
- package/dist/features/button-utils.js +27 -0
- package/dist/features/button-utils.js.map +1 -0
- package/dist/features/history-store.d.ts.map +1 -1
- package/dist/features/history-store.js +0 -1
- package/dist/features/history-store.js.map +1 -1
- package/dist/features/question-channel.d.ts +96 -0
- package/dist/features/question-channel.d.ts.map +1 -0
- package/dist/features/question-channel.js +234 -0
- package/dist/features/question-channel.js.map +1 -0
- package/dist/features/question-renderer.d.ts +20 -0
- package/dist/features/question-renderer.d.ts.map +1 -0
- package/dist/features/question-renderer.js +70 -0
- package/dist/features/question-renderer.js.map +1 -0
- package/dist/gateway/bootstrap.d.ts +3 -3
- package/dist/gateway/bootstrap.d.ts.map +1 -1
- package/dist/gateway/bootstrap.js +84 -8
- package/dist/gateway/bootstrap.js.map +1 -1
- package/dist/gateway/index.d.ts +2 -2
- package/dist/gateway/index.js +2 -2
- package/dist/gateway/middleware-setup.d.ts +3 -3
- package/dist/gateway/middleware-setup.d.ts.map +1 -1
- package/dist/gateway/middleware-setup.js +9 -7
- package/dist/gateway/middleware-setup.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -25
- package/dist/index.js.map +1 -1
- package/dist/media/media-cleaner.d.ts +19 -0
- package/dist/media/media-cleaner.d.ts.map +1 -0
- package/dist/media/media-cleaner.js +81 -0
- package/dist/media/media-cleaner.js.map +1 -0
- package/dist/media/send-file-tool.d.ts +35 -0
- package/dist/media/send-file-tool.d.ts.map +1 -0
- package/dist/media/send-file-tool.js +150 -0
- package/dist/media/send-file-tool.js.map +1 -0
- package/dist/media/vision-tool.d.ts +16 -0
- package/dist/media/vision-tool.d.ts.map +1 -0
- package/dist/media/vision-tool.js +241 -0
- package/dist/media/vision-tool.js.map +1 -0
- package/dist/middleware/attachment.d.ts +3 -3
- package/dist/middleware/attachment.d.ts.map +1 -1
- package/dist/middleware/attachment.js +17 -4
- package/dist/middleware/attachment.js.map +1 -1
- package/dist/middleware/question-answer.d.ts +10 -0
- package/dist/middleware/question-answer.d.ts.map +1 -0
- package/dist/middleware/question-answer.js +19 -0
- package/dist/middleware/question-answer.js.map +1 -0
- package/dist/model/index.d.ts +4 -4
- package/dist/model/index.js +3 -3
- package/dist/model/model-resolver.d.ts +27 -13
- package/dist/model/model-resolver.d.ts.map +1 -1
- package/dist/model/model-resolver.js +82 -27
- package/dist/model/model-resolver.js.map +1 -1
- package/dist/model/prefs-store.d.ts +6 -1
- package/dist/model/prefs-store.d.ts.map +1 -1
- package/dist/model/prefs-store.js +25 -1
- package/dist/model/prefs-store.js.map +1 -1
- package/dist/model/settings-reader.d.ts +1 -1
- package/dist/session/idle-evictor.d.ts +2 -2
- package/dist/session/idle-evictor.d.ts.map +1 -1
- package/dist/session/idle-evictor.js +1 -1
- package/dist/session/idle-evictor.js.map +1 -1
- package/dist/session/index.d.ts +3 -3
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +2 -2
- package/dist/session/session-manager.d.ts +67 -9
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +216 -20
- package/dist/session/session-manager.js.map +1 -1
- package/dist/session/types.d.ts +47 -1
- package/dist/session/types.d.ts.map +1 -1
- package/dist/setup/bind-routes.d.ts +78 -0
- package/dist/setup/bind-routes.d.ts.map +1 -0
- package/dist/setup/bind-routes.js +311 -0
- package/dist/setup/bind-routes.js.map +1 -0
- package/dist/setup/binding-service.d.ts +86 -0
- package/dist/setup/binding-service.d.ts.map +1 -0
- package/dist/setup/binding-service.js +175 -0
- package/dist/setup/binding-service.js.map +1 -0
- package/dist/setup/index.d.ts +50 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +98 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/persist.d.ts +41 -0
- package/dist/setup/persist.d.ts.map +1 -0
- package/dist/setup/persist.js +201 -0
- package/dist/setup/persist.js.map +1 -0
- package/dist/setup/presenters.d.ts +40 -0
- package/dist/setup/presenters.d.ts.map +1 -0
- package/dist/setup/presenters.js +84 -0
- package/dist/setup/presenters.js.map +1 -0
- package/dist/setup/qr-svg.d.ts +8 -0
- package/dist/setup/qr-svg.d.ts.map +1 -0
- package/dist/setup/qr-svg.js +20 -0
- package/dist/setup/qr-svg.js.map +1 -0
- package/dist/shared/bind-protocol.d.ts +42 -0
- package/dist/shared/bind-protocol.d.ts.map +1 -0
- package/dist/shared/bind-protocol.js +19 -0
- package/dist/shared/bind-protocol.js.map +1 -0
- package/dist/shared/index.d.ts +3 -3
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +3 -3
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/send-helper.js +1 -1
- package/dist/shared/utils.d.ts +10 -3
- package/dist/shared/utils.d.ts.map +1 -1
- package/dist/shared/utils.js +47 -6
- package/dist/shared/utils.js.map +1 -1
- package/dist/transport/attachment.d.ts +18 -7
- package/dist/transport/attachment.d.ts.map +1 -1
- package/dist/transport/attachment.js +77 -30
- package/dist/transport/attachment.js.map +1 -1
- package/dist/transport/inbound.d.ts +5 -4
- package/dist/transport/inbound.d.ts.map +1 -1
- package/dist/transport/inbound.js +120 -80
- package/dist/transport/inbound.js.map +1 -1
- package/dist/transport/index.d.ts +4 -4
- package/dist/transport/index.js +4 -4
- package/dist/transport/msgid-cache.d.ts +23 -0
- package/dist/transport/msgid-cache.d.ts.map +1 -0
- package/dist/transport/msgid-cache.js +57 -0
- package/dist/transport/msgid-cache.js.map +1 -0
- package/dist/transport/outbound-buffer.d.ts +9 -6
- package/dist/transport/outbound-buffer.d.ts.map +1 -1
- package/dist/transport/outbound-buffer.js +5 -5
- package/dist/transport/outbound-buffer.js.map +1 -1
- package/dist/transport/outbound.d.ts +9 -9
- package/dist/transport/outbound.d.ts.map +1 -1
- package/dist/transport/outbound.js +7 -7
- package/dist/transport/outbound.js.map +1 -1
- package/dist/transport/reply-limiter.d.ts +31 -0
- package/dist/transport/reply-limiter.d.ts.map +1 -0
- package/dist/transport/reply-limiter.js +50 -0
- package/dist/transport/reply-limiter.js.map +1 -0
- package/dist/transport/reply-target.d.ts +29 -0
- package/dist/transport/reply-target.d.ts.map +1 -0
- package/dist/transport/reply-target.js +55 -0
- package/dist/transport/reply-target.js.map +1 -0
- package/dist/transport/streaming-writer.d.ts +3 -3
- package/dist/transport/streaming-writer.d.ts.map +1 -1
- package/dist/transport/streaming-writer.js +1 -1
- package/dist/transport/streaming-writer.js.map +1 -1
- package/dist/transport/tool-presenter.d.ts +0 -1
- package/dist/transport/tool-presenter.d.ts.map +1 -1
- package/dist/transport/tool-presenter.js +0 -1
- package/dist/transport/tool-presenter.js.map +1 -1
- package/dist/types.d.ts +9 -15
- package/dist/types.d.ts.map +1 -1
- package/docs/assets/qqchannel.jpg +0 -0
- package/docs/assets/qqgroup.jpg +0 -0
- package/docs/assets/qrcode.png +0 -0
- package/lib/client.js +996 -0
- package/lib/client.js.map +1 -0
- package/package.json +44 -7
- package/pnpm-workspace.yaml +1 -0
- package/tsconfig.client.json +19 -0
- package/tsdown.client.config.ts +58 -0
- package/dist/setup.d.ts +0 -24
- package/dist/setup.d.ts.map +0 -1
- package/dist/setup.js +0 -170
- package/dist/setup.js.map +0 -1
package/dist/shared/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3G,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/shared/utils.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/** 插件版本号(从 package.json 读取,供 help/version 等展示真实版本) */
|
|
2
|
+
export declare const PLUGIN_VERSION: string;
|
|
1
3
|
/**
|
|
2
4
|
* 构造 User-Agent 头
|
|
3
5
|
*
|
|
@@ -5,10 +7,15 @@
|
|
|
5
7
|
*/
|
|
6
8
|
export declare function buildUserAgent(): string;
|
|
7
9
|
/**
|
|
8
|
-
* 从插件安装路径推导 profile
|
|
10
|
+
* 从插件安装路径推导 profile 目录
|
|
9
11
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
+
* 主策略:逐级向上探测 profile 标志文件(cordis.patch.yml / pnpm-workspace.yaml)。
|
|
13
|
+
* Desktop profile 使用 pnpm workspace 布局(profiles/desktop/dependencies/
|
|
14
|
+
* node_modules/.pnpm/<pkg>/node_modules/...),插件嵌套于多级 node_modules,
|
|
15
|
+
* 仅按 node_modules 匹配会命中内层目录而返回错误位置。
|
|
16
|
+
*
|
|
17
|
+
* 兜底:无标志文件时沿用旧启发式(名为 node_modules 的目录的父目录),
|
|
18
|
+
* 覆盖 CLI profile 的浅层 npm 布局与未写入过 patch 的全新 profile。
|
|
12
19
|
*
|
|
13
20
|
* @param baseDir - 起始目录,缺省为插件根(可注入便于测试)
|
|
14
21
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/shared/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/shared/utils.ts"],"names":[],"mappings":"AAcA,sDAAsD;AACtD,eAAO,MAAM,cAAc,QAAsB,CAAC;AAYlD;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,MAAoB,GAAG,MAAM,GAAG,IAAI,CAwB1E;AAuBD;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKtE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAOtD"}
|
package/dist/shared/utils.js
CHANGED
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
*
|
|
4
4
|
* 纯函数与常量,供插件入口与其他模块复用。
|
|
5
5
|
*/
|
|
6
|
-
import { readFileSync } from 'node:fs';
|
|
6
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
7
7
|
import os from 'node:os';
|
|
8
8
|
import { fileURLToPath } from 'node:url';
|
|
9
9
|
import { basename, dirname, resolve } from 'node:path';
|
|
10
10
|
const __filename = fileURLToPath(import.meta.url);
|
|
11
11
|
const __dirname = dirname(__filename);
|
|
12
12
|
const PLUGIN_ROOT = resolve(__dirname, '../..');
|
|
13
|
-
/** 插件版本号(从 package.json
|
|
14
|
-
const PLUGIN_VERSION = readPluginVersion();
|
|
13
|
+
/** 插件版本号(从 package.json 读取,供 help/version 等展示真实版本) */
|
|
14
|
+
export const PLUGIN_VERSION = readPluginVersion();
|
|
15
15
|
function readPluginVersion() {
|
|
16
16
|
try {
|
|
17
17
|
const pkgPath = resolve(PLUGIN_ROOT, 'package.json');
|
|
@@ -31,14 +31,32 @@ export function buildUserAgent() {
|
|
|
31
31
|
return `dsh-qqbot/${PLUGIN_VERSION} (Node/${process.versions.node}; ${os.platform()})`;
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
|
-
* 从插件安装路径推导 profile
|
|
34
|
+
* 从插件安装路径推导 profile 目录
|
|
35
35
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
36
|
+
* 主策略:逐级向上探测 profile 标志文件(cordis.patch.yml / pnpm-workspace.yaml)。
|
|
37
|
+
* Desktop profile 使用 pnpm workspace 布局(profiles/desktop/dependencies/
|
|
38
|
+
* node_modules/.pnpm/<pkg>/node_modules/...),插件嵌套于多级 node_modules,
|
|
39
|
+
* 仅按 node_modules 匹配会命中内层目录而返回错误位置。
|
|
40
|
+
*
|
|
41
|
+
* 兜底:无标志文件时沿用旧启发式(名为 node_modules 的目录的父目录),
|
|
42
|
+
* 覆盖 CLI profile 的浅层 npm 布局与未写入过 patch 的全新 profile。
|
|
38
43
|
*
|
|
39
44
|
* @param baseDir - 起始目录,缺省为插件根(可注入便于测试)
|
|
40
45
|
*/
|
|
41
46
|
export function getProfileDir(baseDir = PLUGIN_ROOT) {
|
|
47
|
+
// 主策略:跨过 node_modules 边界后,优先命中 cordis.patch.yml(凭据写入
|
|
48
|
+
// 目标),其次 pnpm-workspace.yaml。跨越守卫是关键——插件包自身随包携带
|
|
49
|
+
// cordis.patch.yml(dsh.bundle.patch 分发物)、源码 checkout 根也有同名
|
|
50
|
+
// 仓库文件,二者都会让「从 PLUGIN_ROOT 起步的探测」命中插件自己;只有
|
|
51
|
+
// 位于 node_modules 之上的目录才可能是拥有该插件的 profile。
|
|
52
|
+
const byPatch = findProfileAncestor(baseDir, (dir) => existsSync(resolve(dir, 'cordis.patch.yml')) ? dir : null);
|
|
53
|
+
if (byPatch !== null)
|
|
54
|
+
return byPatch;
|
|
55
|
+
const byWorkspace = findProfileAncestor(baseDir, (dir) => existsSync(resolve(dir, 'pnpm-workspace.yaml')) ? dir : null);
|
|
56
|
+
if (byWorkspace !== null)
|
|
57
|
+
return byWorkspace;
|
|
58
|
+
// 兜底:npm 浅层布局 / 尚未写入任何标志文件的全新 profile
|
|
59
|
+
// (第一个 node_modules 目录的父目录,与旧版行为一致)
|
|
42
60
|
let dir = baseDir;
|
|
43
61
|
for (let i = 0; i < 32; i++) {
|
|
44
62
|
if (basename(dir) === 'node_modules')
|
|
@@ -50,6 +68,29 @@ export function getProfileDir(baseDir = PLUGIN_ROOT) {
|
|
|
50
68
|
}
|
|
51
69
|
return null;
|
|
52
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* 沿目录树向上探测 profile 候选:仅接受「已经跨过至少一个名为
|
|
73
|
+
* node_modules 的路径组件」之后命中的目录(兼容 Windows 分隔符与
|
|
74
|
+
* pnpm 嵌套结构;dev 源码 checkout 不跨边界 → 返回 null → 环境变量引导)。
|
|
75
|
+
*/
|
|
76
|
+
function findProfileAncestor(baseDir, probe) {
|
|
77
|
+
let crossedNodeModules = false;
|
|
78
|
+
let dir = baseDir;
|
|
79
|
+
for (let i = 0; i < 32; i++) {
|
|
80
|
+
if (basename(dir) === 'node_modules')
|
|
81
|
+
crossedNodeModules = true;
|
|
82
|
+
if (crossedNodeModules) {
|
|
83
|
+
const hit = probe(dir);
|
|
84
|
+
if (hit !== null)
|
|
85
|
+
return hit;
|
|
86
|
+
}
|
|
87
|
+
const parent = dirname(dir);
|
|
88
|
+
if (parent === dir)
|
|
89
|
+
break;
|
|
90
|
+
dir = parent;
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
53
94
|
/**
|
|
54
95
|
* 解析环境变量占位配置
|
|
55
96
|
*/
|
package/dist/shared/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/shared/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/shared/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,29 @@
|
|
|
1
|
-
import type { Logger, RawAttachment } from '../types.
|
|
1
|
+
import type { Logger, RawAttachment } from '../types.ts';
|
|
2
|
+
import type { MediaConfig } from '../config.ts';
|
|
2
3
|
/** 下载结果 */
|
|
3
4
|
export interface DownloadedFile {
|
|
4
5
|
/** 原始文件名(用于与消息附件关联) */
|
|
5
6
|
filename: string;
|
|
7
|
+
/** 附件类型 */
|
|
8
|
+
contentType: 'image' | 'video' | 'file';
|
|
6
9
|
/** 本地绝对路径 */
|
|
7
10
|
localPath: string;
|
|
8
|
-
/** 相对 cwd 的显示路径(@提及 / 工具访问用) */
|
|
9
|
-
displayPath: string;
|
|
10
11
|
}
|
|
12
|
+
/** 附件归类(QQ 网关的 content_type 是 MIME 类型,如 image/png、video/mp4、audio/silk) */
|
|
13
|
+
export type MediaKind = 'image' | 'video' | 'voice' | 'file';
|
|
14
|
+
/** 是否为图片(兼容裸值 'image' 与 MIME 'image/png') */
|
|
15
|
+
export declare function isImageContentType(contentType?: string): boolean;
|
|
16
|
+
/** 是否为视频(兼容裸值 'video' 与 MIME 'video/mp4') */
|
|
17
|
+
export declare function isVideoContentType(contentType?: string): boolean;
|
|
18
|
+
/** 是否为语音(兼容裸值 'voice' 与 MIME 'audio/silk') */
|
|
19
|
+
export declare function isVoiceContentType(contentType?: string): boolean;
|
|
20
|
+
/** 归类附件 content_type 为统一类型 */
|
|
21
|
+
export declare function classifyContentType(contentType?: string): MediaKind;
|
|
11
22
|
/**
|
|
12
|
-
*
|
|
23
|
+
* 下载消息中的富媒体附件(image/video/file)到本地
|
|
13
24
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
25
|
+
* 下载目录固定为 ~/.dsh-qqbot/media,文件名用时间戳+随机数防重名。
|
|
26
|
+
* 下载失败不阻断(由调用方回退描述)。
|
|
16
27
|
*/
|
|
17
|
-
export declare function
|
|
28
|
+
export declare function downloadMediaAttachments(attachments: RawAttachment[] | undefined, media: MediaConfig, logger: Logger): Promise<DownloadedFile[]>;
|
|
18
29
|
//# sourceMappingURL=attachment.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../src/transport/attachment.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../src/transport/attachment.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAQhD,WAAW;AACX,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,WAAW,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACxC,aAAa;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,2EAA2E;AAC3E,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7D,6CAA6C;AAC7C,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,6CAA6C;AAC7C,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,8CAA8C;AAC9C,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,8BAA8B;AAC9B,wBAAgB,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAKnE;AA0FD;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,aAAa,EAAE,GAAG,SAAS,EACxC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,EAAE,CAAC,CAmC3B"}
|
|
@@ -1,22 +1,69 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 富媒体下载 — 将 QQ 图片/视频/file 附件安全下载到本地
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* 下载后仅通过本地绝对路径提示模型,由模型通过 qqbot_describe_image / ffmpeg / tool-fs 等工具自行分析,
|
|
5
|
+
*
|
|
6
|
+
* 下载目录固定为 ~/.dsh-qqbot/media,
|
|
7
|
+
* 文件名用时间戳+随机数防重名,不依赖 agent cwd,便于 qqbot_describe_image / tool-fs 等工具稳定访问。
|
|
6
8
|
*/
|
|
7
9
|
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
8
|
-
import { basename, join } from 'node:path';
|
|
10
|
+
import { basename, extname, join, sep } from 'node:path';
|
|
11
|
+
import { randomBytes } from 'node:crypto';
|
|
9
12
|
import * as dns from 'node:dns';
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
import { MEDIA_ROOT } from "../media/media-cleaner.js";
|
|
14
|
+
/** 默认富媒体下载大小上限(MB),可被 media.maxMB 覆盖 */
|
|
15
|
+
const DEFAULT_MAX_MB = 200;
|
|
12
16
|
/** 下载超时(毫秒) */
|
|
13
|
-
const DOWNLOAD_TIMEOUT_MS =
|
|
14
|
-
/**
|
|
17
|
+
const DOWNLOAD_TIMEOUT_MS = 120_000;
|
|
18
|
+
/** 是否为图片(兼容裸值 'image' 与 MIME 'image/png') */
|
|
19
|
+
export function isImageContentType(contentType) {
|
|
20
|
+
return contentType === 'image' || contentType?.startsWith('image/') === true;
|
|
21
|
+
}
|
|
22
|
+
/** 是否为视频(兼容裸值 'video' 与 MIME 'video/mp4') */
|
|
23
|
+
export function isVideoContentType(contentType) {
|
|
24
|
+
return contentType === 'video' || contentType?.startsWith('video/') === true;
|
|
25
|
+
}
|
|
26
|
+
/** 是否为语音(兼容裸值 'voice' 与 MIME 'audio/silk') */
|
|
27
|
+
export function isVoiceContentType(contentType) {
|
|
28
|
+
return contentType === 'voice' || contentType?.startsWith('audio/') === true;
|
|
29
|
+
}
|
|
30
|
+
/** 归类附件 content_type 为统一类型 */
|
|
31
|
+
export function classifyContentType(contentType) {
|
|
32
|
+
if (isImageContentType(contentType))
|
|
33
|
+
return 'image';
|
|
34
|
+
if (isVideoContentType(contentType))
|
|
35
|
+
return 'video';
|
|
36
|
+
if (isVoiceContentType(contentType))
|
|
37
|
+
return 'voice';
|
|
38
|
+
return 'file';
|
|
39
|
+
}
|
|
40
|
+
/** 处理 `//` 开头的协议相对 URL(补 https:) */
|
|
41
|
+
function normalizeUrl(url) {
|
|
42
|
+
return url.startsWith('//') ? `https:${url}` : url;
|
|
43
|
+
}
|
|
44
|
+
/** 文件名净化:去路径、移除非法字符(保留中文等 Unicode 字符),防止路径穿越 */
|
|
15
45
|
function sanitizeFilename(name) {
|
|
16
46
|
const base = basename(name.replace(/\\/g, '/'));
|
|
17
|
-
|
|
47
|
+
// 仅替换文件系统非法字符(Windows 保留字符 + 控制字符),保留中文/空格等
|
|
48
|
+
// normalize NFC:统一 Unicode 规范化,避免 macOS(NFD) 与 Linux/Windows(NFC) 存储差异导致路径对不上
|
|
49
|
+
const safe = base
|
|
50
|
+
.replace(/[<>:"|?*\x00-\x1f]/g, '_')
|
|
51
|
+
.trim()
|
|
52
|
+
.normalize('NFC');
|
|
18
53
|
return safe || 'attachment';
|
|
19
54
|
}
|
|
55
|
+
/** 统一路径分隔符为 `/`(POSIX),Node fs 在 Windows 也接受正斜杠,保证注入路径跨平台一致 */
|
|
56
|
+
function toPosixPath(p) {
|
|
57
|
+
return p.split(sep).join('/');
|
|
58
|
+
}
|
|
59
|
+
/** 防重名:文件名 + 时间戳 + 随机数 */
|
|
60
|
+
function uniqueFilename(name) {
|
|
61
|
+
const base = sanitizeFilename(name);
|
|
62
|
+
const ext = extname(base);
|
|
63
|
+
const stem = basename(base, ext);
|
|
64
|
+
const rand = randomBytes(4).toString('hex');
|
|
65
|
+
return `${stem}_${Date.now()}_${rand}${ext}`;
|
|
66
|
+
}
|
|
20
67
|
/** 字节数格式化 */
|
|
21
68
|
function formatSize(bytes) {
|
|
22
69
|
if (bytes >= 1024 * 1024)
|
|
@@ -53,7 +100,7 @@ async function assertSafeHostname(hostname) {
|
|
|
53
100
|
}
|
|
54
101
|
/** 安全下载:仅 HTTPS + SSRF 防护 + 大小上限 + 超时,返回下载字节数 */
|
|
55
102
|
async function download(url, destPath, maxBytes) {
|
|
56
|
-
const parsed = new URL(url);
|
|
103
|
+
const parsed = new URL(normalizeUrl(url));
|
|
57
104
|
if (parsed.protocol !== 'https:') {
|
|
58
105
|
throw new Error(`Only HTTPS allowed: ${parsed.protocol}`);
|
|
59
106
|
}
|
|
@@ -69,37 +116,37 @@ async function download(url, destPath, maxBytes) {
|
|
|
69
116
|
return buf.length;
|
|
70
117
|
}
|
|
71
118
|
/**
|
|
72
|
-
*
|
|
119
|
+
* 下载消息中的富媒体附件(image/video/file)到本地
|
|
73
120
|
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
121
|
+
* 下载目录固定为 ~/.dsh-qqbot/media,文件名用时间戳+随机数防重名。
|
|
122
|
+
* 下载失败不阻断(由调用方回退描述)。
|
|
76
123
|
*/
|
|
77
|
-
export async function
|
|
78
|
-
|
|
79
|
-
|
|
124
|
+
export async function downloadMediaAttachments(attachments, media, logger) {
|
|
125
|
+
if (!media.enabled)
|
|
126
|
+
return [];
|
|
127
|
+
const targets = (attachments ?? []).filter(a => classifyContentType(a.content_type) !== 'voice' && a.url);
|
|
128
|
+
if (targets.length === 0)
|
|
80
129
|
return [];
|
|
81
|
-
|
|
82
|
-
|
|
130
|
+
mkdirSync(MEDIA_ROOT, { recursive: true });
|
|
131
|
+
const maxBytes = (media.maxMB ?? DEFAULT_MAX_MB) * 1024 * 1024;
|
|
83
132
|
const results = [];
|
|
84
|
-
for (const
|
|
85
|
-
const
|
|
86
|
-
const localPath = join(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
results.push({ filename: file.filename, localPath, displayPath });
|
|
91
|
-
continue;
|
|
133
|
+
for (const att of targets) {
|
|
134
|
+
const contentType = classifyContentType(att.content_type);
|
|
135
|
+
const localPath = toPosixPath(join(MEDIA_ROOT, uniqueFilename(att.filename)));
|
|
136
|
+
if (att.size > maxBytes) {
|
|
137
|
+
logger.debug(`im-qqbot: skip download (${att.size}B too large): ${att.filename}`);
|
|
138
|
+
continue; // 超限不下载,由 buildDynamicCtx 回退为描述
|
|
92
139
|
}
|
|
93
140
|
let bytes;
|
|
94
141
|
try {
|
|
95
|
-
bytes = await download(
|
|
142
|
+
bytes = await download(att.url, localPath, maxBytes);
|
|
96
143
|
}
|
|
97
144
|
catch (err) {
|
|
98
|
-
logger.warn(`im-qqbot: download failed: ${
|
|
145
|
+
logger.warn(`im-qqbot: download failed: ${att.filename} — ${err instanceof Error ? err.message : String(err)}`);
|
|
99
146
|
continue; // 下载失败不加入结果,由 buildDynamicCtx 回退为描述
|
|
100
147
|
}
|
|
101
|
-
logger.debug(`im-qqbot: attachment downloaded: ${
|
|
102
|
-
results.push({ filename:
|
|
148
|
+
logger.debug(`im-qqbot: attachment downloaded: ${att.filename} (${formatSize(bytes)}) → ${localPath}`);
|
|
149
|
+
results.push({ filename: att.filename, contentType, localPath });
|
|
103
150
|
}
|
|
104
151
|
return results;
|
|
105
152
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../src/transport/attachment.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../src/transport/attachment.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { SessionManager } from '../session/index.
|
|
2
|
-
import type { ImQQBotConfig } from '../config.
|
|
3
|
-
import type { Logger } from '../types.
|
|
1
|
+
import type { SessionManager } from '../session/index.ts';
|
|
2
|
+
import type { ImQQBotConfig } from '../config.ts';
|
|
3
|
+
import type { Logger } from '../types.ts';
|
|
4
|
+
import type { MiddlewareContext } from '@tencent-connect/qqbot-nodejs';
|
|
4
5
|
/**
|
|
5
6
|
* 处理 QQ 入站消息(已经过 SDK 中间件链)
|
|
6
7
|
*/
|
|
7
|
-
export declare function handleInbound(
|
|
8
|
+
export declare function handleInbound(ctx: MiddlewareContext, manager: SessionManager, config: ImQQBotConfig, logger: Logger): Promise<void>;
|
|
8
9
|
//# sourceMappingURL=inbound.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbound.d.ts","sourceRoot":"","sources":["../../src/transport/inbound.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"inbound.d.ts","sourceRoot":"","sources":["../../src/transport/inbound.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAa,MAAM,EAAgD,MAAM,aAAa,CAAC;AAQnG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AA8DvE;;GAEG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,iBAAiB,EACtB,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CA0Df"}
|