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