@sfmc-bds/qq-bridge 0.2.0-beta.8 → 0.2.0
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/README.md +69 -2
- package/deploy/install-nginx-webhook.sh +34 -0
- package/deploy/nginx-webhook-location.conf +10 -0
- package/deploy/qq-bridge.service +23 -0
- package/deploy/qq-config-sync.ps1 +106 -0
- package/deploy/qq-tunnel.ps1 +15 -0
- package/deploy/sync-qq-config.mjs +229 -0
- package/dist/commands/account-format.js +41 -0
- package/dist/commands/account-format.js.map +7 -0
- package/dist/commands/content-format.js +114 -0
- package/dist/commands/content-format.js.map +7 -0
- package/dist/commands/db-api.js +21 -6
- package/dist/commands/db-api.js.map +2 -2
- package/dist/commands/handlers.js +392 -524
- package/dist/commands/handlers.js.map +2 -2
- package/dist/commands/index.js +5 -5
- package/dist/commands/index.js.map +3 -3
- package/dist/commands/interaction-router.js +38 -133
- package/dist/commands/interaction-router.js.map +2 -2
- package/dist/commands/join-settings-ui.js +1 -24
- package/dist/commands/join-settings-ui.js.map +2 -2
- package/dist/commands/menu-format.js +36 -33
- package/dist/commands/menu-format.js.map +2 -2
- package/dist/commands/menu-panel-sync.js +39 -13
- package/dist/commands/menu-panel-sync.js.map +2 -2
- package/dist/commands/message-text.js +91 -0
- package/dist/commands/message-text.js.map +7 -0
- package/dist/commands/pending.js +23 -16
- package/dist/commands/pending.js.map +2 -2
- package/dist/commands/permissions.js +17 -0
- package/dist/commands/permissions.js.map +7 -0
- package/dist/commands/registry.js +1 -1
- package/dist/commands/registry.js.map +2 -2
- package/dist/commands/render.js +7 -16
- package/dist/commands/render.js.map +2 -2
- package/dist/commands/reply-llbot.js +18 -7
- package/dist/commands/reply-llbot.js.map +2 -2
- package/dist/commands/reply-official.js +55 -39
- package/dist/commands/reply-official.js.map +3 -3
- package/dist/commands/router.js +116 -23
- package/dist/commands/router.js.map +2 -2
- package/dist/config.js +35 -27
- package/dist/config.js.map +2 -2
- package/dist/console.js +3 -3
- package/dist/console.js.map +2 -2
- package/dist/index.js +30 -16
- package/dist/index.js.map +2 -2
- package/dist/llbot-ws-api.js +2 -2
- package/dist/llbot-ws-api.js.map +2 -2
- package/dist/official/events.js +32 -7
- package/dist/official/events.js.map +2 -2
- package/dist/official/gateway.js +10 -1
- package/dist/official/gateway.js.map +2 -2
- package/dist/official/webhook.js +165 -0
- package/dist/official/webhook.js.map +7 -0
- package/dist/onebot.js +0 -4
- package/dist/onebot.js.map +2 -2
- package/package.json +4 -4
- package/dist/commands/join-settings-ui.test.js +0 -43
- package/dist/commands/join-settings-ui.test.js.map +0 -7
- package/dist/commands/menu-panel-sync.test.js +0 -27
- package/dist/commands/menu-panel-sync.test.js.map +0 -7
- package/dist/commands/render.test.js +0 -44
- package/dist/commands/render.test.js.map +0 -7
- package/dist/commands/router.test.js +0 -92
- package/dist/commands/router.test.js.map +0 -7
- package/dist/llbot-ws-api.test.js +0 -32
- package/dist/llbot-ws-api.test.js.map +0 -7
- package/dist/official/events.test.js +0 -123
- package/dist/official/events.test.js.map +0 -7
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import assert from "node:assert/strict";
|
|
2
|
-
import test from "node:test";
|
|
3
|
-
import {
|
|
4
|
-
OfficialAtMessageDispatcher,
|
|
5
|
-
attachmentsPlaceholder,
|
|
6
|
-
extractOfficialText
|
|
7
|
-
} from "./events.js";
|
|
8
|
-
test("extractOfficialText \u53BB @ \u5E76\u62FC\u9644\u4EF6\u5360\u4F4D", () => {
|
|
9
|
-
assert.equal(
|
|
10
|
-
extractOfficialText({
|
|
11
|
-
content: "<@!botid> hello",
|
|
12
|
-
attachments: [{ content_type: "image/png" }]
|
|
13
|
-
}),
|
|
14
|
-
"hello [\u56FE\u7247]"
|
|
15
|
-
);
|
|
16
|
-
});
|
|
17
|
-
test("attachmentsPlaceholder \u6309\u7C7B\u578B\u5206\u7C7B", () => {
|
|
18
|
-
assert.equal(
|
|
19
|
-
attachmentsPlaceholder([
|
|
20
|
-
{ content_type: "image/jpeg" },
|
|
21
|
-
{ content_type: "video/mp4" },
|
|
22
|
-
{ filename: "a.mp3" },
|
|
23
|
-
{ filename: "doc.pdf" }
|
|
24
|
-
]),
|
|
25
|
-
"[\u56FE\u7247][\u89C6\u9891][\u8BED\u97F3][\u6587\u4EF6]"
|
|
26
|
-
);
|
|
27
|
-
});
|
|
28
|
-
test("OfficialAtMessageDispatcher \u8FC7\u6EE4\u4E0E\u8F6C\u53D1\u8F7D\u8377", async () => {
|
|
29
|
-
const forwarded = [];
|
|
30
|
-
const forward = async (_db, fromId, fromName, content) => {
|
|
31
|
-
forwarded.push({ fromId, fromName, content });
|
|
32
|
-
};
|
|
33
|
-
const db = { host: "127.0.0.1", port: 3001, channelId: "bridge" };
|
|
34
|
-
const missingOpenid = new OfficialAtMessageDispatcher({
|
|
35
|
-
groupOpenid: "",
|
|
36
|
-
db,
|
|
37
|
-
forward
|
|
38
|
-
});
|
|
39
|
-
await missingOpenid.handleGroupAtMessage({
|
|
40
|
-
id: "1",
|
|
41
|
-
group_openid: "G1",
|
|
42
|
-
content: "hi",
|
|
43
|
-
author: { member_openid: "M1", username: "U", bot: false }
|
|
44
|
-
});
|
|
45
|
-
assert.equal(forwarded.length, 0);
|
|
46
|
-
const d = new OfficialAtMessageDispatcher({
|
|
47
|
-
groupOpenid: "G1",
|
|
48
|
-
db,
|
|
49
|
-
forward
|
|
50
|
-
});
|
|
51
|
-
await d.handleGroupAtMessage({
|
|
52
|
-
id: "2",
|
|
53
|
-
group_openid: "G1",
|
|
54
|
-
content: "bot echo",
|
|
55
|
-
author: { member_openid: "BOT", bot: true }
|
|
56
|
-
});
|
|
57
|
-
assert.equal(forwarded.length, 0);
|
|
58
|
-
await d.handleGroupAtMessage({
|
|
59
|
-
id: "3",
|
|
60
|
-
group_openid: "OTHER",
|
|
61
|
-
content: "wrong",
|
|
62
|
-
author: { member_openid: "M2", username: "Bob", bot: false }
|
|
63
|
-
});
|
|
64
|
-
assert.equal(forwarded.length, 0);
|
|
65
|
-
await d.handleGroupAtMessage({
|
|
66
|
-
id: "4",
|
|
67
|
-
group_openid: "G1",
|
|
68
|
-
content: "<@!x> hello world",
|
|
69
|
-
author: { member_openid: "M3", username: "Alice", bot: false }
|
|
70
|
-
});
|
|
71
|
-
assert.equal(forwarded.length, 1);
|
|
72
|
-
assert.deepEqual(forwarded[0], {
|
|
73
|
-
fromId: "qq_M3",
|
|
74
|
-
fromName: "Alice",
|
|
75
|
-
content: "hello world"
|
|
76
|
-
});
|
|
77
|
-
await d.handleGroupAtMessage({
|
|
78
|
-
id: "4",
|
|
79
|
-
group_openid: "G1",
|
|
80
|
-
content: "dup",
|
|
81
|
-
author: { member_openid: "M3", username: "Alice", bot: false }
|
|
82
|
-
});
|
|
83
|
-
assert.equal(forwarded.length, 1);
|
|
84
|
-
});
|
|
85
|
-
test("OfficialAtMessageDispatcher \u6307\u4EE4\u547D\u4E2D\u4E0D\u8F6C\u53D1", async () => {
|
|
86
|
-
const forwarded = [];
|
|
87
|
-
const handled = [];
|
|
88
|
-
const forward = async (_db, _a, _b, content) => {
|
|
89
|
-
forwarded.push(content);
|
|
90
|
-
};
|
|
91
|
-
const commandRouter = {
|
|
92
|
-
async handle(inbound) {
|
|
93
|
-
if (inbound.text === "ping" || inbound.text === "/ping") {
|
|
94
|
-
handled.push(inbound.text);
|
|
95
|
-
return true;
|
|
96
|
-
}
|
|
97
|
-
return false;
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
const d = new OfficialAtMessageDispatcher({
|
|
101
|
-
groupOpenid: "G1",
|
|
102
|
-
db: { host: "127.0.0.1", port: 3001, channelId: "bridge" },
|
|
103
|
-
forward,
|
|
104
|
-
commandRouter
|
|
105
|
-
});
|
|
106
|
-
await d.handleGroupAtMessage({
|
|
107
|
-
id: "c1",
|
|
108
|
-
group_openid: "G1",
|
|
109
|
-
content: "<@!x> /ping",
|
|
110
|
-
author: { member_openid: "M9", username: "Op", bot: false }
|
|
111
|
-
});
|
|
112
|
-
assert.deepEqual(handled, ["/ping"]);
|
|
113
|
-
assert.equal(forwarded.length, 0);
|
|
114
|
-
await d.handleGroupAtMessage({
|
|
115
|
-
id: "c2",
|
|
116
|
-
group_openid: "G1",
|
|
117
|
-
content: "<@!x> chat",
|
|
118
|
-
author: { member_openid: "M9", username: "Op", bot: false }
|
|
119
|
-
});
|
|
120
|
-
assert.equal(forwarded.length, 1);
|
|
121
|
-
assert.equal(forwarded[0], "chat");
|
|
122
|
-
});
|
|
123
|
-
//# sourceMappingURL=events.test.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/official/events.test.ts"],
|
|
4
|
-
"sourcesContent": ["import assert from \"node:assert/strict\";\nimport test from \"node:test\";\nimport {\n OfficialAtMessageDispatcher,\n attachmentsPlaceholder,\n extractOfficialText,\n} from \"./events.js\";\n\ntest(\"extractOfficialText \u53BB @ \u5E76\u62FC\u9644\u4EF6\u5360\u4F4D\", () => {\n assert.equal(\n extractOfficialText({\n content: \"<@!botid> hello\",\n attachments: [{ content_type: \"image/png\" }],\n }),\n \"hello [\u56FE\u7247]\"\n );\n});\n\ntest(\"attachmentsPlaceholder \u6309\u7C7B\u578B\u5206\u7C7B\", () => {\n assert.equal(\n attachmentsPlaceholder([\n { content_type: \"image/jpeg\" },\n { content_type: \"video/mp4\" },\n { filename: \"a.mp3\" },\n { filename: \"doc.pdf\" },\n ]),\n \"[\u56FE\u7247][\u89C6\u9891][\u8BED\u97F3][\u6587\u4EF6]\"\n );\n});\n\ntest(\"OfficialAtMessageDispatcher \u8FC7\u6EE4\u4E0E\u8F6C\u53D1\u8F7D\u8377\", async () => {\n const forwarded: Array<{ fromId: string; fromName: string; content: string }> = [];\n const forward = async (\n _db: unknown,\n fromId: string,\n fromName: string,\n content: string\n ): Promise<void> => {\n forwarded.push({ fromId, fromName, content });\n };\n\n const db = { host: \"127.0.0.1\", port: 3001, channelId: \"bridge\" };\n\n const missingOpenid = new OfficialAtMessageDispatcher({\n groupOpenid: \"\",\n db,\n forward,\n });\n await missingOpenid.handleGroupAtMessage({\n id: \"1\",\n group_openid: \"G1\",\n content: \"hi\",\n author: { member_openid: \"M1\", username: \"U\", bot: false },\n });\n assert.equal(forwarded.length, 0);\n\n const d = new OfficialAtMessageDispatcher({\n groupOpenid: \"G1\",\n db,\n forward,\n });\n\n await d.handleGroupAtMessage({\n id: \"2\",\n group_openid: \"G1\",\n content: \"bot echo\",\n author: { member_openid: \"BOT\", bot: true },\n });\n assert.equal(forwarded.length, 0);\n\n await d.handleGroupAtMessage({\n id: \"3\",\n group_openid: \"OTHER\",\n content: \"wrong\",\n author: { member_openid: \"M2\", username: \"Bob\", bot: false },\n });\n assert.equal(forwarded.length, 0);\n\n await d.handleGroupAtMessage({\n id: \"4\",\n group_openid: \"G1\",\n content: \"<@!x> hello world\",\n author: { member_openid: \"M3\", username: \"Alice\", bot: false },\n });\n assert.equal(forwarded.length, 1);\n assert.deepEqual(forwarded[0], {\n fromId: \"qq_M3\",\n fromName: \"Alice\",\n content: \"hello world\",\n });\n\n // \u53BB\u91CD\n await d.handleGroupAtMessage({\n id: \"4\",\n group_openid: \"G1\",\n content: \"dup\",\n author: { member_openid: \"M3\", username: \"Alice\", bot: false },\n });\n assert.equal(forwarded.length, 1);\n});\n\ntest(\"OfficialAtMessageDispatcher \u6307\u4EE4\u547D\u4E2D\u4E0D\u8F6C\u53D1\", async () => {\n const forwarded: string[] = [];\n const handled: string[] = [];\n const forward = async (_db: unknown, _a: string, _b: string, content: string): Promise<void> => {\n forwarded.push(content);\n };\n const commandRouter = {\n async handle(inbound: { text: string }): Promise<boolean> {\n if (inbound.text === \"ping\" || inbound.text === \"/ping\") {\n handled.push(inbound.text);\n return true;\n }\n return false;\n },\n };\n\n const d = new OfficialAtMessageDispatcher({\n groupOpenid: \"G1\",\n db: { host: \"127.0.0.1\", port: 3001, channelId: \"bridge\" },\n forward,\n commandRouter: commandRouter as never,\n });\n\n await d.handleGroupAtMessage({\n id: \"c1\",\n group_openid: \"G1\",\n content: \"<@!x> /ping\",\n author: { member_openid: \"M9\", username: \"Op\", bot: false },\n });\n assert.deepEqual(handled, [\"/ping\"]);\n assert.equal(forwarded.length, 0);\n\n await d.handleGroupAtMessage({\n id: \"c2\",\n group_openid: \"G1\",\n content: \"<@!x> chat\",\n author: { member_openid: \"M9\", username: \"Op\", bot: false },\n });\n assert.equal(forwarded.length, 1);\n assert.equal(forwarded[0], \"chat\");\n});\n\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|