@zhin.js/adapter-onebot11 4.0.2 → 4.0.3

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 (56) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +38 -378
  3. package/adapters/onebot11.ts +39 -0
  4. package/agent/tools/set_title.ts +2 -2
  5. package/lib/index.d.ts +7 -0
  6. package/lib/index.js +6 -0
  7. package/lib/onebot11-agent-deps.d.ts +15 -0
  8. package/lib/onebot11-agent-deps.js +30 -0
  9. package/lib/protocol.d.ts +144 -0
  10. package/lib/protocol.js +235 -0
  11. package/lib/ws-endpoint.d.ts +28 -0
  12. package/lib/ws-endpoint.js +210 -0
  13. package/lib/ws-transport.d.ts +13 -0
  14. package/lib/ws-transport.js +74 -0
  15. package/lib/ws-types.d.ts +17 -0
  16. package/lib/ws-types.js +1 -0
  17. package/lib/wss-auth.d.ts +2 -0
  18. package/lib/wss-auth.js +16 -0
  19. package/lib/wss-endpoint.d.ts +26 -0
  20. package/lib/wss-endpoint.js +143 -0
  21. package/package.json +45 -25
  22. package/plugin.ts +13 -0
  23. package/schema.json +36 -0
  24. package/src/index.ts +56 -53
  25. package/src/onebot11-agent-deps.ts +39 -7
  26. package/src/protocol.ts +370 -0
  27. package/src/ws-endpoint.ts +266 -0
  28. package/src/ws-transport.ts +101 -0
  29. package/src/ws-types.ts +20 -0
  30. package/src/wss-auth.ts +17 -0
  31. package/src/wss-endpoint.ts +189 -0
  32. package/lib/agent/tools/set_title.js +0 -21
  33. package/lib/agent/tools/set_title.js.map +0 -1
  34. package/lib/src/adapter.js +0 -101
  35. package/lib/src/adapter.js.map +0 -1
  36. package/lib/src/endpoint-ws-client.js +0 -394
  37. package/lib/src/endpoint-ws-client.js.map +0 -1
  38. package/lib/src/endpoint-ws-server.js +0 -341
  39. package/lib/src/endpoint-ws-server.js.map +0 -1
  40. package/lib/src/index.js +0 -41
  41. package/lib/src/index.js.map +0 -1
  42. package/lib/src/onebot-get-msg.js +0 -27
  43. package/lib/src/onebot-get-msg.js.map +0 -1
  44. package/lib/src/onebot11-agent-deps.js +0 -10
  45. package/lib/src/onebot11-agent-deps.js.map +0 -1
  46. package/lib/src/segment-mapper.js +0 -2
  47. package/lib/src/segment-mapper.js.map +0 -1
  48. package/lib/src/types.js +0 -5
  49. package/lib/src/types.js.map +0 -1
  50. package/plugin.yml +0 -3
  51. package/src/adapter.ts +0 -114
  52. package/src/endpoint-ws-client.ts +0 -421
  53. package/src/endpoint-ws-server.ts +0 -382
  54. package/src/onebot-get-msg.ts +0 -33
  55. package/src/segment-mapper.ts +0 -1
  56. package/src/types.ts +0 -60
@@ -1,394 +0,0 @@
1
- /**
2
- * OneBot11 WebSocket 客户端连接 Endpoint
3
- */
4
- import WebSocket from 'ws';
5
- import { EventEmitter } from 'events';
6
- import { clearInterval } from 'node:timers';
7
- import { formatCompact, Message, mapNoticeParts, mapRequestParts, buildNotice, buildRequest, senderFromId, segment, expandInteractiveSegmentsInContent, applyQqSenderRoleToMessageSender, } from 'zhin.js';
8
- import { parseOneBotGetMsgResponse } from './onebot-get-msg.js';
9
- import { fromCanonicalSegments, toCanonicalSegments } from './segment-mapper.js';
10
- export class OneBot11WsClient extends EventEmitter {
11
- adapter;
12
- $config;
13
- $connected;
14
- ws;
15
- reconnectTimer;
16
- heartbeatTimer;
17
- requestId = 0;
18
- pendingRequests = new Map();
19
- get logger() {
20
- return this.adapter.plugin.logger;
21
- }
22
- constructor(adapter, $config) {
23
- super();
24
- this.adapter = adapter;
25
- this.$config = $config;
26
- this.$connected = false;
27
- }
28
- get $id() {
29
- return this.$config.name;
30
- }
31
- async $connect() {
32
- return new Promise((resolve, reject) => {
33
- const headers = {};
34
- if (this.$config.access_token) {
35
- headers['Authorization'] = `Bearer ${this.$config.access_token}`;
36
- const url = new URL(this.$config.url);
37
- url.searchParams.set('access_token', this.$config.access_token);
38
- this.$config.url = url.toString();
39
- }
40
- this.ws = new WebSocket(this.$config.url, { headers });
41
- this.ws.on('open', () => {
42
- this.$connected = true;
43
- if (!this.$config.access_token) {
44
- this.logger.warn(formatCompact({ endpoint: this.$id, ok: false, error: 'missing access_token' }));
45
- }
46
- this.logger.debug(formatCompact({ endpoint: this.$id, mode: 'ws' }));
47
- this.startHeartbeat();
48
- resolve();
49
- });
50
- this.ws.on('message', (data) => {
51
- try {
52
- const message = JSON.parse(data.toString());
53
- this.handleWebSocketMessage(message);
54
- }
55
- catch (error) {
56
- this.emit('error', error);
57
- }
58
- });
59
- this.ws.on('close', (code, reason) => {
60
- this.$connected = false;
61
- const reasonStr = reason?.toString?.() || String(reason);
62
- const codeHint = code === 1005 ? ' [无状态,多为服务端/代理未发 close 帧即断开]' : code === 1006 ? ' [异常关闭]' : '';
63
- this.logger.warn(formatCompact({
64
- op: 'disconnect',
65
- endpoint: this.$config.name,
66
- code,
67
- error: `${reasonStr || 'closed'}${codeHint}`,
68
- reconnect_ms: this.$config.reconnect_interval || 5000,
69
- }));
70
- reject({ code, reason });
71
- this.scheduleReconnect();
72
- });
73
- this.ws.on('error', (error) => {
74
- this.logger.warn(formatCompact({
75
- op: 'ws_error',
76
- endpoint: this.$config.name,
77
- ok: false,
78
- error: error instanceof Error ? error.message : String(error),
79
- }));
80
- reject(error);
81
- });
82
- });
83
- }
84
- async $disconnect() {
85
- if (this.reconnectTimer) {
86
- clearTimeout(this.reconnectTimer);
87
- this.reconnectTimer = undefined;
88
- }
89
- if (this.heartbeatTimer) {
90
- clearInterval(this.heartbeatTimer);
91
- this.heartbeatTimer = undefined;
92
- }
93
- for (const [, request] of this.pendingRequests) {
94
- clearTimeout(request.timeout);
95
- request.reject(new Error('Connection closed'));
96
- }
97
- this.pendingRequests.clear();
98
- if (this.ws) {
99
- this.ws.close();
100
- this.ws = undefined;
101
- }
102
- }
103
- toWireSendContent(content) {
104
- const items = (Array.isArray(content) ? content : [content]).map((item) => typeof item === 'string' ? { type: 'text', data: { text: item } } : item);
105
- return fromCanonicalSegments(toCanonicalSegments(items));
106
- }
107
- $formatMessage(onebotMsg) {
108
- const wire = Array.isArray(onebotMsg.message) ? [...onebotMsg.message] : [];
109
- const quoteId = Message.quoteIdFromContent(wire);
110
- Message.alignReplySegments(wire, quoteId);
111
- const content = toCanonicalSegments(wire);
112
- const message = Message.from(onebotMsg, {
113
- $id: onebotMsg.message_id.toString(),
114
- $adapter: 'onebot11',
115
- $endpoint: `${this.$config.name}`,
116
- $sender: (() => {
117
- const sender = {
118
- id: onebotMsg.user_id.toString(),
119
- name: onebotMsg.sender?.nickname || onebotMsg.sender?.card || onebotMsg.user_id.toString(),
120
- };
121
- applyQqSenderRoleToMessageSender(sender, onebotMsg.sender?.role);
122
- return sender;
123
- })(),
124
- $channel: {
125
- id: (onebotMsg.group_id || onebotMsg.user_id).toString(),
126
- type: onebotMsg.group_id ? 'group' : 'private',
127
- },
128
- $content: content,
129
- $quote_id: quoteId,
130
- $raw: onebotMsg.raw_message,
131
- $timestamp: onebotMsg.time,
132
- $recall: async () => {
133
- await this.$recallMessage(message.$id);
134
- },
135
- $reply: async (content, quote) => {
136
- if (!Array.isArray(content))
137
- content = [content];
138
- if (quote)
139
- content.unshift({ type: 'reply', data: { message_id: message.$id } });
140
- return await this.adapter.sendMessage({
141
- ...message.$channel,
142
- context: 'onebot11',
143
- endpoint: `${this.$config.name}`,
144
- content,
145
- });
146
- },
147
- });
148
- return message;
149
- }
150
- async $sendMessage(options) {
151
- const content = this.toWireSendContent(expandInteractiveSegmentsInContent(options.content));
152
- const messageData = { message: content };
153
- if (options.type === 'group') {
154
- const result = await this.callApi('send_group_msg', {
155
- group_id: parseInt(options.id),
156
- ...messageData,
157
- });
158
- this.logger.debug(`${this.$config.name} send ${options.type}(${options.id}):${segment.raw(options.content)}`);
159
- return result.message_id.toString();
160
- }
161
- if (options.type === 'private') {
162
- const result = await this.callApi('send_private_msg', {
163
- user_id: parseInt(options.id),
164
- ...messageData,
165
- });
166
- this.logger.debug(`${this.$config.name} send ${options.type}(${options.id}):${segment.raw(options.content)}`);
167
- return result.message_id.toString();
168
- }
169
- throw new Error('Either group_id or user_id must be provided');
170
- }
171
- async $recallMessage(id) {
172
- await this.callApi('delete_msg', { message_id: parseInt(id) });
173
- }
174
- async $getMsg(messageId) {
175
- const idParam = /^\d+$/.test(messageId) ? Number(messageId) : messageId;
176
- const data = await this.callApi('get_msg', { message_id: idParam });
177
- return parseOneBotGetMsgResponse(messageId, data);
178
- }
179
- async kickMember(groupId, userId, rejectAddRequest = false) {
180
- try {
181
- await this.callApi('set_group_kick', {
182
- group_id: groupId,
183
- user_id: userId,
184
- reject_add_request: rejectAddRequest,
185
- });
186
- this.logger.debug(formatCompact({ op: 'kick', endpoint: this.$id, group: groupId, user: userId }));
187
- return true;
188
- }
189
- catch (error) {
190
- this.logger.error(`OneBot11 Endpoint ${this.$id} 踢出成员失败:`, error);
191
- throw error;
192
- }
193
- }
194
- async muteMember(groupId, userId, duration = 600) {
195
- try {
196
- await this.callApi('set_group_ban', {
197
- group_id: groupId,
198
- user_id: userId,
199
- duration,
200
- });
201
- this.logger.debug(formatCompact({ op: duration > 0 ? 'mute' : 'unmute', endpoint: this.$id, group: groupId, user: userId, duration }));
202
- return true;
203
- }
204
- catch (error) {
205
- this.logger.error(`OneBot11 Endpoint ${this.$id} 禁言操作失败:`, error);
206
- throw error;
207
- }
208
- }
209
- async muteAll(groupId, enable = true) {
210
- try {
211
- await this.callApi('set_group_whole_ban', { group_id: groupId, enable });
212
- this.logger.debug(formatCompact({ op: 'mute_all', endpoint: this.$id, group: groupId, enable }));
213
- return true;
214
- }
215
- catch (error) {
216
- this.logger.error(`OneBot11 Endpoint ${this.$id} 全员禁言操作失败:`, error);
217
- throw error;
218
- }
219
- }
220
- async setAdmin(groupId, userId, enable = true) {
221
- try {
222
- await this.callApi('set_group_admin', { group_id: groupId, user_id: userId, enable });
223
- this.logger.debug(formatCompact({ op: 'set_admin', endpoint: this.$id, group: groupId, user: userId, enable }));
224
- return true;
225
- }
226
- catch (error) {
227
- this.logger.error(`OneBot11 Endpoint ${this.$id} 设置管理员失败:`, error);
228
- throw error;
229
- }
230
- }
231
- async setCard(groupId, userId, card) {
232
- try {
233
- await this.callApi('set_group_card', { group_id: groupId, user_id: userId, card });
234
- this.logger.debug(formatCompact({ op: 'set_card', endpoint: this.$id, group: groupId, user: userId }));
235
- return true;
236
- }
237
- catch (error) {
238
- this.logger.error(`OneBot11 Endpoint ${this.$id} 设置群名片失败:`, error);
239
- throw error;
240
- }
241
- }
242
- async setTitle(groupId, userId, title, duration = -1) {
243
- try {
244
- await this.callApi('set_group_special_title', {
245
- group_id: groupId,
246
- user_id: userId,
247
- special_title: title,
248
- duration,
249
- });
250
- this.logger.debug(formatCompact({ op: 'set_title', endpoint: this.$id, group: groupId, user: userId }));
251
- return true;
252
- }
253
- catch (error) {
254
- this.logger.error(`OneBot11 Endpoint ${this.$id} 设置头衔失败:`, error);
255
- throw error;
256
- }
257
- }
258
- async setGroupName(groupId, name) {
259
- try {
260
- await this.callApi('set_group_name', { group_id: groupId, group_name: name });
261
- this.logger.debug(formatCompact({ op: 'set_group_name', endpoint: this.$id, group: groupId }));
262
- return true;
263
- }
264
- catch (error) {
265
- this.logger.error(`OneBot11 Endpoint ${this.$id} 设置群名失败:`, error);
266
- throw error;
267
- }
268
- }
269
- async getMemberList(groupId) {
270
- try {
271
- return await this.callApi('get_group_member_list', { group_id: groupId });
272
- }
273
- catch (error) {
274
- this.logger.error(`OneBot11 Endpoint ${this.$id} 获取群成员列表失败:`, error);
275
- throw error;
276
- }
277
- }
278
- async getGroupInfo(groupId) {
279
- try {
280
- return await this.callApi('get_group_info', { group_id: groupId });
281
- }
282
- catch (error) {
283
- this.logger.error(`OneBot11 Endpoint ${this.$id} 获取群信息失败:`, error);
284
- throw error;
285
- }
286
- }
287
- async callApi(action, params = {}) {
288
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
289
- throw new Error('WebSocket is not connected');
290
- }
291
- const echo = `req_${++this.requestId}`;
292
- const message = { action, params, echo };
293
- return new Promise((resolve, reject) => {
294
- const timeout = setTimeout(() => {
295
- this.pendingRequests.delete(echo);
296
- reject(new Error(`API call timeout: ${action}`));
297
- }, 30000);
298
- this.pendingRequests.set(echo, { resolve, reject, timeout });
299
- this.ws.send(JSON.stringify(message));
300
- });
301
- }
302
- handleWebSocketMessage(message) {
303
- if (message.echo && this.pendingRequests.has(message.echo)) {
304
- const request = this.pendingRequests.get(message.echo);
305
- this.pendingRequests.delete(message.echo);
306
- clearTimeout(request.timeout);
307
- const response = message;
308
- if (response.status === 'ok')
309
- return request.resolve(response.data);
310
- return request.reject(new Error(`API error: ${response.retcode}`));
311
- }
312
- if (message.post_type === 'message') {
313
- this.handleOneBot11Message(message);
314
- }
315
- else if (message.post_type === 'notice') {
316
- this.handleOneBot11Notice(message);
317
- }
318
- else if (message.post_type === 'request') {
319
- this.handleOneBot11Request(message);
320
- }
321
- }
322
- handleOneBot11Notice(event) {
323
- const isGroup = !!event.group_id;
324
- const { scene_type, sub_type } = mapNoticeParts('onebot', event.notice_type ?? '', {
325
- sub_type: event.sub_type,
326
- is_group: isGroup,
327
- });
328
- const sceneId = String((event.group_id || event.user_id) ?? '');
329
- const notice = buildNotice(event, {
330
- $id: `${event.time}_${event.notice_type}_${event.group_id || event.user_id}`,
331
- $adapter: 'onebot11',
332
- $endpoint: this.$config.name,
333
- $type: 'notice',
334
- $scene_id: sceneId,
335
- $scene_type: scene_type,
336
- $sub_type: sub_type,
337
- $actor: senderFromId(event.operator_id),
338
- $target: senderFromId(event.user_id),
339
- $timestamp: (event.time || Math.floor(Date.now() / 1000)) * 1000,
340
- });
341
- this.adapter.emit('notice.receive', notice);
342
- }
343
- handleOneBot11Request(event) {
344
- const { scene_type, sub_type } = mapRequestParts('onebot', event.request_type ?? '', event.sub_type);
345
- const sceneId = String((event.group_id || event.user_id) ?? '');
346
- const request = buildRequest(event, {
347
- $id: event.flag || `${event.time}_${event.request_type}_${event.user_id}`,
348
- $adapter: 'onebot11',
349
- $endpoint: this.$config.name,
350
- $type: 'request',
351
- $scene_id: sceneId,
352
- $scene_type: scene_type,
353
- $sub_type: sub_type,
354
- $actor: senderFromId(event.user_id) ?? { id: '', name: '' },
355
- $comment: event.comment,
356
- $timestamp: (event.time || Math.floor(Date.now() / 1000)) * 1000,
357
- $approve: async (remark) => {
358
- await this.callApi(event.request_type === 'friend' ? 'set_friend_add_request' : 'set_group_add_request', { flag: event.flag, approve: true, remark });
359
- },
360
- $reject: async (reason) => {
361
- await this.callApi(event.request_type === 'friend' ? 'set_friend_add_request' : 'set_group_add_request', { flag: event.flag, approve: false, reason });
362
- },
363
- });
364
- this.adapter.emit('request.receive', request);
365
- }
366
- handleOneBot11Message(onebotMsg) {
367
- const message = this.$formatMessage(onebotMsg);
368
- this.adapter.emit('message.receive', message);
369
- this.logger.debug(`${this.$config.name} recv ${message.$channel.type}(${message.$channel.id}):${segment.raw(message.$content)}`);
370
- }
371
- startHeartbeat() {
372
- const interval = this.$config.heartbeat_interval || 30000;
373
- this.heartbeatTimer = setInterval(() => {
374
- if (this.ws && this.ws.readyState === WebSocket.OPEN)
375
- this.ws.ping();
376
- }, interval);
377
- }
378
- scheduleReconnect() {
379
- if (this.reconnectTimer)
380
- return;
381
- const interval = this.$config.reconnect_interval || 5000;
382
- this.reconnectTimer = setTimeout(async () => {
383
- this.reconnectTimer = undefined;
384
- try {
385
- await this.$connect();
386
- }
387
- catch (error) {
388
- this.emit('error', new Error(`Reconnection failed: ${error}`));
389
- this.scheduleReconnect();
390
- }
391
- }, interval);
392
- }
393
- }
394
- //# sourceMappingURL=endpoint-ws-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"endpoint-ws-client.js","sourceRoot":"","sources":["../../src/endpoint-ws-client.ts"],"names":[],"mappings":"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"}