@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/src/types.ts DELETED
@@ -1,279 +0,0 @@
1
- /**
2
- * NapCat 适配器类型定义
3
- * 覆盖 OneBot11 标准 + go-cqhttp 扩展 + NapCat 独有 API
4
- */
5
-
6
- // ── 配置 ─────────────────────────────────────────────────────────────
7
-
8
- export interface TypingIndicatorConfig {
9
- /** 是否启用(默认 true) */
10
- enabled?: boolean;
11
- /** 默认表情 ID */
12
- defaultEmoji?: string;
13
- /** 私聊配置 */
14
- privateConfig?: { type?: 'message' | 'typing'; message?: string };
15
- /** 群聊配置 */
16
- groupConfig?: { type?: 'reaction'; emoji?: string };
17
- }
18
-
19
- export interface NapCatConfigBase {
20
- context: 'napcat';
21
- name: string;
22
- access_token?: string;
23
- /** Typing Indicator 配置 */
24
- typingIndicator?: TypingIndicatorConfig;
25
- }
26
-
27
- /** 正向 WebSocket */
28
- export interface NapCatWsClientConfig extends NapCatConfigBase {
29
- connection: 'ws';
30
- url: string;
31
- reconnect_interval?: number;
32
- heartbeat_interval?: number;
33
- }
34
-
35
- /** 反向 WebSocket */
36
- export interface NapCatWsServerConfig extends NapCatConfigBase {
37
- connection: 'wss';
38
- path: string;
39
- heartbeat_interval?: number;
40
- }
41
-
42
- /** HTTP API + POST 上报 */
43
- export interface NapCatHttpConfig extends NapCatConfigBase {
44
- connection: 'http';
45
- /** NapCat HTTP API 地址,如 http://127.0.0.1:3000 */
46
- http_url: string;
47
- /** HTTP POST 事件上报接收路径,如 /napcat/post */
48
- post_path: string;
49
- /** 轮询间隔(ms),用于 HTTP 心跳检测,默认 30000 */
50
- poll_interval?: number;
51
- }
52
-
53
- export type NapCatEndpointConfig = NapCatWsClientConfig | NapCatWsServerConfig | NapCatHttpConfig;
54
-
55
- // ── API 响应 ─────────────────────────────────────────────────────────
56
-
57
- export interface ApiResponse<T = any> {
58
- status: string;
59
- retcode: number;
60
- data: T;
61
- echo?: string;
62
- message?: string;
63
- wording?: string;
64
- }
65
-
66
- // ── OneBot11 消息段 ──────────────────────────────────────────────────
67
-
68
- export interface MessageSegment {
69
- type: string;
70
- data: Record<string, any>;
71
- }
72
-
73
- // ── OneBot11 事件基础 ────────────────────────────────────────────────
74
-
75
- export interface NapCatEvent {
76
- post_type: 'message' | 'message_sent' | 'notice' | 'request' | 'meta_event';
77
- self_id: number;
78
- time: number;
79
- }
80
-
81
- export interface NapCatMessageEvent extends NapCatEvent {
82
- post_type: 'message' | 'message_sent';
83
- message_type: 'private' | 'group';
84
- sub_type: string;
85
- message_id: number;
86
- user_id: number;
87
- group_id?: number;
88
- message: MessageSegment[];
89
- raw_message: string;
90
- font: number;
91
- sender: {
92
- user_id: number;
93
- nickname: string;
94
- card?: string;
95
- sex?: string;
96
- age?: number;
97
- area?: string;
98
- level?: string;
99
- role?: 'owner' | 'admin' | 'member';
100
- title?: string;
101
- };
102
- }
103
-
104
- export interface NapCatNoticeEvent extends NapCatEvent {
105
- post_type: 'notice';
106
- notice_type: string;
107
- sub_type?: string;
108
- group_id?: number;
109
- user_id?: number;
110
- operator_id?: number;
111
- message_id?: number;
112
- target_id?: number;
113
- file?: { id: string; name: string; size: number; busid: number; url?: string };
114
- duration?: number;
115
- sender_id?: number;
116
- title?: string;
117
- action?: string;
118
- suffix?: string;
119
- comment?: string;
120
- flag?: string;
121
- }
122
-
123
- export interface NapCatRequestEvent extends NapCatEvent {
124
- post_type: 'request';
125
- request_type: 'friend' | 'group';
126
- sub_type?: string;
127
- user_id: number;
128
- group_id?: number;
129
- comment?: string;
130
- flag: string;
131
- }
132
-
133
- export interface NapCatMetaEvent extends NapCatEvent {
134
- post_type: 'meta_event';
135
- meta_event_type: string;
136
- sub_type?: string;
137
- status?: any;
138
- interval?: number;
139
- }
140
-
141
- // ── 发送者信息 ───────────────────────────────────────────────────────
142
-
143
- export interface SenderInfo {
144
- id: string;
145
- name: string;
146
- role?: 'owner' | 'admin' | 'member';
147
- isOwner?: boolean;
148
- isAdmin?: boolean;
149
- card?: string;
150
- title?: string;
151
- }
152
-
153
- // ── API 数据类型 ─────────────────────────────────────────────────────
154
-
155
- export interface LoginInfo {
156
- user_id: number;
157
- nickname: string;
158
- }
159
-
160
- export interface StrangerInfo {
161
- user_id: number;
162
- nickname: string;
163
- sex: string;
164
- age: number;
165
- qid?: string;
166
- level?: number;
167
- login_days?: number;
168
- }
169
-
170
- export interface FriendInfo {
171
- user_id: number;
172
- nickname: string;
173
- remark: string;
174
- }
175
-
176
- export interface GroupInfo {
177
- group_id: number;
178
- group_name: string;
179
- group_memo?: string;
180
- group_create_time?: number;
181
- group_level?: number;
182
- member_count: number;
183
- max_member_count: number;
184
- }
185
-
186
- export interface GroupMemberInfo {
187
- group_id: number;
188
- user_id: number;
189
- nickname: string;
190
- card: string;
191
- sex: string;
192
- age: number;
193
- area: string;
194
- join_time: number;
195
- last_sent_time: number;
196
- level: string;
197
- role: 'owner' | 'admin' | 'member';
198
- unfriendly: boolean;
199
- title: string;
200
- title_expire_time: number;
201
- card_changeable: boolean;
202
- shut_up_timestamp?: number;
203
- }
204
-
205
- export interface MessageInfo {
206
- time: number;
207
- message_type: string;
208
- message_id: number;
209
- real_id: number;
210
- sender: { user_id: number; nickname: string; card?: string };
211
- message: MessageSegment[];
212
- }
213
-
214
- export interface ForwardMessage {
215
- messages: Array<{ content: MessageSegment[]; sender: { nickname: string; user_id: number }; time: number }>;
216
- }
217
-
218
- export interface GroupHonorInfo {
219
- group_id: number;
220
- current_talkative?: { user_id: number; nickname: string; avatar: string; day_count: number };
221
- talkative_list?: any[];
222
- performer_list?: any[];
223
- legend_list?: any[];
224
- strong_newbie_list?: any[];
225
- emotion_list?: any[];
226
- }
227
-
228
- export interface EssenceMessage {
229
- sender_id: number;
230
- sender_nick: string;
231
- sender_time: number;
232
- operator_id: number;
233
- operator_nick: string;
234
- operator_time: number;
235
- message_id: number;
236
- }
237
-
238
- export interface GroupFileSystemInfo {
239
- file_count: number;
240
- limit_count: number;
241
- used_space: number;
242
- total_space: number;
243
- }
244
-
245
- export interface GroupFileInfo {
246
- files: Array<{ group_id: number; file_id: string; file_name: string; busid: number; file_size: number; upload_time: number; dead_time: number; modify_time: number; download_times: number; uploader: number; uploader_name: string }>;
247
- folders: Array<{ group_id: number; folder_id: string; folder_name: string; create_time: number; creator: number; creator_name: string; total_file_count: number }>;
248
- }
249
-
250
- export interface GroupNotice {
251
- sender_id: number;
252
- publish_time: number;
253
- message: { text: string; images?: Array<{ id: string; height: string; width: string }> };
254
- }
255
-
256
- export interface VersionInfo {
257
- app_name: string;
258
- app_version: string;
259
- protocol_version: string;
260
- [key: string]: any;
261
- }
262
-
263
- export interface OnlineStatus {
264
- status: number;
265
- ext_status: number;
266
- }
267
-
268
- export interface AiCharacter {
269
- character_id: string;
270
- character_name: string;
271
- preview_url?: string;
272
- }
273
-
274
- export interface CollectionItem {
275
- id: string;
276
- type: number;
277
- content: string;
278
- create_time: number;
279
- }
@@ -1,184 +0,0 @@
1
- /**
2
- * NapCat Typing Indicator 集成
3
- *
4
- * 群聊:set_msg_emoji_like(表情回应)
5
- * 私聊:set_input_status(输入状态)或短暂提示消息
6
- */
7
-
8
- import type { NapCatEndpointBase } from './endpoint-base.js';
9
- import {
10
- TypingIndicatorManager,
11
- ReactionTypingIndicatorAdapter,
12
- type TypingIndicatorOptions,
13
- type TypingIndicatorConfig,
14
- type TypingIndicator,
15
- } from '@zhin.js/agent';
16
-
17
- export interface NapCatTypingIndicatorConfig {
18
- enabled: boolean;
19
- defaultEmoji: string;
20
- autoRemove: boolean;
21
- removeDelay: number;
22
- privateConfig?: Partial<TypingIndicatorConfig>;
23
- groupConfig?: Partial<TypingIndicatorConfig>;
24
- }
25
-
26
- const DEFAULT_CONFIG: NapCatTypingIndicatorConfig = {
27
- enabled: true,
28
- defaultEmoji: '128516',
29
- autoRemove: true,
30
- removeDelay: 5000,
31
- privateConfig: {
32
- type: 'message',
33
- message: '正在思考中...',
34
- autoRemove: true,
35
- removeDelay: 3000,
36
- },
37
- groupConfig: {
38
- type: 'reaction',
39
- emoji: '128516',
40
- autoRemove: true,
41
- removeDelay: 5000,
42
- },
43
- };
44
-
45
- export class NapCatTypingIndicatorManager {
46
- private manager: TypingIndicatorManager;
47
- private config: NapCatTypingIndicatorConfig;
48
- private endpoint: NapCatEndpointBase;
49
-
50
- constructor(endpoint: NapCatEndpointBase, config: Partial<NapCatTypingIndicatorConfig> = {}) {
51
- this.endpoint = endpoint;
52
- this.config = { ...DEFAULT_CONFIG, ...config };
53
- this.manager = new TypingIndicatorManager({
54
- type: 'reaction',
55
- emoji: this.config.defaultEmoji,
56
- autoRemove: this.config.autoRemove,
57
- removeDelay: this.config.removeDelay,
58
- });
59
- this.registerAdapter();
60
- }
61
-
62
- private registerAdapter(): void {
63
- const adapter = new ReactionTypingIndicatorAdapter(
64
- 'napcat',
65
- async (messageId: string, emoji: string, _options) => {
66
- return await this.endpoint.$addReaction(messageId, emoji);
67
- },
68
- async (messageId: string, reactionId: string) => {
69
- await this.endpoint.$removeReaction(messageId, reactionId);
70
- },
71
- async (options: TypingIndicatorOptions, content: string) => {
72
- try {
73
- if (options.sceneType === 'group' && options.groupId) {
74
- return await this.endpoint.$sendMessage({
75
- type: 'group',
76
- id: options.groupId,
77
- context: 'napcat',
78
- endpoint: this.endpoint.$id,
79
- content: [{ type: 'text', data: { text: content } }],
80
- });
81
- } else if (options.userId) {
82
- return await this.endpoint.$sendMessage({
83
- type: 'private',
84
- id: options.userId,
85
- context: 'napcat',
86
- endpoint: this.endpoint.$id,
87
- content: [{ type: 'text', data: { text: content } }],
88
- });
89
- }
90
- return null;
91
- } catch {
92
- return null;
93
- }
94
- },
95
- async (messageId: string) => {
96
- try {
97
- await this.endpoint.$recallMessage(messageId);
98
- } catch { /* ignore */ }
99
- },
100
- );
101
- this.manager.registerAdapter(adapter);
102
- }
103
-
104
- async start(options: {
105
- messageId?: string;
106
- sessionId: string;
107
- userId?: string;
108
- groupId?: string;
109
- sceneType: 'private' | 'group';
110
- }): Promise<TypingIndicator> {
111
- this.endpoint.logger.debug('[NapCat:TypingIndicator] start called', {
112
- enabled: this.config.enabled,
113
- sceneType: options.sceneType,
114
- });
115
-
116
- if (!this.config.enabled) {
117
- return {
118
- start: async () => {},
119
- stop: async () => {},
120
- isActive: () => false,
121
- };
122
- }
123
-
124
- const config = options.sceneType === 'group'
125
- ? this.config.groupConfig
126
- : this.config.privateConfig;
127
-
128
- const typingOptions: TypingIndicatorOptions = {
129
- messageId: options.messageId,
130
- sessionId: options.sessionId,
131
- userId: options.userId,
132
- groupId: options.groupId,
133
- platform: 'napcat',
134
- endpointId: this.endpoint.$id,
135
- sceneType: options.sceneType,
136
- };
137
-
138
- return await this.manager.start(typingOptions, config);
139
- }
140
-
141
- async stop(options: {
142
- sessionId: string;
143
- userId?: string;
144
- groupId?: string;
145
- }): Promise<void> {
146
- const typingOptions: TypingIndicatorOptions = {
147
- sessionId: options.sessionId,
148
- userId: options.userId,
149
- groupId: options.groupId,
150
- platform: 'napcat',
151
- endpointId: this.endpoint.$id,
152
- sceneType: 'private',
153
- };
154
- await this.manager.stop(typingOptions);
155
- }
156
-
157
- async stopAll(): Promise<void> {
158
- await this.manager.stopAll();
159
- }
160
-
161
- updateConfig(config: Partial<NapCatTypingIndicatorConfig>): void {
162
- this.config = { ...this.config, ...config };
163
- }
164
-
165
- getConfig(): NapCatTypingIndicatorConfig {
166
- return { ...this.config };
167
- }
168
- }
169
-
170
- declare module './endpoint-base.js' {
171
- interface NapCatEndpointBase {
172
- $typingIndicator?: NapCatTypingIndicatorManager;
173
- }
174
- }
175
-
176
- export function enableTypingIndicator(
177
- endpoint: NapCatEndpointBase,
178
- config?: Partial<NapCatTypingIndicatorConfig>,
179
- ): NapCatTypingIndicatorManager {
180
- if (!(endpoint as any).$typingIndicator) {
181
- (endpoint as any).$typingIndicator = new NapCatTypingIndicatorManager(endpoint, config);
182
- }
183
- return (endpoint as any).$typingIndicator;
184
- }