@zhin.js/adapter-napcat 0.1.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/lib/tools.js ADDED
@@ -0,0 +1,606 @@
1
+ function getBot(adapter, botId) {
2
+ const bot = adapter.bots.get(botId);
3
+ if (!bot)
4
+ throw new Error(`Bot ${botId} not found`);
5
+ return bot;
6
+ }
7
+ const NAPCAT_TOOL_SPECS = [
8
+ // ── 消息与社交 ──────────────────────────────────────────────────
9
+ {
10
+ name: 'napcat_send_poke',
11
+ description: '戳一戳(群聊或私聊)。group_id 不传时为私聊戳一戳。',
12
+ params: {
13
+ bot: { type: 'string', description: 'Bot 名称' },
14
+ user_id: { type: 'number', description: '目标用户 QQ 号' },
15
+ group_id: { type: 'number', description: '群号(不传则为私聊戳一戳)' },
16
+ },
17
+ required: ['bot', 'user_id'],
18
+ keywords: ['戳一戳', 'poke', '戳', '拍一拍'],
19
+ execute: async (adapter, args) => {
20
+ const bot = getBot(adapter, args.bot);
21
+ await bot.sendPoke(args.user_id, args.group_id);
22
+ return { success: true, message: `已戳 ${args.user_id}` };
23
+ },
24
+ },
25
+ {
26
+ name: 'napcat_set_emoji_reaction',
27
+ description: '为消息添加表情回应(贴表情)。',
28
+ params: {
29
+ bot: { type: 'string', description: 'Bot 名称' },
30
+ message_id: { type: 'number', description: '消息 ID' },
31
+ emoji_id: { type: 'string', description: '表情 ID' },
32
+ },
33
+ required: ['bot', 'message_id', 'emoji_id'],
34
+ keywords: ['表情回应', 'reaction', '贴表情', 'emoji'],
35
+ execute: async (adapter, args) => {
36
+ const bot = getBot(adapter, args.bot);
37
+ await bot.setMsgEmojiLike(args.message_id, args.emoji_id);
38
+ return { success: true };
39
+ },
40
+ },
41
+ {
42
+ name: 'napcat_send_forward_msg',
43
+ description: '发送合并转发消息(群聊或私聊)。messages 为转发节点数组。',
44
+ params: {
45
+ bot: { type: 'string', description: 'Bot 名称' },
46
+ message_type: { type: 'string', description: 'private 或 group', enum: ['private', 'group'] },
47
+ id: { type: 'number', description: '群号或 QQ 号' },
48
+ messages: { type: 'string', description: '转发节点 JSON(node 数组)' },
49
+ },
50
+ required: ['bot', 'message_type', 'id', 'messages'],
51
+ keywords: ['合并转发', 'forward', '转发消息'],
52
+ execute: async (adapter, args) => {
53
+ const bot = getBot(adapter, args.bot);
54
+ const messages = typeof args.messages === 'string' ? JSON.parse(args.messages) : args.messages;
55
+ const result = await bot.sendForwardMsg(args.message_type, args.id, messages);
56
+ return result;
57
+ },
58
+ },
59
+ {
60
+ name: 'napcat_forward_single_msg',
61
+ description: '转发单条消息到指定好友或群。',
62
+ params: {
63
+ bot: { type: 'string', description: 'Bot 名称' },
64
+ target_type: { type: 'string', description: 'friend 或 group', enum: ['friend', 'group'] },
65
+ target_id: { type: 'number', description: '目标好友 QQ 号或群号' },
66
+ message_id: { type: 'number', description: '要转发的消息 ID' },
67
+ },
68
+ required: ['bot', 'target_type', 'target_id', 'message_id'],
69
+ keywords: ['转发', 'forward', '单条转发'],
70
+ execute: async (adapter, args) => {
71
+ const bot = getBot(adapter, args.bot);
72
+ if (args.target_type === 'friend')
73
+ await bot.forwardFriendSingleMsg(args.target_id, args.message_id);
74
+ else
75
+ await bot.forwardGroupSingleMsg(args.target_id, args.message_id);
76
+ return { success: true };
77
+ },
78
+ },
79
+ {
80
+ name: 'napcat_send_like',
81
+ description: '给好友点赞(每人每天最多 10 次)。',
82
+ params: {
83
+ bot: { type: 'string', description: 'Bot 名称' },
84
+ user_id: { type: 'number', description: '目标 QQ 号' },
85
+ times: { type: 'number', description: '点赞次数(1-10)', default: 1 },
86
+ },
87
+ required: ['bot', 'user_id'],
88
+ keywords: ['点赞', 'like', '赞', '好友赞'],
89
+ execute: async (adapter, args) => {
90
+ const bot = getBot(adapter, args.bot);
91
+ await bot.sendLike(args.user_id, args.times || 1);
92
+ return { success: true, message: `已给 ${args.user_id} 点赞 ${args.times || 1} 次` };
93
+ },
94
+ },
95
+ // ── 精华消息 ────────────────────────────────────────────────────
96
+ {
97
+ name: 'napcat_set_essence_msg',
98
+ description: '设置群精华消息。',
99
+ params: {
100
+ bot: { type: 'string', description: 'Bot 名称' },
101
+ message_id: { type: 'number', description: '消息 ID' },
102
+ },
103
+ required: ['bot', 'message_id'],
104
+ keywords: ['精华', 'essence', '设精', '加精'],
105
+ permissionLevel: 'group_admin',
106
+ scopes: ['group'],
107
+ execute: async (adapter, args) => {
108
+ const bot = getBot(adapter, args.bot);
109
+ await bot.setEssenceMsg(args.message_id);
110
+ return { success: true };
111
+ },
112
+ },
113
+ {
114
+ name: 'napcat_delete_essence_msg',
115
+ description: '移除群精华消息。',
116
+ params: {
117
+ bot: { type: 'string', description: 'Bot 名称' },
118
+ message_id: { type: 'number', description: '消息 ID' },
119
+ },
120
+ required: ['bot', 'message_id'],
121
+ keywords: ['取消精华', '移除精华', 'delete essence'],
122
+ permissionLevel: 'group_admin',
123
+ scopes: ['group'],
124
+ execute: async (adapter, args) => {
125
+ const bot = getBot(adapter, args.bot);
126
+ await bot.deleteEssenceMsg(args.message_id);
127
+ return { success: true };
128
+ },
129
+ },
130
+ {
131
+ name: 'napcat_get_essence_list',
132
+ description: '获取群精华消息列表。',
133
+ params: {
134
+ bot: { type: 'string', description: 'Bot 名称' },
135
+ group_id: { type: 'number', description: '群号' },
136
+ },
137
+ required: ['bot', 'group_id'],
138
+ keywords: ['精华列表', 'essence list'],
139
+ preExecutable: true,
140
+ scopes: ['group'],
141
+ execute: async (adapter, args) => {
142
+ const bot = getBot(adapter, args.bot);
143
+ return bot.getEssenceMsgList(args.group_id);
144
+ },
145
+ },
146
+ // ── 群公告 ──────────────────────────────────────────────────────
147
+ {
148
+ name: 'napcat_send_group_notice',
149
+ description: '发送群公告。',
150
+ params: {
151
+ bot: { type: 'string', description: 'Bot 名称' },
152
+ group_id: { type: 'number', description: '群号' },
153
+ content: { type: 'string', description: '公告内容' },
154
+ image: { type: 'string', description: '图片(URL 或 base64,可选)' },
155
+ },
156
+ required: ['bot', 'group_id', 'content'],
157
+ keywords: ['群公告', 'notice', '公告', '发公告'],
158
+ permissionLevel: 'group_admin',
159
+ scopes: ['group'],
160
+ execute: async (adapter, args) => {
161
+ const bot = getBot(adapter, args.bot);
162
+ await bot.sendGroupNotice(args.group_id, args.content, args.image);
163
+ return { success: true };
164
+ },
165
+ },
166
+ {
167
+ name: 'napcat_get_group_notice',
168
+ description: '获取群公告列表。',
169
+ params: {
170
+ bot: { type: 'string', description: 'Bot 名称' },
171
+ group_id: { type: 'number', description: '群号' },
172
+ },
173
+ required: ['bot', 'group_id'],
174
+ keywords: ['群公告', '获取公告', 'get notice'],
175
+ preExecutable: true,
176
+ scopes: ['group'],
177
+ execute: async (adapter, args) => {
178
+ const bot = getBot(adapter, args.bot);
179
+ return bot.getGroupNotice(args.group_id);
180
+ },
181
+ },
182
+ {
183
+ name: 'napcat_del_group_notice',
184
+ description: '删除群公告。',
185
+ params: {
186
+ bot: { type: 'string', description: 'Bot 名称' },
187
+ group_id: { type: 'number', description: '群号' },
188
+ notice_id: { type: 'string', description: '公告 ID' },
189
+ },
190
+ required: ['bot', 'group_id', 'notice_id'],
191
+ keywords: ['删除公告', 'delete notice'],
192
+ permissionLevel: 'group_admin',
193
+ scopes: ['group'],
194
+ execute: async (adapter, args) => {
195
+ const bot = getBot(adapter, args.bot);
196
+ await bot.deleteGroupNotice(args.group_id, args.notice_id);
197
+ return { success: true };
198
+ },
199
+ },
200
+ // ── 群文件 ──────────────────────────────────────────────────────
201
+ {
202
+ name: 'napcat_upload_group_file',
203
+ description: '上传文件到群。file 为本地路径或 URL。',
204
+ params: {
205
+ bot: { type: 'string', description: 'Bot 名称' },
206
+ group_id: { type: 'number', description: '群号' },
207
+ file: { type: 'string', description: '文件路径或 URL' },
208
+ name: { type: 'string', description: '文件名' },
209
+ folder: { type: 'string', description: '目标文件夹 ID(可选)' },
210
+ },
211
+ required: ['bot', 'group_id', 'file', 'name'],
212
+ keywords: ['上传文件', 'upload file', '群文件'],
213
+ permissionLevel: 'user',
214
+ scopes: ['group'],
215
+ execute: async (adapter, args) => {
216
+ const bot = getBot(adapter, args.bot);
217
+ await bot.uploadGroupFile(args.group_id, args.file, args.name, args.folder);
218
+ return { success: true };
219
+ },
220
+ },
221
+ {
222
+ name: 'napcat_get_group_file_url',
223
+ description: '获取群文件下载链接。',
224
+ params: {
225
+ bot: { type: 'string', description: 'Bot 名称' },
226
+ group_id: { type: 'number', description: '群号' },
227
+ file_id: { type: 'string', description: '文件 ID' },
228
+ busid: { type: 'number', description: '文件类型 ID' },
229
+ },
230
+ required: ['bot', 'group_id', 'file_id', 'busid'],
231
+ keywords: ['文件链接', 'file url', '下载文件'],
232
+ preExecutable: true,
233
+ scopes: ['group'],
234
+ execute: async (adapter, args) => {
235
+ const bot = getBot(adapter, args.bot);
236
+ return bot.getGroupFileUrl(args.group_id, args.file_id, args.busid);
237
+ },
238
+ },
239
+ {
240
+ name: 'napcat_get_group_root_files',
241
+ description: '获取群根目录文件列表。',
242
+ params: {
243
+ bot: { type: 'string', description: 'Bot 名称' },
244
+ group_id: { type: 'number', description: '群号' },
245
+ },
246
+ required: ['bot', 'group_id'],
247
+ keywords: ['群文件列表', 'group files'],
248
+ preExecutable: true,
249
+ scopes: ['group'],
250
+ execute: async (adapter, args) => {
251
+ const bot = getBot(adapter, args.bot);
252
+ return bot.getGroupRootFiles(args.group_id);
253
+ },
254
+ },
255
+ // ── 群管理增强 ──────────────────────────────────────────────────
256
+ {
257
+ name: 'napcat_get_group_shut_list',
258
+ description: '获取群禁言列表。',
259
+ params: {
260
+ bot: { type: 'string', description: 'Bot 名称' },
261
+ group_id: { type: 'number', description: '群号' },
262
+ },
263
+ required: ['bot', 'group_id'],
264
+ keywords: ['禁言列表', 'shut list', '被禁言'],
265
+ preExecutable: true,
266
+ scopes: ['group'],
267
+ execute: async (adapter, args) => {
268
+ const bot = getBot(adapter, args.bot);
269
+ return bot.getGroupShutList(args.group_id);
270
+ },
271
+ },
272
+ {
273
+ name: 'napcat_set_group_portrait',
274
+ description: '设置群头像。file 为图片 URL 或 base64。',
275
+ params: {
276
+ bot: { type: 'string', description: 'Bot 名称' },
277
+ group_id: { type: 'number', description: '群号' },
278
+ file: { type: 'string', description: '图片(URL 或 base64)' },
279
+ },
280
+ required: ['bot', 'group_id', 'file'],
281
+ keywords: ['群头像', 'group portrait', '设置群头像'],
282
+ permissionLevel: 'group_admin',
283
+ scopes: ['group'],
284
+ execute: async (adapter, args) => {
285
+ const bot = getBot(adapter, args.bot);
286
+ await bot.setGroupPortrait(args.group_id, args.file);
287
+ return { success: true };
288
+ },
289
+ },
290
+ {
291
+ name: 'napcat_set_title',
292
+ description: '设置群成员专属头衔。需要群主权限。',
293
+ params: {
294
+ bot: { type: 'string', description: 'Bot 名称' },
295
+ group_id: { type: 'number', description: '群号' },
296
+ user_id: { type: 'number', description: '目标成员 QQ 号' },
297
+ title: { type: 'string', description: '头衔文字' },
298
+ },
299
+ required: ['bot', 'group_id', 'user_id', 'title'],
300
+ keywords: ['头衔', 'title', '专属头衔', '设置头衔'],
301
+ permissionLevel: 'group_owner',
302
+ scopes: ['group'],
303
+ execute: async (adapter, args) => {
304
+ const bot = getBot(adapter, args.bot);
305
+ await bot.setTitle(args.group_id, args.user_id, args.title);
306
+ return { success: true, message: `已设置 ${args.user_id} 头衔为 "${args.title}"` };
307
+ },
308
+ },
309
+ {
310
+ name: 'napcat_group_sign',
311
+ description: '群签到/群打卡。',
312
+ params: {
313
+ bot: { type: 'string', description: 'Bot 名称' },
314
+ group_id: { type: 'number', description: '群号' },
315
+ },
316
+ required: ['bot', 'group_id'],
317
+ keywords: ['签到', '打卡', 'sign', 'check in'],
318
+ scopes: ['group'],
319
+ execute: async (adapter, args) => {
320
+ const bot = getBot(adapter, args.bot);
321
+ await bot.sendGroupSign(args.group_id);
322
+ return { success: true };
323
+ },
324
+ },
325
+ // ── AI 与多媒体 ────────────────────────────────────────────────
326
+ {
327
+ name: 'napcat_ai_tts',
328
+ description: 'AI 文字转语音,在群聊中发送 AI 语音消息。',
329
+ params: {
330
+ bot: { type: 'string', description: 'Bot 名称' },
331
+ group_id: { type: 'number', description: '群号' },
332
+ character: { type: 'string', description: 'AI 语音角色 ID(可先用 napcat_get_ai_characters 查询)' },
333
+ text: { type: 'string', description: '要转为语音的文字' },
334
+ },
335
+ required: ['bot', 'group_id', 'character', 'text'],
336
+ keywords: ['AI语音', 'TTS', '文字转语音', 'ai record'],
337
+ scopes: ['group'],
338
+ execute: async (adapter, args) => {
339
+ const bot = getBot(adapter, args.bot);
340
+ return bot.sendGroupAiRecord(args.group_id, args.character, args.text);
341
+ },
342
+ },
343
+ {
344
+ name: 'napcat_get_ai_characters',
345
+ description: '获取 AI 语音角色列表,用于 napcat_ai_tts 的 character 参数。',
346
+ params: {
347
+ bot: { type: 'string', description: 'Bot 名称' },
348
+ group_id: { type: 'number', description: '群号' },
349
+ },
350
+ required: ['bot', 'group_id'],
351
+ keywords: ['AI角色', 'ai characters', '语音角色'],
352
+ preExecutable: true,
353
+ scopes: ['group'],
354
+ execute: async (adapter, args) => {
355
+ const bot = getBot(adapter, args.bot);
356
+ return bot.getAiCharacters(args.group_id);
357
+ },
358
+ },
359
+ {
360
+ name: 'napcat_ocr_image',
361
+ description: '图片 OCR 文字识别。',
362
+ params: {
363
+ bot: { type: 'string', description: 'Bot 名称' },
364
+ image: { type: 'string', description: '图片 file 参数(收到消息中的 file 字段或 URL)' },
365
+ },
366
+ required: ['bot', 'image'],
367
+ keywords: ['OCR', '文字识别', '图片识别', 'ocr'],
368
+ preExecutable: true,
369
+ execute: async (adapter, args) => {
370
+ const bot = getBot(adapter, args.bot);
371
+ return bot.ocrImage(args.image);
372
+ },
373
+ },
374
+ {
375
+ name: 'napcat_get_mini_app_ark',
376
+ description: '签名小程序卡片(如 B 站分享卡片等)。',
377
+ params: {
378
+ bot: { type: 'string', description: 'Bot 名称' },
379
+ type: { type: 'string', description: '卡片类型' },
380
+ title: { type: 'string', description: '标题' },
381
+ desc: { type: 'string', description: '描述' },
382
+ pic_url: { type: 'string', description: '图片 URL' },
383
+ jump_url: { type: 'string', description: '跳转 URL' },
384
+ },
385
+ required: ['bot', 'type', 'title', 'desc', 'pic_url', 'jump_url'],
386
+ keywords: ['小程序', 'mini app', '卡片', 'ark'],
387
+ execute: async (adapter, args) => {
388
+ const bot = getBot(adapter, args.bot);
389
+ return bot.getMiniAppArk(args.type, args.title, args.desc, args.pic_url, args.jump_url);
390
+ },
391
+ },
392
+ // ── 消息历史 ────────────────────────────────────────────────────
393
+ {
394
+ name: 'napcat_get_group_msg_history',
395
+ description: '获取群消息历史记录。',
396
+ params: {
397
+ bot: { type: 'string', description: 'Bot 名称' },
398
+ group_id: { type: 'number', description: '群号' },
399
+ message_seq: { type: 'number', description: '起始消息序号(可选,不传从最新开始)' },
400
+ count: { type: 'number', description: '获取条数(可选)' },
401
+ },
402
+ required: ['bot', 'group_id'],
403
+ keywords: ['群消息历史', '聊天记录', 'message history'],
404
+ preExecutable: true,
405
+ scopes: ['group'],
406
+ execute: async (adapter, args) => {
407
+ const bot = getBot(adapter, args.bot);
408
+ return bot.getGroupMsgHistory(args.group_id, args.message_seq, args.count);
409
+ },
410
+ },
411
+ {
412
+ name: 'napcat_get_friend_msg_history',
413
+ description: '获取私聊消息历史记录。',
414
+ params: {
415
+ bot: { type: 'string', description: 'Bot 名称' },
416
+ user_id: { type: 'number', description: 'QQ 号' },
417
+ message_seq: { type: 'number', description: '起始消息序号(可选)' },
418
+ count: { type: 'number', description: '获取条数(可选)' },
419
+ },
420
+ required: ['bot', 'user_id'],
421
+ keywords: ['私聊记录', '好友聊天记录', 'friend history'],
422
+ preExecutable: true,
423
+ execute: async (adapter, args) => {
424
+ const bot = getBot(adapter, args.bot);
425
+ return bot.getFriendMsgHistory(args.user_id, args.message_seq, args.count);
426
+ },
427
+ },
428
+ // ── 信息查询 ────────────────────────────────────────────────────
429
+ {
430
+ name: 'napcat_get_user_status',
431
+ description: '获取用户在线状态。',
432
+ params: {
433
+ bot: { type: 'string', description: 'Bot 名称' },
434
+ user_id: { type: 'number', description: '目标 QQ 号' },
435
+ },
436
+ required: ['bot', 'user_id'],
437
+ keywords: ['在线状态', '用户状态', 'online status'],
438
+ preExecutable: true,
439
+ execute: async (adapter, args) => {
440
+ const bot = getBot(adapter, args.bot);
441
+ return bot.ncGetUserStatus(args.user_id);
442
+ },
443
+ },
444
+ {
445
+ name: 'napcat_get_group_info_ex',
446
+ description: '获取群组额外详细信息。',
447
+ params: {
448
+ bot: { type: 'string', description: 'Bot 名称' },
449
+ group_id: { type: 'number', description: '群号' },
450
+ },
451
+ required: ['bot', 'group_id'],
452
+ keywords: ['群详情', '群额外信息', 'group info ex'],
453
+ preExecutable: true,
454
+ scopes: ['group'],
455
+ execute: async (adapter, args) => {
456
+ const bot = getBot(adapter, args.bot);
457
+ return bot.getGroupInfoEx(args.group_id);
458
+ },
459
+ },
460
+ // ── 个人设置 ────────────────────────────────────────────────────
461
+ {
462
+ name: 'napcat_set_profile',
463
+ description: '修改 QQ 资料(昵称等)。',
464
+ params: {
465
+ bot: { type: 'string', description: 'Bot 名称' },
466
+ nickname: { type: 'string', description: '昵称' },
467
+ company: { type: 'string', description: '公司(可选)' },
468
+ email: { type: 'string', description: '邮箱(可选)' },
469
+ college: { type: 'string', description: '学校(可选)' },
470
+ personal_note: { type: 'string', description: '个人说明(可选)' },
471
+ },
472
+ required: ['bot', 'nickname'],
473
+ keywords: ['修改资料', '设置昵称', 'profile', 'set profile'],
474
+ execute: async (adapter, args) => {
475
+ const bot = getBot(adapter, args.bot);
476
+ await bot.setQQProfile(args.nickname, args.company, args.email, args.college, args.personal_note);
477
+ return { success: true };
478
+ },
479
+ },
480
+ {
481
+ name: 'napcat_set_avatar',
482
+ description: '修改 QQ 头像。',
483
+ params: {
484
+ bot: { type: 'string', description: 'Bot 名称' },
485
+ file: { type: 'string', description: '图片(URL 或 base64)' },
486
+ },
487
+ required: ['bot', 'file'],
488
+ keywords: ['头像', 'avatar', '设置头像', '换头像'],
489
+ execute: async (adapter, args) => {
490
+ const bot = getBot(adapter, args.bot);
491
+ await bot.setQQAvatar(args.file);
492
+ return { success: true };
493
+ },
494
+ },
495
+ {
496
+ name: 'napcat_set_online_status',
497
+ description: '设置在线状态(在线、隐身、忙碌等)。',
498
+ params: {
499
+ bot: { type: 'string', description: 'Bot 名称' },
500
+ status: { type: 'number', description: '状态码(11=在线, 21=离开, 31=隐身, 41=忙碌, 50=请勿打扰, 60=Q我吧)' },
501
+ ext_status: { type: 'number', description: '扩展状态码', default: 0 },
502
+ },
503
+ required: ['bot', 'status'],
504
+ keywords: ['在线状态', '隐身', '忙碌', 'online', 'status'],
505
+ execute: async (adapter, args) => {
506
+ const bot = getBot(adapter, args.bot);
507
+ await bot.setOnlineStatus(args.status, args.ext_status || 0);
508
+ return { success: true };
509
+ },
510
+ },
511
+ {
512
+ name: 'napcat_set_signature',
513
+ description: '设置个人签名(个性签名)。',
514
+ params: {
515
+ bot: { type: 'string', description: 'Bot 名称' },
516
+ signature: { type: 'string', description: '签名内容' },
517
+ },
518
+ required: ['bot', 'signature'],
519
+ keywords: ['签名', '个性签名', 'signature', 'longnick'],
520
+ execute: async (adapter, args) => {
521
+ const bot = getBot(adapter, args.bot);
522
+ await bot.setSelfLongnick(args.signature);
523
+ return { success: true };
524
+ },
525
+ },
526
+ {
527
+ name: 'napcat_translate',
528
+ description: '英译中翻译。',
529
+ params: {
530
+ bot: { type: 'string', description: 'Bot 名称' },
531
+ text: { type: 'string', description: '要翻译的英文文本' },
532
+ },
533
+ required: ['bot', 'text'],
534
+ keywords: ['翻译', 'translate', '英译中'],
535
+ preExecutable: true,
536
+ execute: async (adapter, args) => {
537
+ const bot = getBot(adapter, args.bot);
538
+ return bot.translateEn2Zh(args.text);
539
+ },
540
+ },
541
+ {
542
+ name: 'napcat_mark_msg_as_read',
543
+ description: '标记消息为已读。',
544
+ params: {
545
+ bot: { type: 'string', description: 'Bot 名称' },
546
+ message_id: { type: 'number', description: '消息 ID' },
547
+ },
548
+ required: ['bot', 'message_id'],
549
+ keywords: ['已读', 'mark read', '标记已读'],
550
+ execute: async (adapter, args) => {
551
+ const bot = getBot(adapter, args.bot);
552
+ await bot.markMsgAsRead(args.message_id);
553
+ return { success: true };
554
+ },
555
+ },
556
+ {
557
+ name: 'napcat_download_file',
558
+ description: '下载文件到 NapCat 缓存目录,返回本地路径。',
559
+ params: {
560
+ bot: { type: 'string', description: 'Bot 名称' },
561
+ url: { type: 'string', description: '文件 URL' },
562
+ thread_count: { type: 'number', description: '下载线程数(可选,默认 1)', default: 1 },
563
+ },
564
+ required: ['bot', 'url'],
565
+ keywords: ['下载', 'download', '下载文件'],
566
+ execute: async (adapter, args) => {
567
+ const bot = getBot(adapter, args.bot);
568
+ return bot.downloadFile(args.url, args.thread_count || 1);
569
+ },
570
+ },
571
+ {
572
+ name: 'napcat_delete_friend',
573
+ description: '删除好友。',
574
+ params: {
575
+ bot: { type: 'string', description: 'Bot 名称' },
576
+ user_id: { type: 'number', description: '好友 QQ 号' },
577
+ },
578
+ required: ['bot', 'user_id'],
579
+ keywords: ['删除好友', 'delete friend', '删好友'],
580
+ permissionLevel: 'group_admin',
581
+ execute: async (adapter, args) => {
582
+ const bot = getBot(adapter, args.bot);
583
+ await bot.deleteFriend(args.user_id);
584
+ return { success: true };
585
+ },
586
+ },
587
+ ];
588
+ export function createNapCatTools(adapter) {
589
+ return NAPCAT_TOOL_SPECS.map((spec) => ({
590
+ name: spec.name,
591
+ description: spec.description,
592
+ parameters: {
593
+ type: 'object',
594
+ properties: spec.params,
595
+ required: spec.required,
596
+ },
597
+ execute: (args) => spec.execute(adapter, args),
598
+ tags: ['napcat', 'qq'],
599
+ keywords: spec.keywords,
600
+ platforms: ['napcat'],
601
+ permissionLevel: spec.permissionLevel || 'user',
602
+ scopes: spec.scopes || ['group', 'private'],
603
+ preExecutable: spec.preExecutable,
604
+ }));
605
+ }
606
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}