@zhin.js/adapter-icqq 1.0.28 → 1.0.30

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 CHANGED
@@ -1,5 +1,29 @@
1
1
  # @zhin.js/adapter-icqq
2
2
 
3
+ ## 1.0.30
4
+
5
+ ### Patch Changes
6
+
7
+ - 26d2942: fix: ai
8
+ - 6b02c41: fix: ai
9
+ - Updated dependencies [26d2942]
10
+ - Updated dependencies [6b02c41]
11
+ - @zhin.js/client@1.0.8
12
+ - @zhin.js/core@1.0.25
13
+ - zhin.js@1.0.25
14
+ - @zhin.js/console@1.0.21
15
+ - @zhin.js/http@1.0.16
16
+
17
+ ## 1.0.29
18
+
19
+ ### Patch Changes
20
+
21
+ - Updated dependencies [6108e5d]
22
+ - @zhin.js/core@1.0.24
23
+ - zhin.js@1.0.24
24
+ - @zhin.js/console@1.0.20
25
+ - @zhin.js/http@1.0.15
26
+
3
27
  ## 1.0.28
4
28
 
5
29
  ### Patch Changes
package/README.md CHANGED
@@ -11,6 +11,8 @@ Zhin.js ICQQ 适配器,基于 ICQQ 库实现的 QQ 机器人适配器,支持
11
11
  - 📁 自动数据目录管理
12
12
  - 🖼️ 支持图片、语音、视频等多媒体消息
13
13
  - 🎯 支持 @ 提及和引用回复
14
+ - 🔧 **群管理工具**:踢人、禁言、设置管理员、群名片、头衔等(AI 可调用)
15
+ - 🔒 **权限控制**:基于群角色的工具权限过滤
14
16
 
15
17
  ## 安装
16
18
 
@@ -241,6 +243,128 @@ const friendList = bot.getFriendList()
241
243
  const memberInfo = bot.getGroupMemberInfo(groupId, userId)
242
244
  ```
243
245
 
246
+ ## 🔧 群管理工具(AI 可调用)
247
+
248
+ 适配器自动注册了一系列群管理工具,这些工具可以被 AI 调用,实现智能化的群管理。
249
+
250
+ ### 工具列表
251
+
252
+ | 工具 | 所需权限 | 说明 |
253
+ |------|----------|------|
254
+ | `icqq_kick_member` | 管理员 | 踢出群成员(可选拉黑) |
255
+ | `icqq_mute_member` | 管理员 | 禁言群成员 |
256
+ | `icqq_mute_all` | 管理员 | 全员禁言 |
257
+ | `icqq_set_admin` | 群主 | 设置/取消管理员 |
258
+ | `icqq_set_card` | 管理员 | 设置群名片 |
259
+ | `icqq_set_title` | 群主 | 设置专属头衔 |
260
+ | `icqq_set_group_name` | 管理员 | 修改群名称 |
261
+ | `icqq_announce` | 管理员 | 发送群公告 |
262
+ | `icqq_poke` | 普通用户 | 戳一戳 |
263
+ | `icqq_list_members` | 普通用户 | 获取群成员列表 |
264
+ | `icqq_list_muted` | 普通用户 | 获取被禁言成员列表 |
265
+ | `icqq_set_anonymous` | 管理员 | 开启/关闭匿名聊天 |
266
+
267
+ ### 使用示例
268
+
269
+ #### 通过 AI 对话管理群
270
+
271
+ ```
272
+ 用户(群主):把 @小明 踢出群并拉黑
273
+ AI:已将 小明 踢出群并拉黑。
274
+
275
+ 用户(管理员):禁言 @捣蛋鬼 1小时
276
+ AI:已禁言 捣蛋鬼 3600 秒。
277
+
278
+ 用户(管理员):发个群公告:明天下午3点开会
279
+ AI:群公告已发送。
280
+
281
+ 用户:戳一戳 @朋友
282
+ AI:已戳了戳 朋友。
283
+ ```
284
+
285
+ #### 编程调用
286
+
287
+ ```typescript
288
+ // 获取 ICQQ Bot 实例
289
+ const icqqAdapter = app.adapters.get('icqq')
290
+ const bot = icqqAdapter?.bots.get('你的QQ号')
291
+
292
+ // 踢出成员
293
+ await bot.kickMember(groupId, userId, true) // 第三个参数为是否拉黑
294
+
295
+ // 禁言成员(单位:秒)
296
+ await bot.muteMember(groupId, userId, 600) // 禁言 10 分钟
297
+ await bot.muteMember(groupId, userId, 0) // 解除禁言
298
+
299
+ // 全员禁言
300
+ await bot.muteAll(groupId, true) // 开启
301
+ await bot.muteAll(groupId, false) // 关闭
302
+
303
+ // 设置管理员
304
+ await bot.setAdmin(groupId, userId, true) // 设为管理员
305
+ await bot.setAdmin(groupId, userId, false) // 取消管理员
306
+
307
+ // 设置群名片
308
+ await bot.setCard(groupId, userId, '新名片')
309
+
310
+ // 设置专属头衔
311
+ await bot.setTitle(groupId, userId, '大佬', -1) // -1 表示永久
312
+
313
+ // 修改群名
314
+ await bot.setGroupName(groupId, '新群名')
315
+
316
+ // 发送群公告
317
+ await bot.sendAnnounce(groupId, '公告内容')
318
+
319
+ // 戳一戳
320
+ await bot.pokeMember(groupId, userId)
321
+
322
+ // 获取群成员列表
323
+ const members = await bot.getMemberList(groupId)
324
+
325
+ // 获取被禁言成员列表
326
+ const mutedList = await bot.getMutedMembers(groupId)
327
+
328
+ // 开启/关闭匿名
329
+ await bot.setAnonymous(groupId, true)
330
+ ```
331
+
332
+ ### 发送者权限信息
333
+
334
+ 消息中的 `$sender` 包含 ICQQ 特有的权限信息:
335
+
336
+ ```typescript
337
+ interface IcqqSenderInfo {
338
+ id: string; // QQ 号
339
+ name: string; // 昵称
340
+ role?: GroupRole; // 'owner' | 'admin' | 'member'
341
+ isOwner?: boolean; // 是否为群主
342
+ isAdmin?: boolean; // 是否为管理员
343
+ card?: string; // 群名片
344
+ title?: string; // 专属头衔
345
+ }
346
+ ```
347
+
348
+ #### 在插件中检查权限
349
+
350
+ ```typescript
351
+ onGroupMessage(async (message) => {
352
+ const sender = message.$sender as IcqqSenderInfo;
353
+
354
+ if (sender.isOwner) {
355
+ console.log('这是群主的消息');
356
+ }
357
+
358
+ if (sender.isAdmin) {
359
+ console.log('这是管理员的消息');
360
+ }
361
+
362
+ if (sender.role === 'member') {
363
+ console.log('这是普通成员的消息');
364
+ }
365
+ })
366
+ ```
367
+
244
368
  ## 签名服务器
245
369
 
246
370
  为了提高登录稳定性和避免风控,建议配置签名服务器:
package/lib/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Config, Client, PrivateMessageEvent, GroupMessageEvent, Sendable } from "@icqqjs/icqq";
1
+ import { Config, Client, PrivateMessageEvent, GroupMessageEvent, Sendable, MemberInfo, GroupRole } from "@icqqjs/icqq";
2
2
  import { Bot, Adapter, Plugin, Message, SendOptions, MessageSegment, SendContent } from "zhin.js";
3
3
  import { Router } from "@zhin.js/http";
4
4
  declare module "zhin.js" {
@@ -12,6 +12,20 @@ declare module "zhin.js" {
12
12
  icqq: IcqqAdapter;
13
13
  }
14
14
  }
15
+ export interface IcqqSenderInfo {
16
+ id: string;
17
+ name: string;
18
+ /** 群角色 */
19
+ role?: GroupRole;
20
+ /** 是否为群主 */
21
+ isOwner?: boolean;
22
+ /** 是否为管理员 */
23
+ isAdmin?: boolean;
24
+ /** 群名片 */
25
+ card?: string;
26
+ /** 头衔 */
27
+ title?: string;
28
+ }
15
29
  export interface IcqqBotConfig extends Config {
16
30
  context: "icqq";
17
31
  name: `${number}`;
@@ -30,6 +44,86 @@ export declare class IcqqBot extends Client implements Bot<IcqqBotConfig, Privat
30
44
  $connect(): Promise<void>;
31
45
  $disconnect(): Promise<void>;
32
46
  $formatMessage(msg: PrivateMessageEvent | GroupMessageEvent): Message<PrivateMessageEvent | GroupMessageEvent>;
47
+ /**
48
+ * 获取发送者的详细权限信息
49
+ */
50
+ private getSenderInfo;
51
+ /**
52
+ * 踢出群成员
53
+ * @param groupId 群号
54
+ * @param userId 用户QQ号
55
+ * @param block 是否拉黑(加入黑名单)
56
+ */
57
+ kickMember(groupId: number, userId: number, block?: boolean): Promise<boolean>;
58
+ /**
59
+ * 禁言群成员
60
+ * @param groupId 群号
61
+ * @param userId 用户QQ号
62
+ * @param duration 禁言时长(秒),0 表示解除禁言
63
+ */
64
+ muteMember(groupId: number, userId: number, duration?: number): Promise<boolean>;
65
+ /**
66
+ * 全员禁言
67
+ * @param groupId 群号
68
+ * @param enable 是否开启全员禁言
69
+ */
70
+ muteAll(groupId: number, enable?: boolean): Promise<boolean>;
71
+ /**
72
+ * 设置管理员
73
+ * @param groupId 群号
74
+ * @param userId 用户QQ号
75
+ * @param enable 是否设为管理员
76
+ */
77
+ setAdmin(groupId: number, userId: number, enable?: boolean): Promise<boolean>;
78
+ /**
79
+ * 设置群名片
80
+ * @param groupId 群号
81
+ * @param userId 用户QQ号
82
+ * @param card 群名片
83
+ */
84
+ setCard(groupId: number, userId: number, card: string): Promise<boolean>;
85
+ /**
86
+ * 设置群头衔
87
+ * @param groupId 群号
88
+ * @param userId 用户QQ号
89
+ * @param title 头衔
90
+ * @param duration 持续时间(秒),-1 表示永久
91
+ */
92
+ setTitle(groupId: number, userId: number, title: string, duration?: number): Promise<boolean>;
93
+ /**
94
+ * 设置群名
95
+ * @param groupId 群号
96
+ * @param name 群名
97
+ */
98
+ setGroupName(groupId: number, name: string): Promise<boolean>;
99
+ /**
100
+ * 发送群公告
101
+ * @param groupId 群号
102
+ * @param content 公告内容
103
+ */
104
+ sendAnnounce(groupId: number, content: string): Promise<boolean>;
105
+ /**
106
+ * 戳一戳
107
+ * @param groupId 群号
108
+ * @param userId 用户QQ号
109
+ */
110
+ pokeMember(groupId: number, userId: number): Promise<boolean>;
111
+ /**
112
+ * 获取群成员列表
113
+ * @param groupId 群号
114
+ */
115
+ getMemberList(groupId: number): Promise<Map<number, MemberInfo>>;
116
+ /**
117
+ * 获取被禁言成员列表
118
+ * @param groupId 群号
119
+ */
120
+ getMutedMembers(groupId: number): Promise<any[]>;
121
+ /**
122
+ * 允许/禁止匿名
123
+ * @param groupId 群号
124
+ * @param enable 是否允许匿名
125
+ */
126
+ setAnonymous(groupId: number, enable?: boolean): Promise<boolean>;
33
127
  $recallMessage(id: string): Promise<void>;
34
128
  $sendMessage(options: SendOptions): Promise<string>;
35
129
  }
@@ -40,6 +134,15 @@ export declare namespace IcqqBot {
40
134
  declare class IcqqAdapter extends Adapter<IcqqBot> {
41
135
  constructor(plugin: Plugin);
42
136
  createBot(config: IcqqBotConfig): IcqqBot;
137
+ start(): Promise<void>;
138
+ /**
139
+ * 注册 ICQQ 平台特有的群管理工具
140
+ */
141
+ private registerIcqqTools;
142
+ /**
143
+ * 检查执行上下文中的权限
144
+ */
145
+ private checkPermission;
43
146
  }
44
147
  export {};
45
148
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,QAAQ,EAAe,MAAM,cAAc,CAAC;AAE7G,OAAO,EACL,GAAG,EAEH,OAAO,EACP,MAAM,EACN,OAAO,EACP,WAAW,EACX,cAAc,EACd,WAAW,EAEZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,MAAM,CAAC;QACf,UAAU,QAAQ;YAChB,GAAG,EAAE,GAAG,CAAC;YACT,MAAM,EAAE,MAAM,CAAC;SAChB;KACF;IAED,UAAU,QAAQ;QAChB,IAAI,EAAE,WAAW,CAAC;KACnB;CACF;AAKD,MAAM,WAAW,aAAc,SAAQ,MAAM;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,qBAAa,OAAQ,SAAQ,MAAO,YAAW,GAAG,CAAC,aAAa,EAAE,mBAAmB,GAAG,iBAAiB,CAAC;IAOrF,OAAO,EAAE,WAAW;IANvC,UAAU,EAAE,OAAO,CAAS;IAE5B,IAAI,GAAG,gBAEN;gBAEkB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa;IAQ9D,OAAO,CAAC,iBAAiB;IAMnB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BzB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAKlC,cAAc,CAAC,GAAG,EAAE,mBAAmB,GAAG,iBAAiB;IAiCrD,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;CAgB1D;AAED,yBAAiB,OAAO,CAAC;IAGvB,SAAgB,UAAU,CAAC,OAAO,EAAE,QAAQ,GAAG,cAAc,EAAE,CAW9D;IAED,SAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,QAAQ,CASzD;CACF;AAED,cAAM,WAAY,SAAQ,OAAO,CAAC,OAAO,CAAC;gBAC5B,MAAM,EAAE,MAAM;IAI1B,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;CAG1C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}