@zhin.js/adapter-icqq 5.0.2 → 6.0.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.
Files changed (76) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +32 -4
  3. package/client/LoginAssistPanel.tsx +38 -3
  4. package/dist/index.js +2 -2
  5. package/lib/adapter.d.ts +12 -4
  6. package/lib/adapter.d.ts.map +1 -1
  7. package/lib/adapter.js +14 -6
  8. package/lib/adapter.js.map +1 -1
  9. package/lib/cq-message.d.ts.map +1 -1
  10. package/lib/cq-message.js +12 -3
  11. package/lib/cq-message.js.map +1 -1
  12. package/lib/endpoint.d.ts +12 -8
  13. package/lib/endpoint.d.ts.map +1 -1
  14. package/lib/endpoint.js +135 -47
  15. package/lib/endpoint.js.map +1 -1
  16. package/lib/icqq-guild.d.ts +48 -0
  17. package/lib/icqq-guild.d.ts.map +1 -0
  18. package/lib/icqq-guild.js +115 -0
  19. package/lib/icqq-guild.js.map +1 -0
  20. package/lib/icqq-inbound.d.ts +7 -0
  21. package/lib/icqq-inbound.d.ts.map +1 -1
  22. package/lib/icqq-inbound.js +39 -6
  23. package/lib/icqq-inbound.js.map +1 -1
  24. package/lib/icqq-login-assist-bridge.d.ts +5 -0
  25. package/lib/icqq-login-assist-bridge.d.ts.map +1 -0
  26. package/lib/icqq-login-assist-bridge.js +148 -0
  27. package/lib/icqq-login-assist-bridge.js.map +1 -0
  28. package/lib/index.d.ts +0 -2
  29. package/lib/index.d.ts.map +1 -1
  30. package/lib/index.js +2 -1
  31. package/lib/index.js.map +1 -1
  32. package/lib/login-assist-routes.d.ts +7 -0
  33. package/lib/login-assist-routes.d.ts.map +1 -0
  34. package/lib/login-assist-routes.js +29 -0
  35. package/lib/login-assist-routes.js.map +1 -0
  36. package/lib/login-ipc-contract.d.ts +44 -0
  37. package/lib/login-ipc-contract.d.ts.map +1 -0
  38. package/lib/login-ipc-contract.js +35 -0
  39. package/lib/login-ipc-contract.js.map +1 -0
  40. package/lib/protocol.d.ts +32 -1
  41. package/lib/protocol.d.ts.map +1 -1
  42. package/lib/protocol.js +23 -0
  43. package/lib/protocol.js.map +1 -1
  44. package/lib/segment-mapper.d.ts +2 -0
  45. package/lib/segment-mapper.d.ts.map +1 -0
  46. package/lib/segment-mapper.js +2 -0
  47. package/lib/segment-mapper.js.map +1 -0
  48. package/lib/tools/index.d.ts +1 -1
  49. package/lib/tools/index.js +8 -8
  50. package/lib/types.d.ts +0 -44
  51. package/lib/types.d.ts.map +1 -1
  52. package/package.json +18 -18
  53. package/skills/icqq/PERMITS.md +6 -6
  54. package/src/adapter.ts +14 -6
  55. package/src/cq-message.ts +11 -3
  56. package/src/endpoint.ts +169 -52
  57. package/src/icqq-guild.ts +157 -0
  58. package/src/icqq-inbound.ts +52 -7
  59. package/src/icqq-login-assist-bridge.ts +196 -0
  60. package/src/index.ts +2 -8
  61. package/src/login-assist-routes.ts +39 -0
  62. package/src/login-ipc-contract.ts +52 -0
  63. package/src/protocol.ts +32 -1
  64. package/src/segment-mapper.ts +1 -0
  65. package/src/tools/index.ts +9 -9
  66. package/src/types.ts +0 -45
  67. package/lib/typing-indicator-example.d.ts +0 -108
  68. package/lib/typing-indicator-example.d.ts.map +0 -1
  69. package/lib/typing-indicator-example.js +0 -220
  70. package/lib/typing-indicator-example.js.map +0 -1
  71. package/lib/typing-indicator.d.ts +0 -87
  72. package/lib/typing-indicator.d.ts.map +0 -1
  73. package/lib/typing-indicator.js +0 -225
  74. package/lib/typing-indicator.js.map +0 -1
  75. package/src/typing-indicator-example.ts +0 -269
  76. package/src/typing-indicator.ts +0 -313
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sBAAsB;AACtB,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,sBAAsB;AACtB,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAwB;AACxB,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEhD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,wCAAwC;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAEhE,mBAAmB;AACnB,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsLV,CAAC"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,sBAAsB;AACtB,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,sBAAsB;AACtB,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEhD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,wCAAwC;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAEhE,mBAAmB;AACnB,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsMV,CAAC"}
package/lib/protocol.js CHANGED
@@ -3,6 +3,13 @@
3
3
  *
4
4
  * CLI 与守护进程通过 Unix Domain Socket 通信,
5
5
  * 使用 JSON + 换行符(\n)分隔的文本协议。
6
+ *
7
+ * 通信流程(@icqqjs/cli `src/daemon/protocol.ts`):
8
+ * 1. CLI 连接 Socket → auth(token)
9
+ * 2. 认证通过后发送 IpcRequest → 等待 IpcResponse
10
+ * 3. 认证通过后自动接收 icqq 事件推送(IpcEvent),断开连接自动停止
11
+ *
12
+ * 登录相关:**推送**走 IpcEvent(`system.login.*`),续传 invoke 见 `login-ipc-contract.ts`。
6
13
  */
7
14
  /** 从 IPC 入站 payload 解析可用于引用/撤回的消息 ID */
8
15
  export { resolveIcqqInboundMessageId } from "./icqq-inbound.js";
@@ -11,6 +18,7 @@ export { resolveIcqqInboundMessageId } from "./icqq-inbound.js";
11
18
  */
12
19
  export const Actions = {
13
20
  PING: "ping",
21
+ LOGOUT: "logout",
14
22
  // ── 列表查询 ──
15
23
  LIST_FRIENDS: "list_friends",
16
24
  LIST_GROUPS: "list_groups",
@@ -22,7 +30,10 @@ export const Actions = {
22
30
  GET_GROUP_INFO: "get_group_info",
23
31
  GET_GROUP_MEMBER_INFO: "get_group_member_info",
24
32
  GET_STRANGER_INFO: "get_stranger_info",
33
+ LIST_STRANGERS: "list_strangers",
34
+ GET_PROFILE: "get_profile",
25
35
  GET_STATUS: "get_status",
36
+ GET_ONLINE_STATUS: "get_online_status",
26
37
  GET_SELF_PROFILE: "get_self_profile",
27
38
  // ── 消息发送 ──
28
39
  SEND_PRIVATE_MSG: "send_private_msg",
@@ -32,6 +43,8 @@ export const Actions = {
32
43
  GET_MSG: "get_msg",
33
44
  HISTORY_PRIVATE: "history_private",
34
45
  HISTORY_GROUP: "history_group",
46
+ HISTORY_BY_MSG_ID: "history_by_msg_id",
47
+ SEND_LONG_MSG: "send_long_msg",
35
48
  MARK_READ: "mark_read",
36
49
  DELETE_MSG: "delete_msg",
37
50
  // ── 个人设置 ──
@@ -107,6 +120,9 @@ export const Actions = {
107
120
  SEND_PRIVATE_FILE: "send_private_file",
108
121
  SEND_GROUP_FILE: "send_group_file",
109
122
  FRIEND_RECALL_FILE: "friend_recall_file",
123
+ FRIEND_FORWARD_FILE: "friend_forward_file",
124
+ SEARCH_SAME_GROUP: "search_same_group",
125
+ SEND_CONTACT_SHARE: "send_contact_share",
110
126
  GFS_UPLOAD: "gfs_upload",
111
127
  // ── 群消息表态 ──
112
128
  GROUP_SET_REACTION: "group_set_reaction",
@@ -118,6 +134,7 @@ export const Actions = {
118
134
  GUILD_LIST: "guild_list",
119
135
  GUILD_INFO: "guild_info",
120
136
  GUILD_CHANNELS: "guild_channels",
137
+ GET_CHANNEL_INFO: "get_channel_info",
121
138
  GUILD_MEMBERS: "guild_members",
122
139
  GUILD_SEND_MSG: "guild_send_msg",
123
140
  GUILD_RECALL_MSG: "guild_recall_msg",
@@ -141,7 +158,13 @@ export const Actions = {
141
158
  GET_CLIENT_KEY: "get_client_key",
142
159
  GET_PSKEY: "get_pskey",
143
160
  UID2UIN: "uid2uin",
161
+ UID2UINS: "uid2uins",
144
162
  UIN2UID: "uin2uid",
163
+ UIN2UIDS: "uin2uids",
164
+ GET_COOKIES: "get_cookies",
165
+ GET_CSRF_TOKEN: "get_csrf_token",
166
+ REFRESH_NT_PIC_RKEY: "refresh_nt_pic_rkey",
167
+ SEND_DISCUSS_MSG: "send_discuss_msg",
145
168
  // ── 视频/加好友设置 ──
146
169
  GET_VIDEO_URL: "get_video_url",
147
170
  GET_ADD_FRIEND_SETTING: "get_add_friend_setting",
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { toCanonicalSegments, fromCanonicalSegments } from 'zhin.js';
2
+ //# sourceMappingURL=segment-mapper.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,2 @@
1
+ export { toCanonicalSegments, fromCanonicalSegments } from 'zhin.js';
2
+ //# sourceMappingURL=segment-mapper.js.map
@@ -0,0 +1 @@
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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * ICQQ 平台特有工具注册 — 通过 IPC 调用守护进程 Actions
3
3
  *
4
- * 通用群管理工具由 createGroupManagementTools() 自动生成;
4
+ * 通用群管理工具由 createSceneManagementTools() 自动生成;
5
5
  * 本模块注册 ICQQ 独有的扩展工具。
6
6
  */
7
7
  import type { ToolFeature } from "zhin.js";
@@ -1,10 +1,10 @@
1
- import { createGroupManagementTools } from "zhin.js";
1
+ import { createSceneManagementTools } from "zhin.js";
2
2
  import { Actions } from "../protocol.js";
3
3
  export function registerTools(toolService, icqq, pluginName) {
4
4
  const disposers = [];
5
5
  // ── 通用群管工具 ───────────────────────────────────────────────────
6
- const groupTools = createGroupManagementTools(icqq, "icqq");
7
- disposers.push(...groupTools.map((t) => toolService.addTool(t, pluginName)));
6
+ const sceneTools = createSceneManagementTools(icqq, "icqq");
7
+ disposers.push(...sceneTools.map((t) => toolService.addTool(t, pluginName)));
8
8
  // ── 设置头衔 ───────────────────────────────────────────────────────
9
9
  disposers.push(toolService.addTool({
10
10
  name: "icqq_set_title",
@@ -22,7 +22,7 @@ export function registerTools(toolService, icqq, pluginName) {
22
22
  },
23
23
  platforms: ["icqq"],
24
24
  tags: ["icqq"],
25
- permissions: ["platform(icqq,group_owner)"],
25
+ permissions: ["platform(icqq,scene_owner)"],
26
26
  execute: async (args) => {
27
27
  const endpoint = icqq.endpoints.get(args.endpoint_id);
28
28
  if (!endpoint)
@@ -51,7 +51,7 @@ export function registerTools(toolService, icqq, pluginName) {
51
51
  },
52
52
  platforms: ["icqq"],
53
53
  tags: ["icqq"],
54
- permissions: ["platform(icqq,group_admin)"],
54
+ permissions: ["platform(icqq,scene_admin)"],
55
55
  execute: async (args) => {
56
56
  const endpoint = icqq.endpoints.get(args.endpoint_id);
57
57
  if (!endpoint)
@@ -103,7 +103,7 @@ export function registerTools(toolService, icqq, pluginName) {
103
103
  },
104
104
  platforms: ["icqq"],
105
105
  tags: ["icqq"],
106
- permissions: ["platform(icqq,group_admin)"],
106
+ permissions: ["platform(icqq,scene_admin)"],
107
107
  execute: async (args) => {
108
108
  const endpoint = icqq.endpoints.get(args.endpoint_id);
109
109
  if (!endpoint)
@@ -158,7 +158,7 @@ export function registerTools(toolService, icqq, pluginName) {
158
158
  },
159
159
  platforms: ["icqq"],
160
160
  tags: ["icqq"],
161
- permissions: ["platform(icqq,group_owner)"],
161
+ permissions: ["platform(icqq,scene_owner)"],
162
162
  execute: async (args) => {
163
163
  const endpoint = icqq.endpoints.get(args.endpoint_id);
164
164
  if (!endpoint)
@@ -324,7 +324,7 @@ export function registerTools(toolService, icqq, pluginName) {
324
324
  },
325
325
  platforms: ["icqq"],
326
326
  tags: ["icqq"],
327
- permissions: ["platform(icqq,group_admin)"],
327
+ permissions: ["platform(icqq,scene_admin)"],
328
328
  execute: async (args) => {
329
329
  const endpoint = icqq.endpoints.get(args.endpoint_id);
330
330
  if (!endpoint)
package/lib/types.d.ts CHANGED
@@ -14,45 +14,6 @@ export interface IcqqSenderInfo {
14
14
  card?: string;
15
15
  title?: string;
16
16
  }
17
- /**
18
- * Typing Indicator 配置
19
- */
20
- export interface TypingIndicatorConfig {
21
- /** 是否启用(默认 true) */
22
- enabled?: boolean;
23
- /** 默认表情(默认 '⏳') */
24
- defaultEmoji?: string;
25
- /** 是否在完成后自动移除(默认 true) */
26
- autoRemove?: boolean;
27
- /** 自动移除延迟,毫秒(默认 5000) */
28
- removeDelay?: number;
29
- /** 私聊配置 */
30
- privateConfig?: {
31
- /** 提示类型 */
32
- type: 'message' | 'reaction';
33
- /** 消息内容(type='message' 时使用) */
34
- message?: string;
35
- /** 表情符号(type='reaction' 时使用) */
36
- emoji?: string;
37
- /** 是否自动移除 */
38
- autoRemove?: boolean;
39
- /** 自动移除延迟 */
40
- removeDelay?: number;
41
- };
42
- /** 群聊配置 */
43
- groupConfig?: {
44
- /** 提示类型 */
45
- type: 'message' | 'reaction';
46
- /** 消息内容(type='message' 时使用) */
47
- message?: string;
48
- /** 表情符号(type='reaction' 时使用) */
49
- emoji?: string;
50
- /** 是否自动移除 */
51
- autoRemove?: boolean;
52
- /** 自动移除延迟 */
53
- removeDelay?: number;
54
- };
55
- }
56
17
  /**
57
18
  * Endpoint 配置:支持本地 IPC 和远程 RPC 两种连接模式。
58
19
  *
@@ -77,11 +38,6 @@ export interface IcqqEndpointConfig {
77
38
  * 默认 true;设为 false 则断开后仅将 `$connected` 置为 false,需手动重连。
78
39
  */
79
40
  autoReconnect?: boolean;
80
- /**
81
- * Typing Indicator 配置
82
- * 用于在 AI 处理消息时提示用户正在处理中
83
- */
84
- typingIndicator?: TypingIndicatorConfig;
85
41
  /**
86
42
  * 出站图片/语音/视频:file=本机临时文件路径(需与 icqq 守护进程同机可读);
87
43
  * base64=经 CQ `base64://` 交给守护进程解码(Zhin 与 icqq 异进程/异机时用,配置 rpc 时默认 base64)。
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAClB,+BAA+B;IAC/B,GAAG,CAAC,EAAE;QACJ,aAAa;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW;QACX,IAAI,EAAE,MAAM,CAAC;QACb,4CAA4C;QAC5C,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CACnC;AAED,kBAAkB;AAClB,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,iBAAiB;AACjB,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,mBAAmB;AACnB,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhin.js/adapter-icqq",
3
- "version": "5.0.2",
3
+ "version": "6.0.1",
4
4
  "description": "Zhin.js adapter for ICQQ (QQ Bot)",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -48,26 +48,26 @@
48
48
  "@radix-ui/themes": "^3.2.1",
49
49
  "@types/react": "^19.2.17",
50
50
  "@types/react-dom": "^19.2.3",
51
- "lucide-react": "^1.17.0",
52
- "radix-ui": "^1.5.0",
51
+ "lucide-react": "^1.22.0",
52
+ "radix-ui": "^1.6.2",
53
53
  "typescript": "^6.0.3",
54
- "@zhin.js/agent": "0.3.1",
55
- "@zhin.js/cli": "1.0.90",
56
- "@zhin.js/client": "2.0.3",
57
- "@zhin.js/contract": "1.0.1",
58
- "@zhin.js/core": "1.3.1",
59
- "@zhin.js/host-api": "2.0.2",
60
- "@zhin.js/host-router": "2.0.0",
61
- "zhin.js": "4.0.1"
54
+ "@zhin.js/agent": "1.0.2",
55
+ "@zhin.js/cli": "1.0.92",
56
+ "@zhin.js/client": "2.0.4",
57
+ "@zhin.js/contract": "1.0.2",
58
+ "@zhin.js/core": "1.3.3",
59
+ "@zhin.js/host-api": "2.0.4",
60
+ "@zhin.js/host-router": "2.0.2",
61
+ "zhin.js": "4.1.1"
62
62
  },
63
63
  "peerDependencies": {
64
- "@zhin.js/agent": "0.3.1",
65
- "@zhin.js/client": "2.0.3",
66
- "@zhin.js/host-api": "2.0.2",
67
- "@zhin.js/contract": "1.0.1",
68
- "@zhin.js/core": "1.3.1",
69
- "@zhin.js/host-router": "2.0.0",
70
- "zhin.js": "4.0.1"
64
+ "@zhin.js/agent": "1.0.2",
65
+ "@zhin.js/client": "2.0.4",
66
+ "@zhin.js/host-api": "2.0.4",
67
+ "@zhin.js/contract": "1.0.2",
68
+ "@zhin.js/core": "1.3.3",
69
+ "@zhin.js/host-router": "2.0.2",
70
+ "zhin.js": "4.1.1"
71
71
  },
72
72
  "peerDependenciesMeta": {
73
73
  "@zhin.js/agent": {
@@ -8,15 +8,15 @@
8
8
 
9
9
  | `platform(icqq,…)` | 含义 |
10
10
  |--------------------|------|
11
- | `group_owner` | 群主 |
12
- | `group_admin` | 群管理员(含群主) |
11
+ | `scene_owner` | 群主 |
12
+ | `scene_admin` | 群管理员(含群主) |
13
13
 
14
14
  ## 扩展工具示例
15
15
 
16
16
  | 工具 | permit |
17
17
  |------|--------|
18
- | `icqq_set_title` | `group_owner` |
19
- | `icqq_announce` / `icqq_essence` / `icqq_list_muted` | `group_admin` |
20
- | `icqq_set_anonymous` | `group_owner` |
18
+ | `icqq_set_title` | `scene_owner` |
19
+ | `icqq_announce` / `icqq_essence` / `icqq_list_muted` | `scene_admin` |
20
+ | `icqq_set_anonymous` | `scene_owner` |
21
21
 
22
- 工厂群管工具使用默认 `group_admin` / `group_owner`。
22
+ 工厂群管工具使用默认 `scene_admin` / `scene_owner`。
package/src/adapter.ts CHANGED
@@ -1,13 +1,21 @@
1
1
  /**
2
2
  * ICQQ 适配器 — 通过 @icqqjs/cli 守护进程 IPC 管理 Endpoint 实例
3
3
  */
4
- import { formatCompact, Adapter, Plugin } from 'zhin.js';
4
+ import { formatCompact, Adapter, Plugin, OUTBOUND_RICH_SEGMENT_POLICY_IM_FULL, ONEBOT_KEYBOARD_AI_OUTBOUND_EXTENSION } from 'zhin.js';
5
5
  import { IcqqEndpoint } from "./endpoint.js";
6
6
  import type { IcqqEndpointConfig, IpcMemberInfo } from "./types.js";
7
7
  import { Actions } from "./protocol.js";
8
8
 
9
9
  export class IcqqAdapter extends Adapter<IcqqEndpoint> {
10
10
  static override readonly capabilities = ['inbound', 'outbound'] as const;
11
+ static override outboundRichSegmentPolicy = OUTBOUND_RICH_SEGMENT_POLICY_IM_FULL;
12
+ static override interactivePolicy = 'text' as const;
13
+ static override aiOutboundCapabilities = {
14
+ mentions: true,
15
+ richSegments: ['qrcode', 'html', 'markdown', 'tts'],
16
+ interactive: 'text' as const,
17
+ };
18
+ static override aiOutboundExtensions = [ONEBOT_KEYBOARD_AI_OUTBOUND_EXTENSION];
11
19
 
12
20
  constructor(plugin: Plugin) {
13
21
  super(plugin, "icqq", []);
@@ -36,7 +44,7 @@ export class IcqqAdapter extends Adapter<IcqqEndpoint> {
36
44
  this.logger.debug(formatCompact({ stop: true }));
37
45
  }
38
46
 
39
- // ── IGroupManagement 标准群管方法(通过 IPC) ─────────────────────
47
+ // ── ISceneManagement 标准群管方法(通过 IPC) ─────────────────────
40
48
 
41
49
  private getEndpoint(endpointId: string): IcqqEndpoint {
42
50
  const endpoint = this.endpoints.get(endpointId);
@@ -44,7 +52,7 @@ export class IcqqAdapter extends Adapter<IcqqEndpoint> {
44
52
  return endpoint;
45
53
  }
46
54
 
47
- async kickMember(endpointId: string, sceneId: string, userId: string) {
55
+ async removeMember(endpointId: string, sceneId: string, userId: string) {
48
56
  const endpoint = this.getEndpoint(endpointId);
49
57
  const resp = await endpoint.ipc.request(Actions.GROUP_KICK, {
50
58
  group_id: Number(sceneId),
@@ -71,7 +79,7 @@ export class IcqqAdapter extends Adapter<IcqqEndpoint> {
71
79
  return true;
72
80
  }
73
81
 
74
- async muteAll(endpointId: string, sceneId: string, enable = true) {
82
+ async setSceneMuted(endpointId: string, sceneId: string, enable = true) {
75
83
  const endpoint = this.getEndpoint(endpointId);
76
84
  const resp = await endpoint.ipc.request(Actions.GROUP_MUTE_ALL, {
77
85
  group_id: Number(sceneId),
@@ -81,7 +89,7 @@ export class IcqqAdapter extends Adapter<IcqqEndpoint> {
81
89
  return true;
82
90
  }
83
91
 
84
- async setAdmin(
92
+ async setModerator(
85
93
  endpointId: string,
86
94
  sceneId: string,
87
95
  userId: string,
@@ -113,7 +121,7 @@ export class IcqqAdapter extends Adapter<IcqqEndpoint> {
113
121
  return true;
114
122
  }
115
123
 
116
- async setGroupName(endpointId: string, sceneId: string, name: string) {
124
+ async renameScene(endpointId: string, sceneId: string, name: string) {
117
125
  const endpoint = this.getEndpoint(endpointId);
118
126
  const resp = await endpoint.ipc.request(Actions.SET_GROUP_NAME, {
119
127
  group_id: Number(sceneId),
package/src/cq-message.ts CHANGED
@@ -35,7 +35,7 @@ function pushCqSegment(segments: MessageSegment[], type: string, arg: string): v
35
35
  segments.push({ type: "video", data: { file: arg } });
36
36
  break;
37
37
  case "reply":
38
- segments.push({ type: "reply", data: { id: arg } });
38
+ segments.push({ type: "reply", data: { message_id: arg } });
39
39
  break;
40
40
  default:
41
41
  segments.push({ type, data: { text: `[${type}:${arg}]` } });
@@ -98,6 +98,11 @@ export function toCqString(content: SendContent): string {
98
98
  case "face":
99
99
  return `[face:${data.id}]`;
100
100
  case "image": {
101
+ const media = data.media as { kind?: string; value?: string } | undefined;
102
+ if (media?.value) {
103
+ if (media.kind === "base64") return `[image:base64://${media.value}]`;
104
+ return `[image:${media.value}]`;
105
+ }
101
106
  const b64 =
102
107
  typeof data.base64 === "string"
103
108
  ? data.base64
@@ -108,7 +113,10 @@ export function toCqString(content: SendContent): string {
108
113
  return `[image:${data.file || data.url || data.src}]`;
109
114
  }
110
115
  case "at":
111
- return `[at:${data.qq ?? data.id}]`;
116
+ case "mention": {
117
+ const target = data.target ?? data.qq ?? data.id ?? data.user_id;
118
+ return `[at:${target}]`;
119
+ }
112
120
  case "dice":
113
121
  return "[dice]";
114
122
  case "rps":
@@ -130,7 +138,7 @@ export function toCqString(content: SendContent): string {
130
138
  return `[video:${data.file || data.url}]`;
131
139
  }
132
140
  case "reply":
133
- return `[reply:${data.id}]`;
141
+ return `[reply:${data.message_id ?? data.id}]`;
134
142
  default:
135
143
  return segment.toString(seg);
136
144
  }