@zhin.js/adapter-qq 5.0.2 → 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.
Files changed (116) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +51 -417
  3. package/adapters/qq.ts +45 -0
  4. package/agent/tools/add_role.ts +2 -2
  5. package/agent/tools/channel_info.ts +2 -2
  6. package/agent/tools/create_role.ts +2 -2
  7. package/agent/tools/list_channels.ts +2 -2
  8. package/agent/tools/list_guilds.ts +2 -2
  9. package/agent/tools/list_roles.ts +2 -2
  10. package/agent/tools/member_detail.ts +2 -2
  11. package/agent/tools/remove_role.ts +2 -2
  12. package/lib/endpoint.d.ts +69 -0
  13. package/lib/endpoint.js +315 -0
  14. package/lib/index.d.ts +6 -0
  15. package/lib/index.js +6 -0
  16. package/lib/platform-permit.d.ts +16 -0
  17. package/lib/{src/platform-permit.js → platform-permit.js} +1 -2
  18. package/lib/protocol.d.ts +96 -0
  19. package/lib/protocol.js +129 -0
  20. package/lib/qq-agent-deps.d.ts +21 -0
  21. package/lib/qq-agent-deps.js +30 -0
  22. package/lib/webhook.d.ts +18 -0
  23. package/lib/webhook.js +100 -0
  24. package/lib/ws.d.ts +24 -0
  25. package/lib/ws.js +118 -0
  26. package/package.json +44 -40
  27. package/plugin.ts +13 -0
  28. package/schema.json +51 -0
  29. package/src/endpoint.ts +314 -600
  30. package/src/index.ts +56 -186
  31. package/src/platform-permit.ts +1 -1
  32. package/src/protocol.ts +229 -0
  33. package/src/qq-agent-deps.ts +49 -12
  34. package/src/webhook.ts +127 -0
  35. package/src/ws.ts +172 -0
  36. package/client/Dashboard.tsx +0 -230
  37. package/client/index.tsx +0 -11
  38. package/client/tsconfig.json +0 -7
  39. package/client/utils/api.ts +0 -30
  40. package/dist/index.js +0 -30
  41. package/lib/agent/tools/add_role.js +0 -23
  42. package/lib/agent/tools/add_role.js.map +0 -1
  43. package/lib/agent/tools/channel_info.js +0 -19
  44. package/lib/agent/tools/channel_info.js.map +0 -1
  45. package/lib/agent/tools/create_role.js +0 -22
  46. package/lib/agent/tools/create_role.js.map +0 -1
  47. package/lib/agent/tools/list_channels.js +0 -20
  48. package/lib/agent/tools/list_channels.js.map +0 -1
  49. package/lib/agent/tools/list_guilds.js +0 -17
  50. package/lib/agent/tools/list_guilds.js.map +0 -1
  51. package/lib/agent/tools/list_roles.js +0 -20
  52. package/lib/agent/tools/list_roles.js.map +0 -1
  53. package/lib/agent/tools/member_detail.js +0 -20
  54. package/lib/agent/tools/member_detail.js.map +0 -1
  55. package/lib/agent/tools/remove_role.js +0 -23
  56. package/lib/agent/tools/remove_role.js.map +0 -1
  57. package/lib/package.json +0 -105
  58. package/lib/src/adapter.js +0 -81
  59. package/lib/src/adapter.js.map +0 -1
  60. package/lib/src/endpoint.js +0 -600
  61. package/lib/src/endpoint.js.map +0 -1
  62. package/lib/src/gateway-config.js +0 -32
  63. package/lib/src/gateway-config.js.map +0 -1
  64. package/lib/src/group-at-normalize.js +0 -68
  65. package/lib/src/group-at-normalize.js.map +0 -1
  66. package/lib/src/inbound-action.js +0 -57
  67. package/lib/src/inbound-action.js.map +0 -1
  68. package/lib/src/inbound-normalize.js +0 -47
  69. package/lib/src/inbound-normalize.js.map +0 -1
  70. package/lib/src/index.js +0 -194
  71. package/lib/src/index.js.map +0 -1
  72. package/lib/src/mention-enrich.js +0 -52
  73. package/lib/src/mention-enrich.js.map +0 -1
  74. package/lib/src/outbound-keyboard.js +0 -100
  75. package/lib/src/outbound-keyboard.js.map +0 -1
  76. package/lib/src/outbound-markdown.js +0 -189
  77. package/lib/src/outbound-markdown.js.map +0 -1
  78. package/lib/src/outbound-media.js +0 -51
  79. package/lib/src/outbound-media.js.map +0 -1
  80. package/lib/src/outbound-mixed-media.js +0 -78
  81. package/lib/src/outbound-mixed-media.js.map +0 -1
  82. package/lib/src/platform-permit.js.map +0 -1
  83. package/lib/src/qq-agent-deps.js +0 -10
  84. package/lib/src/qq-agent-deps.js.map +0 -1
  85. package/lib/src/qq-bind-api.js +0 -90
  86. package/lib/src/qq-bind-api.js.map +0 -1
  87. package/lib/src/qq-bind-flow.js +0 -86
  88. package/lib/src/qq-bind-flow.js.map +0 -1
  89. package/lib/src/qq-bind-persist.js +0 -52
  90. package/lib/src/qq-bind-persist.js.map +0 -1
  91. package/lib/src/qq-endpoint-manager.js +0 -159
  92. package/lib/src/qq-endpoint-manager.js.map +0 -1
  93. package/lib/src/sdk-version.js +0 -19
  94. package/lib/src/sdk-version.js.map +0 -1
  95. package/lib/src/segment-mapper.js +0 -2
  96. package/lib/src/segment-mapper.js.map +0 -1
  97. package/lib/src/types.js +0 -2
  98. package/lib/src/types.js.map +0 -1
  99. package/plugin.yml +0 -3
  100. package/src/adapter.ts +0 -97
  101. package/src/gateway-config.ts +0 -48
  102. package/src/group-at-normalize.ts +0 -75
  103. package/src/inbound-action.ts +0 -87
  104. package/src/inbound-normalize.ts +0 -57
  105. package/src/mention-enrich.ts +0 -71
  106. package/src/outbound-keyboard.ts +0 -117
  107. package/src/outbound-markdown.ts +0 -212
  108. package/src/outbound-media.ts +0 -58
  109. package/src/outbound-mixed-media.ts +0 -101
  110. package/src/qq-bind-api.ts +0 -145
  111. package/src/qq-bind-flow.ts +0 -127
  112. package/src/qq-bind-persist.ts +0 -71
  113. package/src/qq-endpoint-manager.ts +0 -199
  114. package/src/sdk-version.ts +0 -21
  115. package/src/segment-mapper.ts +0 -1
  116. package/src/types.ts +0 -52
@@ -1,20 +0,0 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
2
- import { z } from 'zod';
3
- import { platformPermit } from '../../src/platform-permit.js';
4
- import { getQqAgentDeps } from '../../src/qq-agent-deps.js';
5
- export default defineTool({
6
- description: '获取 QQ 频道角色列表',
7
- inputSchema: z.object({
8
- endpoint_id: z.string().describe('Endpoint 名称'),
9
- guild_id: z.string().describe('频道 ID'),
10
- }),
11
- platforms: ['qq'],
12
- tags: ['qq'],
13
- permissions: [platformPermit('manage_roles')],
14
- async execute({ endpoint_id, guild_id }) {
15
- const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
16
- const roles = await endpoint.getGuildRoles(guild_id);
17
- return { roles, count: roles.length };
18
- },
19
- });
20
- //# sourceMappingURL=list_roles.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list_roles.js","sourceRoot":"","sources":["../../../agent/tools/list_roles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAA4C;IACnE,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACvC,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAA8C;QACjF,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACrD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IACxC,CAAC;CACF,CAAC,CAAC"}
@@ -1,20 +0,0 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
2
- import { z } from 'zod';
3
- import { platformPermit } from '../../src/platform-permit.js';
4
- import { getQqAgentDeps } from '../../src/qq-agent-deps.js';
5
- export default defineTool({
6
- description: '获取 QQ 频道中指定成员的详细信息',
7
- inputSchema: z.object({
8
- endpoint_id: z.string().describe('Endpoint 名称'),
9
- guild_id: z.string().describe('频道 ID'),
10
- user_id: z.string().describe('用户 ID'),
11
- }),
12
- platforms: ['qq'],
13
- tags: ['qq'],
14
- permissions: [platformPermit('guild_admin')],
15
- async execute({ endpoint_id, guild_id, user_id }) {
16
- const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
17
- return endpoint.getGuildMember(guild_id, user_id);
18
- },
19
- });
20
- //# sourceMappingURL=member_detail.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"member_detail.js","sourceRoot":"","sources":["../../../agent/tools/member_detail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAA6D;IACpF,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACtC,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAC5C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAA+D;QAC3G,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,OAAO,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC"}
@@ -1,23 +0,0 @@
1
- import { defineTool } from '@zhin.js/agent/tools';
2
- import { z } from 'zod';
3
- import { platformPermit } from '../../src/platform-permit.js';
4
- import { getQqAgentDeps } from '../../src/qq-agent-deps.js';
5
- export default defineTool({
6
- description: '移除成员的 QQ 频道角色',
7
- inputSchema: z.object({
8
- endpoint_id: z.string().describe('Endpoint 名称'),
9
- guild_id: z.string().describe('频道 ID'),
10
- channel_id: z.string().describe('子频道 ID'),
11
- user_id: z.string().describe('用户 ID'),
12
- role_id: z.string().describe('角色 ID'),
13
- }),
14
- platforms: ['qq'],
15
- tags: ['qq'],
16
- permissions: [platformPermit('manage_roles')],
17
- async execute({ endpoint_id, guild_id, channel_id, user_id, role_id }) {
18
- const endpoint = getQqAgentDeps().getEndpoint(endpoint_id);
19
- const success = await endpoint.removeMemberRole(guild_id, channel_id, user_id, role_id);
20
- return { success, message: success ? '已移除成员的角色' : '操作失败' };
21
- },
22
- });
23
- //# sourceMappingURL=remove_role.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remove_role.js","sourceRoot":"","sources":["../../../agent/tools/remove_role.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,eAAe,UAAU,CAAkG;IACzH,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;KACtC,CAAC;IACF,SAAS,EAAE,CAAC,IAAI,CAAC;IACjB,IAAI,EAAE,CAAC,IAAI,CAAC;IACZ,WAAW,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAoG;QACrK,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACxF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7D,CAAC;CACF,CAAC,CAAC"}
package/lib/package.json DELETED
@@ -1,105 +0,0 @@
1
- {
2
- "name": "@zhin.js/adapter-qq",
3
- "version": "5.0.2",
4
- "description": "Zhin.js adapter for QQ Official Bot",
5
- "type": "module",
6
- "main": "./lib/index.js",
7
- "types": "./lib/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./lib/index.d.ts",
11
- "development": "./src/index.ts",
12
- "import": "./lib/index.js"
13
- }
14
- },
15
- "keywords": [
16
- "zhin",
17
- "zhin.js",
18
- "bot",
19
- "adapter",
20
- "qq",
21
- "tencent",
22
- "official",
23
- "chatbot"
24
- ],
25
- "author": {
26
- "name": "lc-cn",
27
- "email": "admin@liucl.cn",
28
- "url": "https://github.com/lc-cn"
29
- },
30
- "license": "MIT",
31
- "repository": {
32
- "url": "git+https://github.com/zhinjs/zhin.git",
33
- "type": "git",
34
- "directory": "plugins/adapters/qq"
35
- },
36
- "scripts": {
37
- "build": "zhin build",
38
- "clean": "rimraf lib dist",
39
- "build:node": "tsc",
40
- "prepublishOnly": "npm run build"
41
- },
42
- "dependencies": {
43
- "qq-official-bot": "^1.2.3"
44
- },
45
- "devDependencies": {
46
- "@types/react": "^19.2.17",
47
- "@types/react-dom": "^19.2.3",
48
- "@zhin.js/cli": "workspace:*",
49
- "@zhin.js/client": "workspace:*",
50
- "@zhin.js/contract": "workspace:*",
51
- "@zhin.js/host-api": "workspace:*",
52
- "@zhin.js/host-router": "workspace:*",
53
- "@zhin.js/logger": "workspace:*",
54
- "lucide-react": "^1.22.0",
55
- "typescript": "^6.0.3",
56
- "zhin.js": "workspace:*",
57
- "@zhin.js/agent": "workspace:*",
58
- "zod": "^4.4.3"
59
- },
60
- "peerDependencies": {
61
- "@zhin.js/client": "workspace:*",
62
- "@zhin.js/host-api": "workspace:*",
63
- "@zhin.js/contract": "workspace:*",
64
- "@zhin.js/host-router": "workspace:*",
65
- "@zhin.js/logger": "workspace:*",
66
- "zhin.js": "workspace:*",
67
- "@zhin.js/agent": "workspace:*",
68
- "zod": "^4.0.0"
69
- },
70
- "peerDependenciesMeta": {
71
- "@zhin.js/agent": {
72
- "optional": true
73
- },
74
- "@zhin.js/client": {
75
- "optional": true
76
- },
77
- "@zhin.js/host-router": {
78
- "optional": true
79
- },
80
- "@zhin.js/host-api": {
81
- "optional": true
82
- },
83
- "zod": {
84
- "optional": true
85
- }
86
- },
87
- "files": [
88
- "src",
89
- "lib",
90
- "client",
91
- "dist",
92
- "agent",
93
- "plugin.yml",
94
- "README.md",
95
- "node",
96
- "CHANGELOG.md"
97
- ],
98
- "publishConfig": {
99
- "access": "public",
100
- "registry": "https://registry.npmjs.org"
101
- },
102
- "engines": {
103
- "node": "^20.19.0 || >=22.12.0"
104
- }
105
- }
@@ -1,81 +0,0 @@
1
- /**
2
- * QQ 官方适配器
3
- */
4
- import { Adapter, QQ_AI_OUTBOUND_EXTENSIONS } from 'zhin.js';
5
- import { QQEndpoint } from "./endpoint.js";
6
- import { QqEndpointManager } from "./qq-endpoint-manager.js";
7
- export class QQAdapter extends Adapter {
8
- static capabilities = ['inbound', 'outbound'];
9
- static outboundRichSegmentPolicy = {
10
- qrcode: 'image',
11
- html: 'image',
12
- markdown: 'origin',
13
- };
14
- static interactivePolicy = 'native';
15
- static aiOutboundCapabilities = {
16
- mentions: true,
17
- richSegments: ['qrcode', 'html', 'markdown', 'tts'],
18
- interactive: 'native',
19
- };
20
- static aiOutboundExtensions = QQ_AI_OUTBOUND_EXTENSIONS;
21
- #router;
22
- #endpointManager;
23
- constructor(plugin, router) {
24
- super(plugin, "qq", []);
25
- this.#router = router;
26
- }
27
- getRouter() {
28
- return this.#router;
29
- }
30
- createEndpoint(config) {
31
- return new QQEndpoint(this, config);
32
- }
33
- getEndpointManager() {
34
- if (!this.#endpointManager) {
35
- this.#endpointManager = new QqEndpointManager(this);
36
- }
37
- return this.#endpointManager;
38
- }
39
- // ── ISceneManagement 标准群管方法 ──────────────────────────────────
40
- async removeMember(endpointId, sceneId, userId) {
41
- const endpoint = this.endpoints.get(endpointId);
42
- if (!endpoint)
43
- throw new Error(`Endpoint ${endpointId} 不存在`);
44
- return endpoint.removeGuildMember(sceneId, userId, false);
45
- }
46
- async muteMember(endpointId, sceneId, userId, duration = 600) {
47
- const endpoint = this.endpoints.get(endpointId);
48
- if (!endpoint)
49
- throw new Error(`Endpoint ${endpointId} 不存在`);
50
- return endpoint.muteMembers(sceneId, [userId], duration);
51
- }
52
- async setSceneMuted(endpointId, sceneId, enable = true) {
53
- const endpoint = this.endpoints.get(endpointId);
54
- if (!endpoint)
55
- throw new Error(`Endpoint ${endpointId} 不存在`);
56
- return endpoint.muteAll(sceneId, enable ? 600 : 0);
57
- }
58
- async listMembers(endpointId, sceneId) {
59
- const endpoint = this.endpoints.get(endpointId);
60
- if (!endpoint)
61
- throw new Error(`Endpoint ${endpointId} 不存在`);
62
- return endpoint.getGuildMembers(sceneId);
63
- }
64
- async getSceneInfo(endpointId, sceneId) {
65
- const endpoint = this.endpoints.get(endpointId);
66
- if (!endpoint)
67
- throw new Error(`Endpoint ${endpointId} 不存在`);
68
- return endpoint.getGuildInfo(sceneId);
69
- }
70
- // ── 生命周期 ───────────────────────────────────────────────────────
71
- async start() {
72
- if (!this.#router) {
73
- this.#router = this.plugin.inject("router");
74
- }
75
- this.plugin.useContext("router", (router) => {
76
- this.#router = router;
77
- });
78
- await super.start();
79
- }
80
- }
81
- //# sourceMappingURL=adapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"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"}