@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,341 +0,0 @@
1
- /**
2
- * OneBot11 WebSocket 服务端(反向 WS)Bot
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 OneBot11WsServer extends EventEmitter {
11
- adapter;
12
- router;
13
- $config;
14
- $connected;
15
- #wss;
16
- #clientMap = new Map();
17
- heartbeatTimer;
18
- requestId = 0;
19
- pendingRequests = new Map();
20
- get logger() {
21
- return this.adapter.plugin.logger;
22
- }
23
- get $id() {
24
- return this.$config.name;
25
- }
26
- constructor(adapter, router, $config) {
27
- super();
28
- this.adapter = adapter;
29
- this.router = router;
30
- this.$config = $config;
31
- this.$connected = false;
32
- }
33
- async $connect() {
34
- if (!this.$config.access_token) {
35
- this.logger.warn(formatCompact({ endpoint: this.$id, ok: false, error: 'missing access_token' }));
36
- }
37
- this.#wss = this.router.ws(this.$config.path, {
38
- verifyClient: (info) => {
39
- const { req: { headers } } = info;
40
- const authorization = headers['authorization'] || '';
41
- if (this.$config.access_token && authorization !== `Bearer ${this.$config.access_token}`) {
42
- this.logger.error('鉴权失败');
43
- return false;
44
- }
45
- return true;
46
- },
47
- });
48
- this.logger.debug(formatCompact({ op: 'listen', endpoint: this.$id, mode: 'wss', path: this.$config.path }));
49
- this.#wss.on('connection', (client, req) => {
50
- this.startHeartbeat();
51
- this.logger.debug(formatCompact({ endpoint: this.$id, peer: req.socket.remoteAddress }));
52
- client.on('error', (err) => this.logger.warn(formatCompact({
53
- op: 'ws_error',
54
- endpoint: this.$id,
55
- ok: false,
56
- error: err instanceof Error ? err.message : String(err),
57
- })));
58
- client.on('close', (code, reason) => {
59
- const reasonStr = reason?.toString?.() || String(reason ?? '');
60
- const codeHint = code === 1005 ? ' [无状态]' : code === 1006 ? ' [异常关闭]' : '';
61
- this.logger.warn(formatCompact({
62
- op: 'disconnect',
63
- endpoint: this.$id,
64
- peer: req.socket.remoteAddress,
65
- code: code ?? '?',
66
- error: `${reasonStr || 'closed'}${codeHint}`,
67
- }));
68
- for (const [key, value] of this.#clientMap) {
69
- if (client === value)
70
- this.#clientMap.delete(key);
71
- }
72
- if (this.#clientMap.size === 0) {
73
- this.$connected = false;
74
- }
75
- });
76
- client.on('message', (data) => {
77
- try {
78
- const message = JSON.parse(data.toString());
79
- this.handleWebSocketMessage(client, message);
80
- }
81
- catch (error) {
82
- this.emit('error', error);
83
- }
84
- });
85
- });
86
- }
87
- async $disconnect() {
88
- this.#wss?.close();
89
- if (this.heartbeatTimer) {
90
- clearInterval(this.heartbeatTimer);
91
- this.heartbeatTimer = undefined;
92
- }
93
- }
94
- toWireSendContent(content) {
95
- const items = (Array.isArray(content) ? content : [content]).map((item) => typeof item === 'string' ? { type: 'text', data: { text: item } } : item);
96
- return fromCanonicalSegments(toCanonicalSegments(items));
97
- }
98
- $formatMessage(onebotMsg) {
99
- const msgId = [onebotMsg.self_id, onebotMsg.message_id].join(':');
100
- const channel = {
101
- id: [onebotMsg.self_id, (onebotMsg.group_id || onebotMsg.user_id)].join(':'),
102
- type: (onebotMsg.group_id ? 'group' : 'private'),
103
- };
104
- const wire = Array.isArray(onebotMsg.message) ? [...onebotMsg.message] : [];
105
- const quoteId = Message.quoteIdFromContent(wire);
106
- Message.alignReplySegments(wire, quoteId);
107
- const content = toCanonicalSegments(wire);
108
- const message = Message.from(onebotMsg, {
109
- $id: msgId,
110
- $adapter: 'onebot11',
111
- $endpoint: `${this.$config.name}`,
112
- $sender: (() => {
113
- const sender = {
114
- id: onebotMsg.user_id.toString(),
115
- name: onebotMsg.sender?.nickname || onebotMsg.sender?.card || onebotMsg.user_id.toString(),
116
- };
117
- applyQqSenderRoleToMessageSender(sender, onebotMsg.sender?.role);
118
- return sender;
119
- })(),
120
- $channel: channel,
121
- $content: content,
122
- $quote_id: quoteId,
123
- $raw: onebotMsg.raw_message,
124
- $timestamp: onebotMsg.time,
125
- $recall: async () => await this.$recallMessage(msgId),
126
- $reply: async (content, quote) => {
127
- if (!Array.isArray(content))
128
- content = [content];
129
- if (quote)
130
- content.unshift({ type: 'reply', data: { message_id: msgId } });
131
- return await this.$sendMessage({
132
- ...channel,
133
- context: 'onebot11',
134
- endpoint: `${this.$config.name}`,
135
- content,
136
- });
137
- },
138
- });
139
- return message;
140
- }
141
- async $sendMessage(options) {
142
- const content = this.toWireSendContent(expandInteractiveSegmentsInContent(options.content));
143
- const messageData = { message: content };
144
- if (options.type === 'group') {
145
- const [self_id, id] = options.id.split(':');
146
- const result = await this.callApi(self_id, 'send_group_msg', {
147
- group_id: parseInt(id),
148
- ...messageData,
149
- });
150
- this.logger.debug(`${this.$config.name} send ${options.type}(${id}):${segment.raw(options.content)}`);
151
- return result.message_id.toString();
152
- }
153
- if (options.type === 'private') {
154
- const [self_id, id] = options.id.split(':');
155
- const result = await this.callApi(self_id, 'send_private_msg', {
156
- user_id: parseInt(id),
157
- ...messageData,
158
- });
159
- this.logger.debug(`${this.$config.name} send ${options.type}(${id}):${segment.raw(options.content)}`);
160
- return result.message_id.toString();
161
- }
162
- throw new Error('Either group_id or user_id must be provided');
163
- }
164
- async $recallMessage(id) {
165
- const [self_id, message_id] = id.split(':');
166
- await this.callApi(self_id, 'delete_msg', { message_id: parseInt(message_id) });
167
- }
168
- async $getMsg(messageId) {
169
- const selfId = this.getFirstSelfId();
170
- const idParam = /^\d+$/.test(messageId) ? Number(messageId) : messageId;
171
- const data = await this.callApi(selfId, 'get_msg', { message_id: idParam });
172
- return parseOneBotGetMsgResponse(messageId, data);
173
- }
174
- getFirstSelfId() {
175
- const first = this.#clientMap.keys().next().value;
176
- if (!first)
177
- throw new Error('反向 WS 尚未有实现端连接');
178
- return first;
179
- }
180
- async kickMember(groupId, userId, rejectAddRequest = false) {
181
- const selfId = this.getFirstSelfId();
182
- await this.callApi(selfId, 'set_group_kick', { group_id: groupId, user_id: userId, reject_add_request: rejectAddRequest });
183
- return true;
184
- }
185
- async muteMember(groupId, userId, duration = 600) {
186
- const selfId = this.getFirstSelfId();
187
- await this.callApi(selfId, 'set_group_ban', { group_id: groupId, user_id: userId, duration });
188
- return true;
189
- }
190
- async muteAll(groupId, enable = true) {
191
- const selfId = this.getFirstSelfId();
192
- await this.callApi(selfId, 'set_group_whole_ban', { group_id: groupId, enable });
193
- return true;
194
- }
195
- async setAdmin(groupId, userId, enable = true) {
196
- const selfId = this.getFirstSelfId();
197
- await this.callApi(selfId, 'set_group_admin', { group_id: groupId, user_id: userId, enable });
198
- return true;
199
- }
200
- async setCard(groupId, userId, card) {
201
- const selfId = this.getFirstSelfId();
202
- await this.callApi(selfId, 'set_group_card', { group_id: groupId, user_id: userId, card });
203
- return true;
204
- }
205
- async setGroupName(groupId, name) {
206
- const selfId = this.getFirstSelfId();
207
- await this.callApi(selfId, 'set_group_name', { group_id: groupId, group_name: name });
208
- return true;
209
- }
210
- async getMemberList(groupId) {
211
- const selfId = this.getFirstSelfId();
212
- return await this.callApi(selfId, 'get_group_member_list', { group_id: groupId });
213
- }
214
- async getGroupInfo(groupId) {
215
- const selfId = this.getFirstSelfId();
216
- return await this.callApi(selfId, 'get_group_info', { group_id: groupId });
217
- }
218
- async setTitle(groupId, userId, title, duration = -1) {
219
- const selfId = this.getFirstSelfId();
220
- await this.callApi(selfId, 'set_group_special_title', { group_id: groupId, user_id: userId, special_title: title, duration });
221
- return true;
222
- }
223
- async callApi(self_id, action, params = {}) {
224
- const client = this.#clientMap.get(self_id);
225
- if (!client || client.readyState !== WebSocket.OPEN) {
226
- throw new Error('WebSocket is not connected');
227
- }
228
- const echo = `req_${++this.requestId}`;
229
- const message = { action, params, echo };
230
- return new Promise((resolve, reject) => {
231
- const timeout = setTimeout(() => {
232
- this.pendingRequests.delete(echo);
233
- reject(new Error(`API call timeout: ${action}`));
234
- }, 30000);
235
- this.pendingRequests.set(echo, { resolve, reject, timeout });
236
- client.send(JSON.stringify(message));
237
- });
238
- }
239
- handleWebSocketMessage(client, message) {
240
- // 自动注册 client 映射(修复:统一使用 String 类型 key,兼容不发 lifecycle:connect 的实现端)
241
- if (message.self_id != null) {
242
- const selfIdStr = String(message.self_id);
243
- if (!this.#clientMap.has(selfIdStr) || this.#clientMap.get(selfIdStr) !== client) {
244
- this.#clientMap.set(selfIdStr, client);
245
- if (!this.$connected) {
246
- this.$connected = true;
247
- }
248
- }
249
- }
250
- if (message.echo && this.pendingRequests.has(message.echo)) {
251
- const request = this.pendingRequests.get(message.echo);
252
- this.pendingRequests.delete(message.echo);
253
- clearTimeout(request.timeout);
254
- const response = message;
255
- if (response.status === 'ok')
256
- return request.resolve(response.data);
257
- return request.reject(new Error(`API error: ${response.retcode}`));
258
- }
259
- switch (message.post_type) {
260
- case 'message':
261
- return this.handleMessage(message);
262
- case 'notice':
263
- return this.handleNotice(message);
264
- case 'request':
265
- return this.handleRequest(message);
266
- case 'meta_event':
267
- return this.handleMetaEvent(client, message);
268
- }
269
- }
270
- handleMetaEvent(client, message) {
271
- switch (message.sub_type) {
272
- case 'heartbeat':
273
- break;
274
- case 'connect':
275
- this.#clientMap.set(String(message.self_id), client);
276
- this.$connected = true;
277
- this.logger.debug(formatCompact({ endpoint: this.$config.name, self_id: message.self_id }));
278
- break;
279
- }
280
- }
281
- handleMessage(onebotMsg) {
282
- const message = this.$formatMessage(onebotMsg);
283
- this.adapter.emit('message.receive', message);
284
- this.logger.debug(`${this.$config.name} recv ${message.$channel.type}(${onebotMsg.group_id || onebotMsg.user_id}):${segment.raw(message.$content)}`);
285
- }
286
- handleNotice(event) {
287
- const isGroup = !!event.group_id;
288
- const { scene_type, sub_type } = mapNoticeParts('onebot', event.notice_type ?? '', {
289
- sub_type: event.sub_type,
290
- is_group: isGroup,
291
- });
292
- const sceneId = String(event.group_id || event.user_id || '');
293
- const notice = buildNotice(event, {
294
- $id: `${event.self_id}:${event.time}_${event.notice_type}_${event.group_id || event.user_id}`,
295
- $adapter: 'onebot11',
296
- $endpoint: this.$config.name,
297
- $type: 'notice',
298
- $scene_id: sceneId,
299
- $scene_type: scene_type,
300
- $sub_type: sub_type,
301
- $actor: senderFromId(event.operator_id),
302
- $target: senderFromId(event.user_id),
303
- $timestamp: (event.time || Math.floor(Date.now() / 1000)) * 1000,
304
- });
305
- this.adapter.emit('notice.receive', notice);
306
- }
307
- handleRequest(event) {
308
- const self_id = event.self_id?.toString() || '';
309
- const { scene_type, sub_type } = mapRequestParts('onebot', event.request_type ?? '', event.sub_type);
310
- const sceneId = String(event.group_id || event.user_id || '');
311
- const request = buildRequest(event, {
312
- $id: event.flag || `${self_id}:${event.time}_${event.request_type}_${event.user_id}`,
313
- $adapter: 'onebot11',
314
- $endpoint: this.$config.name,
315
- $type: 'request',
316
- $scene_id: sceneId,
317
- $scene_type: scene_type,
318
- $sub_type: sub_type,
319
- $actor: senderFromId(event.user_id) ?? { id: '', name: '' },
320
- $comment: event.comment,
321
- $timestamp: (event.time || Math.floor(Date.now() / 1000)) * 1000,
322
- $approve: async (remark) => {
323
- await this.callApi(self_id, event.request_type === 'friend' ? 'set_friend_add_request' : 'set_group_add_request', { flag: event.flag, approve: true, remark });
324
- },
325
- $reject: async (reason) => {
326
- await this.callApi(self_id, event.request_type === 'friend' ? 'set_friend_add_request' : 'set_group_add_request', { flag: event.flag, approve: false, reason });
327
- },
328
- });
329
- this.adapter.emit('request.receive', request);
330
- }
331
- startHeartbeat() {
332
- const interval = this.$config.heartbeat_interval || 30000;
333
- this.heartbeatTimer = setInterval(() => {
334
- for (const client of this.#wss?.clients || []) {
335
- if (client && client.readyState === WebSocket.OPEN)
336
- client.ping();
337
- }
338
- }, interval);
339
- }
340
- }
341
- //# sourceMappingURL=endpoint-ws-server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"endpoint-ws-server.js","sourceRoot":"","sources":["../../src/endpoint-ws-server.ts"],"names":[],"mappings":"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"}
package/lib/src/index.js DELETED
@@ -1,41 +0,0 @@
1
- /**
2
- * OneBot11 适配器入口:单一适配器,支持正向 WS / 反向 WS(connection: ws | wss)
3
- */
4
- import { usePlugin, createSceneManagementTools, registerDefaultScenePlatformPermitChecker } from 'zhin.js';
5
- import { OneBot11Adapter } from './adapter.js';
6
- import { setOnebot11AgentDeps } from './onebot11-agent-deps.js';
7
- export * from './types.js';
8
- export { OneBot11WsClient } from './endpoint-ws-client.js';
9
- export { OneBot11WsServer } from './endpoint-ws-server.js';
10
- export { OneBot11Adapter } from './adapter.js';
11
- const plugin = usePlugin();
12
- const { provide, useContext } = plugin;
13
- provide({
14
- name: 'onebot11',
15
- description: 'OneBot11 协议适配器(正向 WS / 反向 WS)',
16
- mounted: async (p) => {
17
- const adapter = new OneBot11Adapter(p);
18
- await adapter.start();
19
- return adapter;
20
- },
21
- dispose: async (adapter) => {
22
- await adapter.stop();
23
- },
24
- });
25
- useContext('tool', 'onebot11', (toolService, onebot11) => {
26
- const disposers = [];
27
- disposers.push(registerDefaultScenePlatformPermitChecker('onebot11'));
28
- setOnebot11AgentDeps({
29
- getEndpoint: (endpointId) => {
30
- const endpoint = onebot11.endpoints.get(endpointId);
31
- if (!endpoint)
32
- throw new Error(`Endpoint ${endpointId} 不存在`);
33
- return endpoint;
34
- },
35
- getAdapter: () => onebot11,
36
- });
37
- const sceneTools = createSceneManagementTools(onebot11, 'onebot11');
38
- disposers.push(...sceneTools.map(t => toolService.addTool(t, plugin.name)));
39
- return () => disposers.forEach(d => d());
40
- });
41
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAoD,0BAA0B,EAAE,yCAAyC,EAAoB,MAAM,SAAS,CAAC;AAE/K,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAoB,MAAM,cAAc,CAAC;AAajE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAC3B,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;AACvC,OAAO,CAAC;IACN,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,+BAA+B;IAC5C,OAAO,EAAE,KAAK,EAAE,CAAS,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAwB,EAAE,EAAE;QAC1C,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;CACgC,CAAC,CAAC;AAErC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,WAAwB,EAAE,QAAyB,EAAE,EAAE;IACrF,MAAM,SAAS,GAAmB,EAAE,CAAC;IACrC,SAAS,CAAC,IAAI,CAAC,yCAAyC,CAAC,UAAU,CAAC,CAAC,CAAC;IACtE,oBAAoB,CAAC;QACnB,WAAW,EAAE,CAAC,UAAU,EAAE,EAAE;YAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,UAAU,MAAM,CAAC,CAAC;YAC7D,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ;KAC3B,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,0BAA0B,CAC3C,QAAuC,EACvC,UAAU,CACX,CAAC;IACF,SAAS,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC"}
@@ -1,27 +0,0 @@
1
- export function parseOneBotGetMsgResponse(messageId, data) {
2
- const record = data && typeof data === 'object' ? data : {};
3
- let content = [];
4
- if (Array.isArray(record.message)) {
5
- content = record.message;
6
- }
7
- else if (typeof record.raw_message === 'string' && record.raw_message) {
8
- content = [{ type: 'text', data: { text: record.raw_message } }];
9
- }
10
- const senderRaw = record.sender;
11
- let sender;
12
- if (senderRaw && typeof senderRaw === 'object') {
13
- const s = senderRaw;
14
- sender = {
15
- id: String(s.user_id ?? ''),
16
- name: String(s.nickname ?? s.card ?? ''),
17
- };
18
- }
19
- return {
20
- messageId,
21
- sender,
22
- content,
23
- raw: typeof record.raw_message === 'string' ? record.raw_message : undefined,
24
- time: typeof record.time === 'number' ? record.time : undefined,
25
- };
26
- }
27
- //# sourceMappingURL=onebot-get-msg.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"onebot-get-msg.js","sourceRoot":"","sources":["../../src/onebot-get-msg.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,yBAAyB,CACvC,SAAiB,EACjB,IAAa;IAEb,MAAM,MAAM,GACV,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAgC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,IAAI,OAAO,GAAoC,EAAE,CAAC;IAClD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,GAAG,MAAM,CAAC,OAA2B,CAAC;IAC/C,CAAC;SAAM,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACxE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;IAChC,IAAI,MAAsC,CAAC;IAC3C,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC/C,MAAM,CAAC,GAAG,SAAoC,CAAC;QAC/C,MAAM,GAAG;YACP,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;YAC3B,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;SACzC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,SAAS;QACT,MAAM;QACN,OAAO;QACP,GAAG,EAAE,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;QAC5E,IAAI,EAAE,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;KAChE,CAAC;AACJ,CAAC"}
@@ -1,10 +0,0 @@
1
- let _deps = null;
2
- export function setOnebot11AgentDeps(deps) {
3
- _deps = deps;
4
- }
5
- export function getOnebot11AgentDeps() {
6
- if (!_deps)
7
- throw new Error('onebot11 agent deps not initialized');
8
- return _deps;
9
- }
10
- //# sourceMappingURL=onebot11-agent-deps.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"onebot11-agent-deps.js","sourceRoot":"","sources":["../../src/onebot11-agent-deps.ts"],"names":[],"mappings":"AAOA,IAAI,KAAK,GAA6B,IAAI,CAAC;AAE3C,MAAM,UAAU,oBAAoB,CAAC,IAAuB;IAC1D,KAAK,GAAG,IAAI,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACnE,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,2 +0,0 @@
1
- export { toCanonicalSegments, fromCanonicalSegments } from 'zhin.js';
2
- //# sourceMappingURL=segment-mapper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"segment-mapper.js","sourceRoot":"","sources":["../../src/segment-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
package/lib/src/types.js DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * OneBot11 适配器类型与配置
3
- */
4
- export {};
5
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/plugin.yml DELETED
@@ -1,3 +0,0 @@
1
- name: adapter-onebot11
2
- description: OneBot 11 协议适配器:群管理、头衔设置
3
- version: 1.0.63
package/src/adapter.ts DELETED
@@ -1,114 +0,0 @@
1
- /**
2
- * OneBot11 适配器:单一适配器支持正向 WS / 反向 WS,由 config.connection 区分
3
- */
4
- import { formatCompact, Adapter, Plugin, OUTBOUND_RICH_SEGMENT_POLICY_IM_FULL, ONEBOT_KEYBOARD_AI_OUTBOUND_EXTENSION } from 'zhin.js';
5
- import type { Router } from '@zhin.js/host-router';
6
- import { OneBot11WsClient } from './endpoint-ws-client.js';
7
- import { OneBot11WsServer } from './endpoint-ws-server.js';
8
- import type {
9
- OneBot11WsClientConfig,
10
- OneBot11WsServerConfig,
11
- OneBot11EndpointConfig,
12
- } from './types.js';
13
-
14
- export type OneBot11Bot = OneBot11WsClient | OneBot11WsServer;
15
-
16
- export class OneBot11Adapter extends Adapter<OneBot11Bot> {
17
- static override readonly capabilities = ['inbound', 'outbound'] as const;
18
- static override outboundRichSegmentPolicy = OUTBOUND_RICH_SEGMENT_POLICY_IM_FULL;
19
- static override interactivePolicy = 'text' as const;
20
- static override aiOutboundCapabilities = {
21
- mentions: true,
22
- richSegments: ['qrcode', 'html', 'markdown', 'tts'],
23
- interactive: 'text' as const,
24
- };
25
- static override aiOutboundExtensions = [ONEBOT_KEYBOARD_AI_OUTBOUND_EXTENSION];
26
-
27
- #router?: Router;
28
-
29
- constructor(plugin: Plugin) {
30
- super(plugin, 'onebot11', []);
31
- }
32
-
33
- createEndpoint(config: OneBot11EndpointConfig): OneBot11Bot {
34
- const connection = config.connection ?? 'ws';
35
- switch (connection) {
36
- case 'ws':
37
- return new OneBot11WsClient(this, config as OneBot11WsClientConfig);
38
- case 'wss':
39
- if (!this.#router) {
40
- throw new Error('OneBot11 connection: wss 需要 router,请安装并在配置中启用 @zhin.js/host-router');
41
- }
42
- return new OneBot11WsServer(this, this.#router, config as OneBot11WsServerConfig);
43
- default:
44
- throw new Error(`Unknown OneBot11 connection: ${connection}`);
45
- }
46
- }
47
-
48
- async removeMember(endpointId: string, sceneId: string, userId: string) {
49
- const endpoint = this.endpoints.get(endpointId);
50
- if (!endpoint) throw new Error(`Endpoint ${endpointId} 不存在`);
51
- return endpoint.kickMember(Number(sceneId), Number(userId), false);
52
- }
53
-
54
- async muteMember(endpointId: string, sceneId: string, userId: string, duration = 600) {
55
- const endpoint = this.endpoints.get(endpointId);
56
- if (!endpoint) throw new Error(`Endpoint ${endpointId} 不存在`);
57
- return endpoint.muteMember(Number(sceneId), Number(userId), duration);
58
- }
59
-
60
- async setSceneMuted(endpointId: string, sceneId: string, enable = true) {
61
- const endpoint = this.endpoints.get(endpointId);
62
- if (!endpoint) throw new Error(`Endpoint ${endpointId} 不存在`);
63
- return endpoint.muteAll(Number(sceneId), enable);
64
- }
65
-
66
- async setModerator(endpointId: string, sceneId: string, userId: string, enable = true) {
67
- const endpoint = this.endpoints.get(endpointId);
68
- if (!endpoint) throw new Error(`Endpoint ${endpointId} 不存在`);
69
- return endpoint.setAdmin(Number(sceneId), Number(userId), enable);
70
- }
71
-
72
- async setMemberNickname(endpointId: string, sceneId: string, userId: string, nickname: string) {
73
- const endpoint = this.endpoints.get(endpointId);
74
- if (!endpoint) throw new Error(`Endpoint ${endpointId} 不存在`);
75
- return endpoint.setCard(Number(sceneId), Number(userId), nickname);
76
- }
77
-
78
- async renameScene(endpointId: string, sceneId: string, name: string) {
79
- const endpoint = this.endpoints.get(endpointId);
80
- if (!endpoint) throw new Error(`Endpoint ${endpointId} 不存在`);
81
- return endpoint.setGroupName(Number(sceneId), name);
82
- }
83
-
84
- async listMembers(endpointId: string, sceneId: string) {
85
- const endpoint = this.endpoints.get(endpointId);
86
- if (!endpoint) throw new Error(`Endpoint ${endpointId} 不存在`);
87
- const members = await endpoint.getMemberList(Number(sceneId));
88
- return {
89
- members: members.map((m: any) => ({
90
- user_id: m.user_id,
91
- nickname: m.nickname,
92
- card: m.card,
93
- role: m.role,
94
- title: m.title,
95
- })),
96
- count: members.length,
97
- };
98
- }
99
-
100
- async getSceneInfo(endpointId: string, sceneId: string) {
101
- const endpoint = this.endpoints.get(endpointId);
102
- if (!endpoint) throw new Error(`Endpoint ${endpointId} 不存在`);
103
- return endpoint.getGroupInfo(Number(sceneId));
104
- }
105
-
106
- async start(): Promise<void> {
107
- this.#router = (this.plugin.inject as (key: string) => Router | undefined)('router');
108
- (this.plugin.useContext as (key: string, fn: (router: Router) => void) => void)('router', (router: Router) => {
109
- this.#router = router;
110
- });
111
- await super.start();
112
- }
113
-
114
- }