@zhin.js/adapter-lark 1.0.97 → 1.1.2

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 (80) hide show
  1. package/CHANGELOG.md +729 -3
  2. package/PERMITS.md +22 -0
  3. package/README.md +69 -83
  4. package/adapters/lark/index.js +36 -0
  5. package/adapters/lark/index.ts +41 -0
  6. package/agents/lark/agent.json +20 -0
  7. package/agents/lark/boundaries.md +3 -0
  8. package/agents/lark/conventions.md +3 -0
  9. package/agents/lark/skills/lark/SKILL.md +22 -0
  10. package/agents/lark/skills/lark/tools/add_members/index.js +19 -0
  11. package/agents/lark/skills/lark/tools/add_members/index.ts +19 -0
  12. package/agents/lark/skills/lark/tools/create_chat/index.js +18 -0
  13. package/agents/lark/skills/lark/tools/create_chat/index.ts +18 -0
  14. package/agents/lark/skills/lark/tools/dissolve_chat/index.js +16 -0
  15. package/agents/lark/skills/lark/tools/dissolve_chat/index.ts +16 -0
  16. package/agents/lark/skills/lark/tools/get_user/index.js +15 -0
  17. package/agents/lark/skills/lark/tools/get_user/index.ts +16 -0
  18. package/agents/lark/skills/lark/tools/remove_managers/index.js +19 -0
  19. package/agents/lark/skills/lark/tools/remove_managers/index.ts +19 -0
  20. package/agents/lark/skills/lark/tools/set_managers/index.js +19 -0
  21. package/agents/lark/skills/lark/tools/set_managers/index.ts +19 -0
  22. package/agents/lark/skills/lark/tools/update_chat/index.js +20 -0
  23. package/agents/lark/skills/lark/tools/update_chat/index.ts +20 -0
  24. package/agents/lark/skills/lark/tools/upload_file/index.js +17 -0
  25. package/agents/lark/skills/lark/tools/upload_file/index.ts +23 -0
  26. package/agents/lark/system.md +3 -0
  27. package/commands/lark/endpoint/add/[id]/index.js +3 -0
  28. package/commands/lark/endpoint/add/[id]/index.ts +3 -0
  29. package/commands/lark/endpoint/definition.js +20 -0
  30. package/commands/lark/endpoint/definition.ts +20 -0
  31. package/commands/lark/endpoint/list/index.js +3 -0
  32. package/commands/lark/endpoint/list/index.ts +3 -0
  33. package/commands/lark/endpoint/remove/[id]/index.js +3 -0
  34. package/commands/lark/endpoint/remove/[id]/index.ts +3 -0
  35. package/lib/client.d.ts +12 -0
  36. package/lib/client.js +2 -0
  37. package/lib/endpoint.d.ts +100 -0
  38. package/lib/endpoint.js +497 -0
  39. package/lib/index.d.ts +6 -15
  40. package/lib/index.js +6 -209
  41. package/lib/lark-runtime-state.d.ts +1 -0
  42. package/lib/lark-runtime-state.js +6 -0
  43. package/lib/media-upload.d.ts +15 -0
  44. package/lib/media-upload.js +58 -0
  45. package/lib/platform-permit.d.ts +14 -0
  46. package/lib/platform-permit.js +35 -0
  47. package/lib/protocol.d.ts +119 -0
  48. package/lib/protocol.js +272 -0
  49. package/lib/webhook.d.ts +14 -0
  50. package/lib/webhook.js +73 -0
  51. package/package.json +76 -21
  52. package/plugin.js +19 -0
  53. package/schema.json +110 -0
  54. package/src/client.ts +16 -0
  55. package/src/endpoint.ts +590 -0
  56. package/src/index.ts +51 -227
  57. package/src/lark-runtime-state.ts +7 -0
  58. package/src/media-upload.ts +69 -0
  59. package/src/platform-permit.ts +50 -0
  60. package/src/protocol.ts +396 -0
  61. package/src/webhook.ts +110 -0
  62. package/lib/adapter.d.ts +0 -17
  63. package/lib/adapter.d.ts.map +0 -1
  64. package/lib/adapter.js +0 -45
  65. package/lib/adapter.js.map +0 -1
  66. package/lib/bot.d.ts +0 -82
  67. package/lib/bot.d.ts.map +0 -1
  68. package/lib/bot.js +0 -638
  69. package/lib/bot.js.map +0 -1
  70. package/lib/index.d.ts.map +0 -1
  71. package/lib/index.js.map +0 -1
  72. package/lib/types.d.ts +0 -63
  73. package/lib/types.d.ts.map +0 -1
  74. package/lib/types.js +0 -2
  75. package/lib/types.js.map +0 -1
  76. package/plugin.yml +0 -3
  77. package/skills/lark/SKILL.md +0 -89
  78. package/src/adapter.ts +0 -55
  79. package/src/bot.ts +0 -712
  80. package/src/types.ts +0 -58
package/lib/bot.js DELETED
@@ -1,638 +0,0 @@
1
- /**
2
- * 飞书/Lark Bot 实现
3
- */
4
- import { registerFetchRoute } from "@zhin.js/host-router/router";
5
- import axios from "axios";
6
- import { createHash } from "crypto";
7
- import { formatCompact, Message, segment } from 'zhin.js';
8
- export class LarkBot {
9
- adapter;
10
- $config;
11
- $connected;
12
- router;
13
- accessToken;
14
- axiosInstance;
15
- get logger() {
16
- return this.adapter.plugin.logger;
17
- }
18
- get $id() {
19
- return this.$config.name;
20
- }
21
- constructor(adapter, router, $config) {
22
- this.adapter = adapter;
23
- this.$config = $config;
24
- this.router = router;
25
- this.$connected = false;
26
- this.accessToken = { token: '', expires_in: 0, timestamp: 0 };
27
- // 设置 API 基础 URL
28
- const baseURL = $config.apiBaseUrl || ($config.isFeishu ?
29
- 'https://open.feishu.cn/open-apis' :
30
- 'https://open.larksuite.com/open-apis');
31
- this.axiosInstance = axios.create({
32
- baseURL,
33
- timeout: 30000,
34
- headers: {
35
- 'Content-Type': 'application/json; charset=utf-8'
36
- }
37
- });
38
- // 设置请求拦截器,自动添加 access_token
39
- this.axiosInstance.interceptors.request.use(async (config) => {
40
- await this.ensureAccessToken();
41
- config.headers = config.headers;
42
- config.headers['Authorization'] = `Bearer ${this.accessToken.token}`;
43
- return config;
44
- });
45
- // 设置 webhook 路由
46
- this.setupWebhookRoute();
47
- }
48
- setupWebhookRoute() {
49
- registerFetchRoute(this.router, "POST", this.$config.webhookPath, (ctx) => {
50
- void this.handleWebhook(ctx);
51
- });
52
- }
53
- async handleWebhook(ctx) {
54
- try {
55
- const body = ctx.request.body;
56
- // 验证请求(如果配置了验证令牌)
57
- if (this.$config.verificationToken) {
58
- const token = ctx.get('x-lark-request-token');
59
- if (token !== this.$config.verificationToken) {
60
- this.logger.warn(formatCompact({ op: 'webhook', ok: false, error: 'invalid verification token' }));
61
- ctx.status = 403;
62
- ctx.body = 'Forbidden';
63
- return;
64
- }
65
- }
66
- // 签名验证(如果配置了加密密钥)
67
- if (this.$config.encryptKey) {
68
- const timestamp = ctx.get('x-lark-request-timestamp');
69
- const nonce = ctx.get('x-lark-request-nonce');
70
- const signature = ctx.get('x-lark-signature');
71
- const bodyStr = JSON.stringify(body);
72
- if (!timestamp || !nonce || !signature || !this.verifySignature(timestamp, nonce, bodyStr, signature)) {
73
- this.logger.warn(formatCompact({ op: 'webhook', ok: false, error: 'invalid signature' }));
74
- ctx.status = 403;
75
- ctx.body = 'Forbidden';
76
- return;
77
- }
78
- }
79
- const event = body;
80
- // URL 验证挑战(首次配置 webhook 时)
81
- if (event.type === 'url_verification') {
82
- ctx.body = { challenge: event.challenge };
83
- return;
84
- }
85
- // 处理消息事件
86
- if (event.type === 'event_callback' && event.event) {
87
- await this.handleEvent(event.event);
88
- }
89
- ctx.status = 200;
90
- ctx.body = { code: 0, msg: 'success' };
91
- }
92
- catch (error) {
93
- this.logger.error('Webhook error:', error);
94
- ctx.status = 500;
95
- ctx.body = { code: -1, msg: 'Internal Server Error' };
96
- }
97
- }
98
- verifySignature(timestamp, nonce, body, signature) {
99
- if (!this.$config.encryptKey)
100
- return true;
101
- try {
102
- const stringToSign = `${timestamp}${nonce}${this.$config.encryptKey}${body}`;
103
- const calculatedSignature = createHash('sha256').update(stringToSign).digest('hex');
104
- return calculatedSignature === signature;
105
- }
106
- catch (error) {
107
- this.logger.error('Signature verification error:', error);
108
- return false;
109
- }
110
- }
111
- async handleEvent(event) {
112
- // 处理消息事件
113
- if (event.message) {
114
- const message = this.$formatMessage(event.message, event);
115
- this.adapter.emit('message.receive', message);
116
- this.logger.debug(formatCompact({
117
- op: 'recv',
118
- bot: this.$config.name,
119
- channel: message.$channel.type,
120
- id: message.$channel.id,
121
- len: segment.raw(message.$content).length,
122
- }));
123
- }
124
- }
125
- // ================================================================================================
126
- // Token 管理
127
- // ================================================================================================
128
- async ensureAccessToken() {
129
- const now = Date.now();
130
- // 提前 5 分钟刷新 token
131
- if (this.accessToken.token && now < (this.accessToken.timestamp + (this.accessToken.expires_in - 300) * 1000)) {
132
- return;
133
- }
134
- await this.refreshAccessToken();
135
- }
136
- async refreshAccessToken() {
137
- try {
138
- const response = await axios.post(`${this.$config.apiBaseUrl || (this.$config.isFeishu ?
139
- 'https://open.feishu.cn/open-apis' :
140
- 'https://open.larksuite.com/open-apis')}/auth/v3/tenant_access_token/internal`, {
141
- app_id: this.$config.appId,
142
- app_secret: this.$config.appSecret
143
- });
144
- if (response.data.code === 0) {
145
- this.accessToken = {
146
- token: response.data.tenant_access_token,
147
- expires_in: response.data.expire,
148
- timestamp: Date.now()
149
- };
150
- this.logger.debug('Access token refreshed successfully');
151
- }
152
- else {
153
- throw new Error(`Failed to get access token: ${response.data.msg}`);
154
- }
155
- }
156
- catch (error) {
157
- this.logger.error('Failed to refresh access token:', error);
158
- throw error;
159
- }
160
- }
161
- // ================================================================================================
162
- // 消息格式化
163
- // ================================================================================================
164
- $formatMessage(msg, event) {
165
- const content = this.parseMessageContent(msg);
166
- // 确定聊天类型
167
- const chatType = msg.chat_id?.startsWith('oc_') ? 'group' : 'private';
168
- return Message.from(msg, {
169
- $id: msg.message_id || Date.now().toString(),
170
- $adapter: 'lark',
171
- $bot: this.$config.name,
172
- $sender: {
173
- id: msg.sender?.sender_id?.open_id || 'unknown',
174
- name: msg.sender?.sender_id?.user_id || msg.sender?.sender_id?.open_id || 'Unknown User'
175
- },
176
- $channel: {
177
- id: msg.chat_id || 'unknown',
178
- type: chatType
179
- },
180
- $content: content,
181
- $raw: JSON.stringify(msg),
182
- $timestamp: msg.create_time ? parseInt(msg.create_time) : Date.now(),
183
- $recall: async () => {
184
- await this.$recallMessage(msg.message_id || '');
185
- },
186
- $reply: async (content) => {
187
- return await this.adapter.sendMessage({
188
- context: 'lark',
189
- bot: this.$config.name,
190
- id: msg.chat_id || 'unknown',
191
- type: chatType,
192
- content: content
193
- });
194
- }
195
- });
196
- }
197
- parseMessageContent(msg) {
198
- const content = [];
199
- if (!msg.content || !msg.message_type) {
200
- return content;
201
- }
202
- try {
203
- const messageContent = JSON.parse(msg.content);
204
- switch (msg.message_type) {
205
- case 'text':
206
- if (messageContent.text) {
207
- content.push(segment('text', { content: messageContent.text }));
208
- // 处理 @提及
209
- if (msg.mentions) {
210
- for (const mention of msg.mentions) {
211
- if (mention.key && messageContent.text.includes(mention.key)) {
212
- content.push(segment('at', {
213
- id: mention.id?.open_id,
214
- name: mention.name
215
- }));
216
- }
217
- }
218
- }
219
- }
220
- break;
221
- case 'image':
222
- content.push(segment('image', {
223
- file_key: messageContent.image_key,
224
- url: `https://open.feishu.cn/open-apis/im/v1/messages/${msg.message_id}/resources/${messageContent.image_key}`
225
- }));
226
- break;
227
- case 'file':
228
- content.push(segment('file', {
229
- file_key: messageContent.file_key,
230
- file_name: messageContent.file_name,
231
- file_size: messageContent.file_size
232
- }));
233
- break;
234
- case 'audio':
235
- content.push(segment('audio', {
236
- file_key: messageContent.file_key,
237
- duration: messageContent.duration
238
- }));
239
- break;
240
- case 'video':
241
- content.push(segment('video', {
242
- file_key: messageContent.file_key,
243
- duration: messageContent.duration,
244
- width: messageContent.width,
245
- height: messageContent.height
246
- }));
247
- break;
248
- case 'sticker':
249
- content.push(segment('sticker', {
250
- file_key: messageContent.file_key
251
- }));
252
- break;
253
- case 'rich_text':
254
- // 富文本消息处理(简化)
255
- if (messageContent.content) {
256
- this.parseRichTextContent(messageContent.content, content);
257
- }
258
- break;
259
- case 'post':
260
- // 卡片消息处理
261
- content.push(segment('card', messageContent));
262
- break;
263
- default:
264
- content.push(segment('text', { content: `[不支持的消息类型: ${msg.message_type}]` }));
265
- break;
266
- }
267
- }
268
- catch (error) {
269
- this.logger.error('Failed to parse message content:', error);
270
- content.push(segment('text', { content: '[消息解析失败]' }));
271
- }
272
- return content;
273
- }
274
- parseRichTextContent(richContent, content) {
275
- // 简化的富文本解析
276
- if (Array.isArray(richContent)) {
277
- for (const block of richContent) {
278
- if (block.tag === 'text' && block.text) {
279
- content.push(segment('text', { content: block.text }));
280
- }
281
- else if (block.tag === 'a' && block.href) {
282
- content.push(segment('link', {
283
- url: block.href,
284
- text: block.text || block.href
285
- }));
286
- }
287
- else if (block.tag === 'at' && block.user_id) {
288
- content.push(segment('at', {
289
- id: block.user_id,
290
- name: block.user_name
291
- }));
292
- }
293
- }
294
- }
295
- }
296
- // ================================================================================================
297
- // 消息发送
298
- // ================================================================================================
299
- async $sendMessage(options) {
300
- const chatId = options.id;
301
- const content = this.formatSendContent(options.content);
302
- try {
303
- const response = await this.axiosInstance.post('/im/v1/messages', {
304
- receive_id: chatId,
305
- receive_id_type: 'chat_id',
306
- msg_type: content.msg_type,
307
- content: content.content
308
- });
309
- if (response.data.code !== 0) {
310
- throw new Error(`Failed to send message: ${response.data.msg}`);
311
- }
312
- this.logger.debug('Message sent successfully:', response.data.data?.message_id);
313
- return response.data.data?.message_id || '';
314
- }
315
- catch (error) {
316
- this.logger.error('Failed to send message:', error);
317
- throw error;
318
- }
319
- }
320
- async $recallMessage(id) {
321
- await this.axiosInstance.post('/im/v1/messages/recall', {
322
- message_id: id
323
- });
324
- }
325
- formatSendContent(content) {
326
- if (typeof content === 'string') {
327
- return {
328
- msg_type: 'text',
329
- content: JSON.stringify({ text: content })
330
- };
331
- }
332
- if (Array.isArray(content)) {
333
- const textParts = [];
334
- let hasMedia = false;
335
- let mediaContent = null;
336
- for (const item of content) {
337
- if (typeof item === 'string') {
338
- textParts.push(item);
339
- }
340
- else {
341
- const segment = item;
342
- switch (segment.type) {
343
- case 'text':
344
- textParts.push(segment.data.content || segment.data.text || '');
345
- break;
346
- case 'at':
347
- textParts.push(`<at user_id="${segment.data.id}">${segment.data.name || segment.data.id}</at>`);
348
- break;
349
- case 'image':
350
- if (!hasMedia) {
351
- hasMedia = true;
352
- mediaContent = {
353
- msg_type: 'image',
354
- content: JSON.stringify({
355
- image_key: segment.data.file_key || segment.data.key
356
- })
357
- };
358
- }
359
- break;
360
- case 'file':
361
- if (!hasMedia) {
362
- hasMedia = true;
363
- mediaContent = {
364
- msg_type: 'file',
365
- content: JSON.stringify({
366
- file_key: segment.data.file_key || segment.data.key
367
- })
368
- };
369
- }
370
- break;
371
- case 'card':
372
- if (!hasMedia) {
373
- hasMedia = true;
374
- mediaContent = {
375
- msg_type: 'interactive',
376
- content: JSON.stringify(segment.data)
377
- };
378
- }
379
- break;
380
- }
381
- }
382
- }
383
- // 优先发送媒体内容
384
- if (hasMedia && mediaContent) {
385
- return mediaContent;
386
- }
387
- // 否则发送文本内容
388
- return {
389
- msg_type: 'text',
390
- content: JSON.stringify({ text: textParts.join('') })
391
- };
392
- }
393
- return {
394
- msg_type: 'text',
395
- content: JSON.stringify({ text: String(content) })
396
- };
397
- }
398
- // ================================================================================================
399
- // Bot 生命周期
400
- // ================================================================================================
401
- async $connect() {
402
- try {
403
- // 获取 access token
404
- await this.refreshAccessToken();
405
- this.$connected = true;
406
- this.logger.info(formatCompact({ bot: this.$config.name }));
407
- this.logger.info(formatCompact({ op: 'webhook', path: this.$config.webhookPath }));
408
- }
409
- catch (error) {
410
- this.logger.error('Failed to connect Lark bot:', error);
411
- throw error;
412
- }
413
- }
414
- async $disconnect() {
415
- try {
416
- this.$connected = false;
417
- this.logger.info(formatCompact({ op: 'disconnect', bot: this.$config.name }));
418
- }
419
- catch (error) {
420
- this.logger.error('Error disconnecting Lark bot:', error);
421
- }
422
- }
423
- // ================================================================================================
424
- // 工具方法
425
- // ================================================================================================
426
- // 获取用户信息
427
- async getUserInfo(userId, userIdType = 'open_id') {
428
- try {
429
- const response = await this.axiosInstance.get(`/contact/v3/users/${userId}`, {
430
- params: { user_id_type: userIdType }
431
- });
432
- return response.data.data?.user;
433
- }
434
- catch (error) {
435
- this.logger.error('Failed to get user info:', error);
436
- return null;
437
- }
438
- }
439
- // 获取群聊信息
440
- async getChatInfo(chatId) {
441
- try {
442
- const response = await this.axiosInstance.get(`/im/v1/chats/${chatId}`);
443
- return response.data.data;
444
- }
445
- catch (error) {
446
- this.logger.error('Failed to get chat info:', error);
447
- return null;
448
- }
449
- }
450
- // 上传文件
451
- async uploadFile(filePath, fileType = 'file') {
452
- try {
453
- const FormData = require('form-data');
454
- const fs = require('fs');
455
- const form = new FormData();
456
- form.append('file', fs.createReadStream(filePath));
457
- form.append('file_type', fileType);
458
- const response = await this.axiosInstance.post('/im/v1/files', form, {
459
- headers: {
460
- ...form.getHeaders()
461
- }
462
- });
463
- if (response.data.code === 0) {
464
- return response.data.data.file_key;
465
- }
466
- throw new Error(`Upload failed: ${response.data.msg}`);
467
- }
468
- catch (error) {
469
- this.logger.error('Failed to upload file:', error);
470
- return null;
471
- }
472
- }
473
- // ==================== 群组管理 API ====================
474
- /**
475
- * 创建群聊
476
- * @param name 群名
477
- * @param userIds 成员 open_id 列表
478
- * @param ownerId 群主 open_id
479
- */
480
- async createChat(name, userIds, ownerId) {
481
- try {
482
- const response = await this.axiosInstance.post('/im/v1/chats', {
483
- name,
484
- user_id_list: userIds,
485
- owner_id: ownerId
486
- });
487
- if (response.data.code === 0) {
488
- this.logger.debug(formatCompact({ op: 'create_chat', chat: response.data.data.chat_id }));
489
- return response.data.data.chat_id;
490
- }
491
- throw new Error(`Failed to create chat: ${response.data.msg}`);
492
- }
493
- catch (error) {
494
- this.logger.error('Failed to create chat:', error);
495
- return null;
496
- }
497
- }
498
- /**
499
- * 更新群信息
500
- * @param chatId 群聊 ID
501
- * @param options 更新选项
502
- */
503
- async updateChatInfo(chatId, options) {
504
- try {
505
- const response = await this.axiosInstance.put(`/im/v1/chats/${chatId}`, options);
506
- if (response.data.code === 0) {
507
- this.logger.debug(formatCompact({ op: 'update_chat', chat: chatId }));
508
- return true;
509
- }
510
- throw new Error(`Failed to update chat: ${response.data.msg}`);
511
- }
512
- catch (error) {
513
- this.logger.error('Failed to update chat:', error);
514
- return false;
515
- }
516
- }
517
- /**
518
- * 添加群成员
519
- * @param chatId 群聊 ID
520
- * @param userIds 用户 ID 列表
521
- */
522
- async addChatMembers(chatId, userIds) {
523
- try {
524
- const response = await this.axiosInstance.post(`/im/v1/chats/${chatId}/members`, {
525
- id_list: userIds
526
- });
527
- if (response.data.code === 0) {
528
- this.logger.debug(formatCompact({ op: 'add_member', chat: chatId }));
529
- return true;
530
- }
531
- throw new Error(`Failed to add members: ${response.data.msg}`);
532
- }
533
- catch (error) {
534
- this.logger.error('Failed to add chat members:', error);
535
- return false;
536
- }
537
- }
538
- /**
539
- * 移除群成员
540
- * @param chatId 群聊 ID
541
- * @param userIds 用户 ID 列表
542
- */
543
- async removeChatMembers(chatId, userIds) {
544
- try {
545
- const response = await this.axiosInstance.delete(`/im/v1/chats/${chatId}/members`, {
546
- data: { id_list: userIds }
547
- });
548
- if (response.data.code === 0) {
549
- this.logger.debug(formatCompact({ op: 'remove_member', chat: chatId }));
550
- return true;
551
- }
552
- throw new Error(`Failed to remove members: ${response.data.msg}`);
553
- }
554
- catch (error) {
555
- this.logger.error('Failed to remove chat members:', error);
556
- return false;
557
- }
558
- }
559
- /**
560
- * 获取群成员列表
561
- * @param chatId 群聊 ID
562
- */
563
- async getChatMembers(chatId) {
564
- try {
565
- const response = await this.axiosInstance.get(`/im/v1/chats/${chatId}/members`);
566
- if (response.data.code === 0) {
567
- return response.data.data.items || [];
568
- }
569
- throw new Error(`Failed to get members: ${response.data.msg}`);
570
- }
571
- catch (error) {
572
- this.logger.error('Failed to get chat members:', error);
573
- return [];
574
- }
575
- }
576
- /**
577
- * 解散群聊
578
- * @param chatId 群聊 ID
579
- */
580
- async dissolveChat(chatId) {
581
- try {
582
- const response = await this.axiosInstance.delete(`/im/v1/chats/${chatId}`);
583
- if (response.data.code === 0) {
584
- this.logger.debug(formatCompact({ op: 'delete_chat', chat: chatId }));
585
- return true;
586
- }
587
- throw new Error(`Failed to dissolve chat: ${response.data.msg}`);
588
- }
589
- catch (error) {
590
- this.logger.error('Failed to dissolve chat:', error);
591
- return false;
592
- }
593
- }
594
- /**
595
- * 设置群管理员
596
- * @param chatId 群聊 ID
597
- * @param userIds 用户 ID 列表
598
- */
599
- async setChatManagers(chatId, userIds) {
600
- try {
601
- const response = await this.axiosInstance.post(`/im/v1/chats/${chatId}/managers/add_managers`, {
602
- manager_ids: userIds
603
- });
604
- if (response.data.code === 0) {
605
- this.logger.debug(formatCompact({ op: 'set_admin', chat: chatId }));
606
- return true;
607
- }
608
- throw new Error(`Failed to set managers: ${response.data.msg}`);
609
- }
610
- catch (error) {
611
- this.logger.error('Failed to set chat managers:', error);
612
- return false;
613
- }
614
- }
615
- /**
616
- * 移除群管理员
617
- * @param chatId 群聊 ID
618
- * @param userIds 用户 ID 列表
619
- */
620
- async removeChatManagers(chatId, userIds) {
621
- try {
622
- const response = await this.axiosInstance.post(`/im/v1/chats/${chatId}/managers/delete_managers`, {
623
- manager_ids: userIds
624
- });
625
- if (response.data.code === 0) {
626
- this.logger.debug(formatCompact({ op: 'remove_admin', chat: chatId }));
627
- return true;
628
- }
629
- throw new Error(`Failed to remove managers: ${response.data.msg}`);
630
- }
631
- catch (error) {
632
- this.logger.error('Failed to remove chat managers:', error);
633
- return false;
634
- }
635
- }
636
- }
637
- // 定义 Adapter 类
638
- //# sourceMappingURL=bot.js.map
package/lib/bot.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bot.js","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,MAAM,CAAC;QACf,UAAU,QAAQ;YAChB,MAAM,EAAE,OAAO,sBAAsB,EAAE,MAAM,CAAC;SAC/C;KACF;IACD,UAAU,QAAQ;QAChB,IAAI,EAAE,WAAW,CAAC;KACnB;CACF;AAED,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}