@zhin.js/adapter-qq 5.0.1 → 5.0.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 +60 -0
- package/README.md +52 -408
- package/adapters/qq.ts +45 -0
- package/agent/tools/add_role.ts +23 -0
- package/agent/tools/channel_info.ts +19 -0
- package/agent/tools/create_role.ts +22 -0
- package/agent/tools/list_channels.ts +20 -0
- package/agent/tools/list_guilds.ts +17 -0
- package/agent/tools/list_roles.ts +20 -0
- package/agent/tools/member_detail.ts +20 -0
- package/agent/tools/remove_role.ts +23 -0
- package/lib/endpoint.d.ts +64 -120
- package/lib/endpoint.js +279 -564
- package/lib/index.d.ts +6 -23
- package/lib/index.js +6 -375
- package/lib/platform-permit.d.ts +1 -2
- package/lib/platform-permit.js +4 -2
- package/lib/protocol.d.ts +96 -0
- package/lib/protocol.js +129 -0
- package/lib/qq-agent-deps.d.ts +21 -0
- package/lib/qq-agent-deps.js +30 -0
- package/lib/webhook.d.ts +18 -0
- package/lib/webhook.js +100 -0
- package/lib/ws.d.ts +24 -0
- package/lib/ws.js +118 -0
- package/package.json +47 -33
- package/plugin.ts +13 -0
- package/schema.json +51 -0
- package/src/endpoint.ts +313 -605
- package/src/index.ts +55 -368
- package/src/platform-permit.ts +1 -2
- package/src/protocol.ts +229 -0
- package/src/qq-agent-deps.ts +60 -0
- package/src/webhook.ts +127 -0
- package/src/ws.ts +172 -0
- package/client/Dashboard.tsx +0 -230
- package/client/index.tsx +0 -11
- package/client/tsconfig.json +0 -7
- package/client/utils/api.ts +0 -30
- package/dist/index.js +0 -30
- package/lib/adapter.d.ts +0 -32
- package/lib/adapter.d.ts.map +0 -1
- package/lib/adapter.js +0 -82
- package/lib/adapter.js.map +0 -1
- package/lib/endpoint.d.ts.map +0 -1
- package/lib/endpoint.js.map +0 -1
- package/lib/gateway-config.d.ts +0 -14
- package/lib/gateway-config.d.ts.map +0 -1
- package/lib/gateway-config.js +0 -32
- package/lib/gateway-config.js.map +0 -1
- package/lib/group-at-normalize.d.ts +0 -8
- package/lib/group-at-normalize.d.ts.map +0 -1
- package/lib/group-at-normalize.js +0 -68
- package/lib/group-at-normalize.js.map +0 -1
- package/lib/inbound-action.d.ts +0 -15
- package/lib/inbound-action.d.ts.map +0 -1
- package/lib/inbound-action.js +0 -57
- package/lib/inbound-action.js.map +0 -1
- package/lib/inbound-normalize.d.ts +0 -11
- package/lib/inbound-normalize.d.ts.map +0 -1
- package/lib/inbound-normalize.js +0 -47
- package/lib/inbound-normalize.js.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/mention-enrich.d.ts +0 -12
- package/lib/mention-enrich.d.ts.map +0 -1
- package/lib/mention-enrich.js +0 -52
- package/lib/mention-enrich.js.map +0 -1
- package/lib/outbound-keyboard.d.ts +0 -4
- package/lib/outbound-keyboard.d.ts.map +0 -1
- package/lib/outbound-keyboard.js +0 -96
- package/lib/outbound-keyboard.js.map +0 -1
- package/lib/outbound-markdown.d.ts +0 -24
- package/lib/outbound-markdown.d.ts.map +0 -1
- package/lib/outbound-markdown.js +0 -177
- package/lib/outbound-markdown.js.map +0 -1
- package/lib/outbound-media.d.ts +0 -11
- package/lib/outbound-media.d.ts.map +0 -1
- package/lib/outbound-media.js +0 -51
- package/lib/outbound-media.js.map +0 -1
- package/lib/outbound-mixed-media.d.ts +0 -21
- package/lib/outbound-mixed-media.d.ts.map +0 -1
- package/lib/outbound-mixed-media.js +0 -78
- package/lib/outbound-mixed-media.js.map +0 -1
- package/lib/platform-permit.d.ts.map +0 -1
- package/lib/platform-permit.js.map +0 -1
- package/lib/qq-bind-api.d.ts +0 -37
- package/lib/qq-bind-api.d.ts.map +0 -1
- package/lib/qq-bind-api.js +0 -90
- package/lib/qq-bind-api.js.map +0 -1
- package/lib/qq-bind-flow.d.ts +0 -20
- package/lib/qq-bind-flow.d.ts.map +0 -1
- package/lib/qq-bind-flow.js +0 -86
- package/lib/qq-bind-flow.js.map +0 -1
- package/lib/qq-bind-persist.d.ts +0 -11
- package/lib/qq-bind-persist.d.ts.map +0 -1
- package/lib/qq-bind-persist.js +0 -52
- package/lib/qq-bind-persist.js.map +0 -1
- package/lib/qq-endpoint-manager.d.ts +0 -16
- package/lib/qq-endpoint-manager.d.ts.map +0 -1
- package/lib/qq-endpoint-manager.js +0 -159
- package/lib/qq-endpoint-manager.js.map +0 -1
- package/lib/sdk-version.d.ts +0 -8
- package/lib/sdk-version.d.ts.map +0 -1
- package/lib/sdk-version.js +0 -19
- package/lib/sdk-version.js.map +0 -1
- package/lib/segment-mapper.d.ts +0 -2
- package/lib/segment-mapper.d.ts.map +0 -1
- package/lib/segment-mapper.js +0 -2
- package/lib/segment-mapper.js.map +0 -1
- package/lib/types.d.ts +0 -45
- package/lib/types.d.ts.map +0 -1
- package/lib/types.js +0 -2
- package/lib/types.js.map +0 -1
- package/plugin.yml +0 -3
- package/src/adapter.ts +0 -101
- package/src/gateway-config.ts +0 -48
- package/src/group-at-normalize.ts +0 -76
- package/src/inbound-action.ts +0 -87
- package/src/inbound-normalize.ts +0 -57
- package/src/mention-enrich.ts +0 -71
- package/src/outbound-keyboard.ts +0 -118
- package/src/outbound-markdown.ts +0 -203
- package/src/outbound-media.ts +0 -58
- package/src/outbound-mixed-media.ts +0 -101
- package/src/qq-bind-api.ts +0 -145
- package/src/qq-bind-flow.ts +0 -127
- package/src/qq-bind-persist.ts +0 -71
- package/src/qq-endpoint-manager.ts +0 -199
- package/src/sdk-version.ts +0 -21
- package/src/segment-mapper.ts +0 -1
- package/src/types.ts +0 -53
- /package/{skills/qq → agent}/PERMITS.md +0 -0
- /package/{skills/qq/SKILL.md → agent/skills/qq.md} +0 -0
package/lib/qq-bind-api.js
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* QQ Bot 扫码绑定协议(内联)
|
|
3
|
-
* Protocol aligned with @tencent-connect/qqbot-connector@1.1.0 qqbot-session — inlined to avoid runtime dependency.
|
|
4
|
-
*/
|
|
5
|
-
import { createDecipheriv, randomBytes } from 'node:crypto';
|
|
6
|
-
const HOSTS = {
|
|
7
|
-
production: 'q.qq.com',
|
|
8
|
-
test: 'test.q.qq.com',
|
|
9
|
-
};
|
|
10
|
-
export var BindStatus;
|
|
11
|
-
(function (BindStatus) {
|
|
12
|
-
BindStatus[BindStatus["NONE"] = 0] = "NONE";
|
|
13
|
-
BindStatus[BindStatus["PENDING"] = 1] = "PENDING";
|
|
14
|
-
BindStatus[BindStatus["COMPLETED"] = 2] = "COMPLETED";
|
|
15
|
-
BindStatus[BindStatus["EXPIRED"] = 3] = "EXPIRED";
|
|
16
|
-
})(BindStatus || (BindStatus = {}));
|
|
17
|
-
export function getQQBotHost(env = 'production') {
|
|
18
|
-
return HOSTS[env];
|
|
19
|
-
}
|
|
20
|
-
export function generateBindKey() {
|
|
21
|
-
return randomBytes(32).toString('base64');
|
|
22
|
-
}
|
|
23
|
-
export function buildConnectUrl(taskId, source = 'zhin') {
|
|
24
|
-
return `https://${getQQBotHost('production')}/qqbot/openclaw/connect.html?task_id=${encodeURIComponent(taskId)}&source=${encodeURIComponent(source)}&_wv=2`;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* AES-256-GCM 解密 base64 密文。
|
|
28
|
-
* 密文格式: IV(12 bytes) + ciphertext + AuthTag(16 bytes)
|
|
29
|
-
*/
|
|
30
|
-
export function decryptSecret(encryptedBase64, keyBase64) {
|
|
31
|
-
const key = Buffer.from(keyBase64, 'base64');
|
|
32
|
-
const payload = Buffer.from(encryptedBase64, 'base64');
|
|
33
|
-
const iv = payload.subarray(0, 12);
|
|
34
|
-
const authTag = payload.subarray(payload.length - 16);
|
|
35
|
-
const ciphertext = payload.subarray(12, payload.length - 16);
|
|
36
|
-
const decipher = createDecipheriv('aes-256-gcm', key, iv);
|
|
37
|
-
decipher.setAuthTag(authTag);
|
|
38
|
-
return Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString('utf8');
|
|
39
|
-
}
|
|
40
|
-
async function postJson(url, body, timeoutMs) {
|
|
41
|
-
const controller = new AbortController();
|
|
42
|
-
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
43
|
-
try {
|
|
44
|
-
const res = await fetch(url, {
|
|
45
|
-
method: 'POST',
|
|
46
|
-
headers: {
|
|
47
|
-
'Content-Type': 'application/json',
|
|
48
|
-
Accept: 'application/json',
|
|
49
|
-
},
|
|
50
|
-
body: JSON.stringify(body),
|
|
51
|
-
signal: controller.signal,
|
|
52
|
-
});
|
|
53
|
-
if (!res.ok) {
|
|
54
|
-
throw new Error(`HTTP ${res.status} from ${url}`);
|
|
55
|
-
}
|
|
56
|
-
return (await res.json());
|
|
57
|
-
}
|
|
58
|
-
finally {
|
|
59
|
-
clearTimeout(timer);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
export async function createBindTask(env = 'production', timeoutMs = 10_000) {
|
|
63
|
-
const url = `https://${getQQBotHost(env)}/lite/create_bind_task`;
|
|
64
|
-
const key = generateBindKey();
|
|
65
|
-
const res = await postJson(url, { key }, timeoutMs);
|
|
66
|
-
if (res.retcode !== 0) {
|
|
67
|
-
throw new Error(res.msg ?? 'create_bind_task failed');
|
|
68
|
-
}
|
|
69
|
-
if (!res.data?.task_id) {
|
|
70
|
-
throw new Error('create_bind_task: missing task_id');
|
|
71
|
-
}
|
|
72
|
-
return { taskId: res.data.task_id, key };
|
|
73
|
-
}
|
|
74
|
-
export function parsePollBindResultData(data) {
|
|
75
|
-
return {
|
|
76
|
-
status: (data?.status ?? BindStatus.NONE),
|
|
77
|
-
botAppId: String(data?.bot_appid ?? ''),
|
|
78
|
-
botEncryptSecret: data?.bot_encrypt_secret ?? '',
|
|
79
|
-
userOpenId: String(data?.user_openid ?? data?.userOpenid ?? data?.openid ?? ''),
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
export async function pollBindResult(taskId, env = 'production', timeoutMs = 10_000) {
|
|
83
|
-
const url = `https://${getQQBotHost(env)}/lite/poll_bind_result`;
|
|
84
|
-
const res = await postJson(url, { task_id: taskId }, timeoutMs);
|
|
85
|
-
if (res.retcode !== 0) {
|
|
86
|
-
throw new Error(res.msg ?? 'poll_bind_result failed');
|
|
87
|
-
}
|
|
88
|
-
return parsePollBindResultData(res.data);
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=qq-bind-api.js.map
|
package/lib/qq-bind-api.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"qq-bind-api.js","sourceRoot":"","sources":["../src/qq-bind-api.ts"],"names":[],"mappings":"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"}
|
package/lib/qq-bind-flow.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export interface QqBindCredentials {
|
|
2
|
-
appId: string;
|
|
3
|
-
appSecret: string;
|
|
4
|
-
userOpenId?: string;
|
|
5
|
-
}
|
|
6
|
-
export interface QqBindCallbacks {
|
|
7
|
-
onSuccess: (credentials: QqBindCredentials[]) => void;
|
|
8
|
-
onFailure: (error: Error) => void;
|
|
9
|
-
onQrDisplayed?: (url: string) => void | Promise<void>;
|
|
10
|
-
onQrExpired?: () => void | Promise<void>;
|
|
11
|
-
}
|
|
12
|
-
export interface QqBindFlowOptions {
|
|
13
|
-
signal?: AbortSignal;
|
|
14
|
-
source?: string;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* 轮询等待扫码结果(回调风格)。返回 stop 函数可中止流程。
|
|
18
|
-
*/
|
|
19
|
-
export declare function startQqBindFlow(callbacks: QqBindCallbacks, options?: QqBindFlowOptions): () => void;
|
|
20
|
-
//# sourceMappingURL=qq-bind-flow.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"qq-bind-flow.d.ts","sourceRoot":"","sources":["../src/qq-bind-flow.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,CAAC,WAAW,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IACtD,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,WAAW,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAkDD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,eAAe,EAC1B,OAAO,GAAE,iBAAsB,GAC9B,MAAM,IAAI,CAyCZ"}
|
package/lib/qq-bind-flow.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* QQ Bot 扫码绑定流程(内联,等价 qqbot-connector startQrConnect)
|
|
3
|
-
*/
|
|
4
|
-
import { BindStatus, buildConnectUrl, createBindTask, decryptSecret, pollBindResult, } from './qq-bind-api.js';
|
|
5
|
-
const POLL_INTERVAL_MS = 2000;
|
|
6
|
-
function sleep(ms, signal) {
|
|
7
|
-
return new Promise((resolve, reject) => {
|
|
8
|
-
if (signal?.aborted) {
|
|
9
|
-
reject(new DOMException('Aborted', 'AbortError'));
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
const timer = setTimeout(resolve, ms);
|
|
13
|
-
signal?.addEventListener('abort', () => {
|
|
14
|
-
clearTimeout(timer);
|
|
15
|
-
reject(new DOMException('Aborted', 'AbortError'));
|
|
16
|
-
}, { once: true });
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
async function pollUntilResult(taskId, key, signal) {
|
|
20
|
-
while (!signal?.aborted) {
|
|
21
|
-
let result;
|
|
22
|
-
try {
|
|
23
|
-
result = await pollBindResult(taskId);
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
await sleep(POLL_INTERVAL_MS, signal);
|
|
27
|
-
continue;
|
|
28
|
-
}
|
|
29
|
-
if (result.status === BindStatus.COMPLETED) {
|
|
30
|
-
const appSecret = decryptSecret(result.botEncryptSecret, key);
|
|
31
|
-
return {
|
|
32
|
-
outcome: 'scanned',
|
|
33
|
-
appId: result.botAppId,
|
|
34
|
-
appSecret,
|
|
35
|
-
userOpenId: result.userOpenId,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
if (result.status === BindStatus.EXPIRED) {
|
|
39
|
-
return { outcome: 'expired' };
|
|
40
|
-
}
|
|
41
|
-
await sleep(POLL_INTERVAL_MS, signal);
|
|
42
|
-
}
|
|
43
|
-
throw new DOMException('Aborted', 'AbortError');
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* 轮询等待扫码结果(回调风格)。返回 stop 函数可中止流程。
|
|
47
|
-
*/
|
|
48
|
-
export function startQqBindFlow(callbacks, options = {}) {
|
|
49
|
-
const controller = new AbortController();
|
|
50
|
-
const signal = options.signal
|
|
51
|
-
? AbortSignal.any([controller.signal, options.signal])
|
|
52
|
-
: controller.signal;
|
|
53
|
-
void (async () => {
|
|
54
|
-
for (;;) {
|
|
55
|
-
if (signal.aborted) {
|
|
56
|
-
throw new DOMException('Aborted', 'AbortError');
|
|
57
|
-
}
|
|
58
|
-
let task;
|
|
59
|
-
try {
|
|
60
|
-
task = await createBindTask();
|
|
61
|
-
}
|
|
62
|
-
catch (err) {
|
|
63
|
-
throw new Error(`获取绑定任务失败: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
64
|
-
}
|
|
65
|
-
const connectUrl = buildConnectUrl(task.taskId, options.source ?? 'zhin');
|
|
66
|
-
await callbacks.onQrDisplayed?.(connectUrl);
|
|
67
|
-
const pollResult = await pollUntilResult(task.taskId, task.key, signal);
|
|
68
|
-
if (pollResult.outcome === 'scanned') {
|
|
69
|
-
callbacks.onSuccess([{
|
|
70
|
-
appId: pollResult.appId,
|
|
71
|
-
appSecret: pollResult.appSecret,
|
|
72
|
-
userOpenId: pollResult.userOpenId || undefined,
|
|
73
|
-
}]);
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
await callbacks.onQrExpired?.();
|
|
77
|
-
}
|
|
78
|
-
})().catch((err) => {
|
|
79
|
-
if (err instanceof DOMException && err.name === 'AbortError') {
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
callbacks.onFailure(err instanceof Error ? err : new Error(String(err)));
|
|
83
|
-
});
|
|
84
|
-
return () => controller.abort();
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=qq-bind-flow.js.map
|
package/lib/qq-bind-flow.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"qq-bind-flow.js","sourceRoot":"","sources":["../src/qq-bind-flow.ts"],"names":[],"mappings":"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"}
|
package/lib/qq-bind-persist.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export interface QqCredentialEnvKeys {
|
|
2
|
-
appidKey: string;
|
|
3
|
-
secretKey: string;
|
|
4
|
-
appidRef: string;
|
|
5
|
-
secretRef: string;
|
|
6
|
-
}
|
|
7
|
-
/** 按 endpoint 名称生成唯一 env 键(如 `QQ_MOCK_QQ_BOT_APPID`) */
|
|
8
|
-
export declare function buildQqCredentialEnvKeys(endpointName: string): QqCredentialEnvKeys;
|
|
9
|
-
/** 写入或更新 `.env` 中的键值,并同步到当前进程 `process.env` */
|
|
10
|
-
export declare function persistQqCredentialsToEnv(endpointName: string, appId: string, appSecret: string, projectRoot?: string): QqCredentialEnvKeys;
|
|
11
|
-
//# sourceMappingURL=qq-bind-persist.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"qq-bind-persist.d.ts","sourceRoot":"","sources":["../src/qq-bind-persist.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wDAAwD;AACxD,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,mBAAmB,CAUlF;AAwBD,+CAA+C;AAC/C,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,mBAAmB,CAkBrB"}
|
package/lib/qq-bind-persist.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { runtimeCwd } from 'zhin.js';
|
|
4
|
-
/** 按 endpoint 名称生成唯一 env 键(如 `QQ_MOCK_QQ_BOT_APPID`) */
|
|
5
|
-
export function buildQqCredentialEnvKeys(endpointName) {
|
|
6
|
-
const slug = endpointName.replace(/[^a-zA-Z0-9_]/g, '_').toUpperCase();
|
|
7
|
-
const appidKey = `QQ_${slug}_APPID`;
|
|
8
|
-
const secretKey = `QQ_${slug}_SECRET`;
|
|
9
|
-
return {
|
|
10
|
-
appidKey,
|
|
11
|
-
secretKey,
|
|
12
|
-
appidRef: `\${${appidKey}}`,
|
|
13
|
-
secretRef: `\${${secretKey}}`,
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
function resolveProjectRoot() {
|
|
17
|
-
const envRoot = process.env.ZHIN_PROJECT_ROOT?.trim();
|
|
18
|
-
return path.resolve(envRoot || runtimeCwd());
|
|
19
|
-
}
|
|
20
|
-
function escapeRegExp(text) {
|
|
21
|
-
return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
22
|
-
}
|
|
23
|
-
function upsertEnvLine(content, key, value) {
|
|
24
|
-
const lineRe = new RegExp(`^${escapeRegExp(key)}\\s*=.*$`, 'm');
|
|
25
|
-
const newLine = `${key}=${value}`;
|
|
26
|
-
if (lineRe.test(content)) {
|
|
27
|
-
return content.replace(lineRe, newLine);
|
|
28
|
-
}
|
|
29
|
-
const trimmed = content.replace(/\s*$/, '');
|
|
30
|
-
if (trimmed.length === 0) {
|
|
31
|
-
return `${newLine}\n`;
|
|
32
|
-
}
|
|
33
|
-
return `${trimmed}\n${newLine}\n`;
|
|
34
|
-
}
|
|
35
|
-
/** 写入或更新 `.env` 中的键值,并同步到当前进程 `process.env` */
|
|
36
|
-
export function persistQqCredentialsToEnv(endpointName, appId, appSecret, projectRoot) {
|
|
37
|
-
const keys = buildQqCredentialEnvKeys(endpointName);
|
|
38
|
-
const root = projectRoot ?? resolveProjectRoot();
|
|
39
|
-
const envPath = path.join(root, '.env');
|
|
40
|
-
let content = fs.existsSync(envPath) ? fs.readFileSync(envPath, 'utf-8') : '';
|
|
41
|
-
const entries = {
|
|
42
|
-
[keys.appidKey]: appId,
|
|
43
|
-
[keys.secretKey]: appSecret,
|
|
44
|
-
};
|
|
45
|
-
for (const [key, value] of Object.entries(entries)) {
|
|
46
|
-
content = upsertEnvLine(content, key, value);
|
|
47
|
-
process.env[key] = value;
|
|
48
|
-
}
|
|
49
|
-
fs.writeFileSync(envPath, content);
|
|
50
|
-
return keys;
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=qq-bind-persist.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"qq-bind-persist.js","sourceRoot":"","sources":["../src/qq-bind-persist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AASrC,wDAAwD;AACxD,MAAM,UAAU,wBAAwB,CAAC,YAAoB;IAC3D,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACvE,MAAM,QAAQ,GAAG,MAAM,IAAI,QAAQ,CAAC;IACpC,MAAM,SAAS,GAAG,MAAM,IAAI,SAAS,CAAC;IACtC,OAAO;QACL,QAAQ;QACR,SAAS;QACT,QAAQ,EAAE,MAAM,QAAQ,GAAG;QAC3B,SAAS,EAAE,MAAM,SAAS,GAAG;KAC9B,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;IACtD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,EAAE,GAAW,EAAE,KAAa;IAChE,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;IAClC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,OAAO,IAAI,CAAC;IACxB,CAAC;IACD,OAAO,GAAG,OAAO,KAAK,OAAO,IAAI,CAAC;AACpC,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,yBAAyB,CACvC,YAAoB,EACpB,KAAa,EACb,SAAiB,EACjB,WAAoB;IAEpB,MAAM,IAAI,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,WAAW,IAAI,kBAAkB,EAAE,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,IAAI,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9E,MAAM,OAAO,GAA2B;QACtC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK;QACtB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS;KAC5B,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { EndpointConfigRecord, EndpointManager, ProvisionContext } from 'zhin.js';
|
|
2
|
-
import type { QQAdapter } from './adapter.js';
|
|
3
|
-
export declare class QqEndpointManager implements EndpointManager {
|
|
4
|
-
private readonly adapter;
|
|
5
|
-
constructor(adapter: QQAdapter);
|
|
6
|
-
supportsProvision(): boolean;
|
|
7
|
-
listEndpoints(): EndpointConfigRecord[];
|
|
8
|
-
cancelProvision(): boolean;
|
|
9
|
-
addEndpoint(ctx: ProvisionContext): Promise<EndpointConfigRecord>;
|
|
10
|
-
editEndpoint(name: string, ctx: ProvisionContext): Promise<EndpointConfigRecord>;
|
|
11
|
-
removeEndpoint(name: string): Promise<boolean>;
|
|
12
|
-
startEndpoint(name: string, ctx: ProvisionContext): Promise<void>;
|
|
13
|
-
stopEndpoint(name: string): Promise<boolean>;
|
|
14
|
-
}
|
|
15
|
-
export declare function disposeQqEndpointProvision(): void;
|
|
16
|
-
//# sourceMappingURL=qq-endpoint-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"qq-endpoint-manager.d.ts","sourceRoot":"","sources":["../src/qq-endpoint-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA2F9C,qBAAa,iBAAkB,YAAW,eAAe;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,SAAS;IAE/C,iBAAiB,IAAI,OAAO;IAI5B,aAAa,IAAI,oBAAoB,EAAE;IAIvC,eAAe,IAAI,OAAO;IAOpB,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAoDjE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAWhF,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI9C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAGnD;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAKjD"}
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import { ReceiverMode as QQReceiverMode } from './types.js';
|
|
2
|
-
import { startQqBindFlow } from './qq-bind-flow.js';
|
|
3
|
-
import { persistQqCredentialsToEnv } from './qq-bind-persist.js';
|
|
4
|
-
const DEFAULT_INTENTS = [
|
|
5
|
-
'GUILDS',
|
|
6
|
-
'GUILD_MEMBERS',
|
|
7
|
-
'GUILD_MESSAGE_REACTIONS',
|
|
8
|
-
'DIRECT_MESSAGE',
|
|
9
|
-
'GROUP_AND_C2C_EVENT',
|
|
10
|
-
'INTERACTION',
|
|
11
|
-
'MESSAGE_AUDIT',
|
|
12
|
-
'AUDIO_ACTION',
|
|
13
|
-
'PUBLIC_GUILD_MESSAGES',
|
|
14
|
-
];
|
|
15
|
-
function clonePlainConfig(value) {
|
|
16
|
-
return JSON.parse(JSON.stringify(value));
|
|
17
|
-
}
|
|
18
|
-
function resolveQqEndpointTemplate(root) {
|
|
19
|
-
const configService = root.inject('config');
|
|
20
|
-
const raw = configService?.primaryFile && configService.getRaw
|
|
21
|
-
? configService.getRaw(configService.primaryFile)
|
|
22
|
-
: undefined;
|
|
23
|
-
const existing = raw?.endpoints?.find((e) => e.context === 'qq');
|
|
24
|
-
if (!existing) {
|
|
25
|
-
return {
|
|
26
|
-
mode: QQReceiverMode.WEBSOCKET,
|
|
27
|
-
sandbox: false,
|
|
28
|
-
timeout: 10_000,
|
|
29
|
-
data_dir: './data',
|
|
30
|
-
intents: [...DEFAULT_INTENTS],
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
const { name: _n, appid: _a, secret: _s, context: _c, ...rest } = existing;
|
|
34
|
-
return clonePlainConfig(rest);
|
|
35
|
-
}
|
|
36
|
-
function resolveBindOperatorId(userOpenId, ctx) {
|
|
37
|
-
const fromApi = userOpenId?.trim();
|
|
38
|
-
if (fromApi)
|
|
39
|
-
return fromApi;
|
|
40
|
-
return ctx.message.$sender?.id?.trim() ?? '';
|
|
41
|
-
}
|
|
42
|
-
function applyBindOwnership(template, operatorId) {
|
|
43
|
-
const { master: _m, aiAccess, ...rest } = template;
|
|
44
|
-
if (!operatorId) {
|
|
45
|
-
return rest;
|
|
46
|
-
}
|
|
47
|
-
const prior = aiAccess;
|
|
48
|
-
return {
|
|
49
|
-
...rest,
|
|
50
|
-
master: operatorId,
|
|
51
|
-
aiAccess: {
|
|
52
|
-
mode: prior?.mode ?? 'whitelist',
|
|
53
|
-
users: [operatorId],
|
|
54
|
-
groups: Array.isArray(prior?.groups) ? [...prior.groups] : [],
|
|
55
|
-
denyMessage: typeof prior?.denyMessage === 'string'
|
|
56
|
-
? prior.denyMessage
|
|
57
|
-
: '当前用户尚未开放 AI 功能,请联系开启。',
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
function readQqConfigs(root) {
|
|
62
|
-
const configService = root.inject('config');
|
|
63
|
-
if (!configService?.primaryFile || !configService.getRaw)
|
|
64
|
-
return [];
|
|
65
|
-
const raw = configService.getRaw(configService.primaryFile);
|
|
66
|
-
return (raw?.endpoints ?? []).filter((e) => e.context === 'qq');
|
|
67
|
-
}
|
|
68
|
-
/** 全局单例:同一时间只允许一个 QQ 扫码绑定 */
|
|
69
|
-
let activeStopFlow = null;
|
|
70
|
-
export class QqEndpointManager {
|
|
71
|
-
adapter;
|
|
72
|
-
constructor(adapter) {
|
|
73
|
-
this.adapter = adapter;
|
|
74
|
-
}
|
|
75
|
-
supportsProvision() {
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
78
|
-
listEndpoints() {
|
|
79
|
-
return readQqConfigs(this.adapter.plugin.root);
|
|
80
|
-
}
|
|
81
|
-
cancelProvision() {
|
|
82
|
-
if (!activeStopFlow)
|
|
83
|
-
return false;
|
|
84
|
-
activeStopFlow();
|
|
85
|
-
activeStopFlow = null;
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
async addEndpoint(ctx) {
|
|
89
|
-
if (activeStopFlow) {
|
|
90
|
-
throw new Error('已有进行中的 QQ 机器人绑定,请先 /endpoint cancel');
|
|
91
|
-
}
|
|
92
|
-
let endpointName;
|
|
93
|
-
const nameMatch = ctx.message.$raw?.match(/\/endpoint\s+add\s+qq\s+(\S+)/);
|
|
94
|
-
if (nameMatch?.[1]) {
|
|
95
|
-
endpointName = nameMatch[1];
|
|
96
|
-
}
|
|
97
|
-
return new Promise((resolve, reject) => {
|
|
98
|
-
const stopFlow = startQqBindFlow({
|
|
99
|
-
onQrDisplayed: async (url) => {
|
|
100
|
-
await ctx.onStatusUpdate('请用手机 QQ 扫描二维码完成机器人绑定。', {
|
|
101
|
-
qrcode: url,
|
|
102
|
-
});
|
|
103
|
-
},
|
|
104
|
-
onQrExpired: async () => {
|
|
105
|
-
await ctx.onStatusUpdate('二维码已过期,正在刷新,请扫描新二维码…');
|
|
106
|
-
},
|
|
107
|
-
onSuccess: async (credentials) => {
|
|
108
|
-
activeStopFlow = null;
|
|
109
|
-
const [{ appId, appSecret, userOpenId }] = credentials;
|
|
110
|
-
const name = endpointName?.trim() || appId;
|
|
111
|
-
await ctx.onStatusUpdate('凭据绑定成功,正在写入配置…');
|
|
112
|
-
const envKeys = persistQqCredentialsToEnv(name, appId, appSecret);
|
|
113
|
-
const template = resolveQqEndpointTemplate(ctx.root);
|
|
114
|
-
const operatorId = resolveBindOperatorId(userOpenId, ctx);
|
|
115
|
-
const owned = applyBindOwnership(template, operatorId);
|
|
116
|
-
resolve({
|
|
117
|
-
context: 'qq',
|
|
118
|
-
name,
|
|
119
|
-
appid: envKeys.appidRef,
|
|
120
|
-
secret: envKeys.secretRef,
|
|
121
|
-
...owned,
|
|
122
|
-
});
|
|
123
|
-
},
|
|
124
|
-
onFailure: async (error) => {
|
|
125
|
-
activeStopFlow = null;
|
|
126
|
-
reject(error);
|
|
127
|
-
},
|
|
128
|
-
}, { source: 'zhin' });
|
|
129
|
-
activeStopFlow = stopFlow;
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
async editEndpoint(name, ctx) {
|
|
133
|
-
const existing = this.listEndpoints().find((e) => e.name === name);
|
|
134
|
-
if (!existing) {
|
|
135
|
-
throw new Error(`配置中不存在 qq/${name}`);
|
|
136
|
-
}
|
|
137
|
-
await ctx.onStatusUpdate(`QQ 官方机器人暂不支持在线改凭据,请 /endpoint remove qq ${name} 后重新 /endpoint add qq。`);
|
|
138
|
-
return existing;
|
|
139
|
-
}
|
|
140
|
-
async removeEndpoint(name) {
|
|
141
|
-
return this.listEndpoints().some((e) => e.name === name);
|
|
142
|
-
}
|
|
143
|
-
async startEndpoint(name, ctx) {
|
|
144
|
-
if (!this.listEndpoints().some((e) => e.name === name)) {
|
|
145
|
-
throw new Error(`配置中不存在 qq/${name}`);
|
|
146
|
-
}
|
|
147
|
-
await ctx.onStatusUpdate(`正在连接 qq/${name}…`);
|
|
148
|
-
}
|
|
149
|
-
async stopEndpoint(name) {
|
|
150
|
-
return this.adapter.endpoints.has(name);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
export function disposeQqEndpointProvision() {
|
|
154
|
-
if (activeStopFlow) {
|
|
155
|
-
activeStopFlow();
|
|
156
|
-
activeStopFlow = null;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
//# sourceMappingURL=qq-endpoint-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"qq-endpoint-manager.js","sourceRoot":"","sources":["../src/qq-endpoint-manager.ts"],"names":[],"mappings":"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"}
|
package/lib/sdk-version.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/** HTTP header name for outbound QQ API requests. */
|
|
2
|
-
export declare const SDK_VERSION_HEADER = "x-sdk-version";
|
|
3
|
-
/**
|
|
4
|
-
* Composite SDK identity: Zhin adapter + underlying qq-official-endpoint.
|
|
5
|
-
* Example: `zhin-adapter-qq/v2.0.11+qq-official-bot/v1.2.1`
|
|
6
|
-
*/
|
|
7
|
-
export declare const SDK_VERSION: string;
|
|
8
|
-
//# sourceMappingURL=sdk-version.d.ts.map
|
package/lib/sdk-version.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-version.d.ts","sourceRoot":"","sources":["../src/sdk-version.ts"],"names":[],"mappings":"AAaA,qDAAqD;AACrD,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,WAAW,QAAiG,CAAC"}
|
package/lib/sdk-version.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { createRequire } from "node:module";
|
|
2
|
-
import adapterPkg from "../package.json" with { type: "json" };
|
|
3
|
-
const require = createRequire(import.meta.url);
|
|
4
|
-
function readDepVersion(dep) {
|
|
5
|
-
try {
|
|
6
|
-
return require(`${dep}/package.json`).version;
|
|
7
|
-
}
|
|
8
|
-
catch {
|
|
9
|
-
return "unknown";
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
/** HTTP header name for outbound QQ API requests. */
|
|
13
|
-
export const SDK_VERSION_HEADER = "x-sdk-version";
|
|
14
|
-
/**
|
|
15
|
-
* Composite SDK identity: Zhin adapter + underlying qq-official-endpoint.
|
|
16
|
-
* Example: `zhin-adapter-qq/v2.0.11+qq-official-bot/v1.2.1`
|
|
17
|
-
*/
|
|
18
|
-
export const SDK_VERSION = `zhin-adapter-qq/v${adapterPkg.version}+qq-official-bot/v${readDepVersion("qq-official-bot")}`;
|
|
19
|
-
//# sourceMappingURL=sdk-version.js.map
|
package/lib/sdk-version.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-version.js","sourceRoot":"","sources":["../src/sdk-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,UAAU,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE/D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC;QACH,OAAQ,OAAO,CAAC,GAAG,GAAG,eAAe,CAAyB,CAAC,OAAO,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,qDAAqD;AACrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAElD;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,UAAU,CAAC,OAAO,qBAAqB,cAAc,CAAC,iBAAiB,CAAC,EAAE,CAAC"}
|
package/lib/segment-mapper.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"segment-mapper.d.ts","sourceRoot":"","sources":["../src/segment-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
|
package/lib/segment-mapper.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"segment-mapper.js","sourceRoot":"","sources":["../src/segment-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
|
package/lib/types.d.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* QQ 官方机器人适配器类型定义
|
|
3
|
-
*/
|
|
4
|
-
import type { Bot as QQOfficialBot } from "qq-official-bot";
|
|
5
|
-
import type { ReceiverMode, ApplicationPlatform } from "qq-official-bot";
|
|
6
|
-
export { ReceiverMode } from "qq-official-bot";
|
|
7
|
-
export type { ApplicationPlatform, Intent } from "qq-official-bot";
|
|
8
|
-
export type QQEndpointConfig<T extends ReceiverMode, M extends ApplicationPlatform = ApplicationPlatform> = QQOfficialBot.Config<T, M> & {
|
|
9
|
-
context: "qq";
|
|
10
|
-
name: string;
|
|
11
|
-
data_dir?: string;
|
|
12
|
-
/**
|
|
13
|
-
* middleware 模式:挂在 host-router 的回调路径(默认 `/qq/webhook`,完整 URL 为 `{host}:8086/qq/webhook`,无 `/api` 前缀)。
|
|
14
|
-
* webhook 独立端口模式:使用 qq-official-bot 的 `path` 字段。
|
|
15
|
-
*/
|
|
16
|
-
webhookPath?: string;
|
|
17
|
-
/**
|
|
18
|
-
* 自定义 access token 接口(完整 URL)。
|
|
19
|
-
* 默认 `https://bots.qq.com/app/getAppAccessToken`;代理或私有部署时可覆盖。
|
|
20
|
-
*/
|
|
21
|
-
accessTokenUrl?: string;
|
|
22
|
-
/**
|
|
23
|
-
* 自定义 gateway 接口(完整 URL 或相对路径,如 `/gateway/bot`)。
|
|
24
|
-
* 响应中的 `url` 为 WebSocket 地址;**仅 `mode: websocket` 入站时使用**。
|
|
25
|
-
*/
|
|
26
|
-
gatewayUrl?: string;
|
|
27
|
-
/**
|
|
28
|
-
* AI 出站是否转为 QQ Markdown(`msg_type=2`)。
|
|
29
|
-
* - `auto`(默认):正文含 Markdown 语法时转换
|
|
30
|
-
* - `true`:纯文本也走 Markdown
|
|
31
|
-
* - `false`:保持纯文本
|
|
32
|
-
*/
|
|
33
|
-
outboundMarkdown?: boolean | "auto";
|
|
34
|
-
/** 本 Endpoint AI 访问控制(见 docs/advanced/content-moderation.md) */
|
|
35
|
-
aiAccess?: {
|
|
36
|
-
mode?: 'open' | 'closed' | 'whitelist';
|
|
37
|
-
users?: string[];
|
|
38
|
-
groups?: string[];
|
|
39
|
-
denyMessage?: string;
|
|
40
|
-
};
|
|
41
|
-
};
|
|
42
|
-
export interface QQEndpoint<T extends ReceiverMode, M extends ApplicationPlatform = ApplicationPlatform> {
|
|
43
|
-
$config: QQEndpointConfig<T, M>;
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=types.d.ts.map
|
package/lib/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,GAAG,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,MAAM,gBAAgB,CAC1B,CAAC,SAAS,YAAY,EACtB,CAAC,SAAS,mBAAmB,GAAG,mBAAmB,IACjD,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;IAC/B,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACpC,gEAAgE;IAChE,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;QACvC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,UAAU,CACzB,CAAC,SAAS,YAAY,EACtB,CAAC,SAAS,mBAAmB,GAAG,mBAAmB;IAEnD,OAAO,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACjC"}
|
package/lib/types.js
DELETED
package/lib/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
|
package/plugin.yml
DELETED