node-karin 0.6.18 → 0.6.19

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 (101) hide show
  1. package/lib/adapter/index.d.ts +1 -1
  2. package/lib/adapter/index.js +1 -1
  3. package/lib/adapter/input/index.d.ts +16 -3
  4. package/lib/adapter/input/index.js +52 -38
  5. package/lib/adapter/kritor/grpc.d.ts +3 -2
  6. package/lib/adapter/kritor/grpc.js +80 -64
  7. package/lib/adapter/kritor/index.d.ts +35 -18
  8. package/lib/adapter/kritor/index.js +26 -10
  9. package/lib/adapter/onebot/11/convert.d.ts +11 -0
  10. package/lib/adapter/onebot/11/convert.js +168 -0
  11. package/lib/adapter/onebot/11/event.d.ts +25 -0
  12. package/lib/adapter/onebot/11/event.js +425 -0
  13. package/lib/adapter/onebot/11/index.d.ts +506 -0
  14. package/lib/adapter/onebot/11/index.js +1047 -0
  15. package/lib/cli/init.js +5 -0
  16. package/lib/core/karin.d.ts +3 -4
  17. package/lib/core/karin.js +3 -2
  18. package/lib/core/listener.d.ts +2 -2
  19. package/lib/core/listener.js +2 -2
  20. package/lib/core/plugin.app.js +2 -1
  21. package/lib/core/plugin.d.ts +4 -4
  22. package/lib/core/plugin.js +2 -1
  23. package/lib/core/plugin.loader.d.ts +3 -3
  24. package/lib/core/plugin.loader.js +2 -1
  25. package/lib/core/server.js +3 -3
  26. package/lib/event/event.handler.d.ts +5 -5
  27. package/lib/event/event.handler.js +6 -5
  28. package/lib/event/index.d.ts +0 -4
  29. package/lib/event/index.js +0 -4
  30. package/lib/event/message.handler.d.ts +3 -3
  31. package/lib/event/notice.handler.d.ts +3 -3
  32. package/lib/event/notice.handler.js +17 -16
  33. package/lib/event/request.handler.d.ts +3 -3
  34. package/lib/event/request.handler.js +4 -3
  35. package/lib/event/review.handler.d.ts +7 -8
  36. package/lib/index.js +1 -1
  37. package/lib/types/adapter/adapter.d.ts +564 -0
  38. package/lib/types/adapter/adapter.js +1 -0
  39. package/lib/types/{api.d.ts → adapter/api.d.ts} +103 -3
  40. package/lib/types/adapter/api.js +1 -0
  41. package/lib/types/element.d.ts +5 -4
  42. package/lib/types/event/contact.d.ts +28 -0
  43. package/lib/types/event/contact.js +13 -0
  44. package/lib/types/event/event.d.ts +390 -0
  45. package/lib/types/event/event.js +234 -0
  46. package/lib/types/event/index.d.ts +12 -0
  47. package/lib/types/event/index.js +7 -0
  48. package/lib/types/event/message.d.ts +104 -0
  49. package/lib/types/event/message.js +72 -0
  50. package/lib/types/event/notice.d.ts +513 -0
  51. package/lib/types/event/notice.js +52 -0
  52. package/lib/types/{reply.d.ts → event/reply.d.ts} +2 -2
  53. package/lib/types/event/reply.js +1 -0
  54. package/lib/types/event/request.d.ts +126 -0
  55. package/lib/types/event/request.js +52 -0
  56. package/lib/types/event/sender.d.ts +44 -0
  57. package/lib/types/event/sender.js +22 -0
  58. package/lib/types/index.d.ts +6 -5
  59. package/lib/types/index.js +6 -5
  60. package/lib/types/onebot11/api.d.ts +53 -0
  61. package/lib/types/onebot11/api.js +54 -0
  62. package/lib/types/onebot11/event.d.ts +619 -0
  63. package/lib/types/onebot11/event.js +56 -0
  64. package/lib/types/onebot11/index.d.ts +6 -0
  65. package/lib/types/onebot11/index.js +6 -0
  66. package/lib/types/onebot11/params.d.ts +609 -0
  67. package/lib/types/onebot11/params.js +7 -0
  68. package/lib/types/onebot11/response.d.ts +516 -0
  69. package/lib/types/onebot11/response.js +1 -0
  70. package/lib/types/onebot11/segment.d.ts +268 -0
  71. package/lib/types/onebot11/segment.js +30 -0
  72. package/lib/types/onebot11/sender.d.ts +59 -0
  73. package/lib/types/onebot11/sender.js +1 -0
  74. package/lib/types/plugin.d.ts +10 -11
  75. package/lib/utils/button.d.ts +2 -2
  76. package/lib/utils/common.d.ts +2 -2
  77. package/lib/utils/config.js +3 -3
  78. package/lib/utils/handler.d.ts +2 -2
  79. package/lib/utils/handler.js +1 -1
  80. package/lib/utils/init.d.ts +1 -1
  81. package/lib/utils/init.js +2 -1
  82. package/lib/utils/segment.d.ts +2 -2
  83. package/package.json +1 -1
  84. package/lib/adapter/onebot/onebot11.d.ts +0 -309
  85. package/lib/adapter/onebot/onebot11.js +0 -1285
  86. package/lib/event/event.d.ts +0 -140
  87. package/lib/event/event.js +0 -125
  88. package/lib/event/message.d.ts +0 -105
  89. package/lib/event/message.js +0 -70
  90. package/lib/event/notice.d.ts +0 -49
  91. package/lib/event/notice.js +0 -15
  92. package/lib/event/request.d.ts +0 -49
  93. package/lib/event/request.js +0 -15
  94. package/lib/types/adapter.d.ts +0 -581
  95. package/lib/types/adapter.js +0 -1
  96. package/lib/types/api.js +0 -1
  97. package/lib/types/event.d.ts +0 -789
  98. package/lib/types/event.js +0 -1
  99. package/lib/types/onebots11.d.ts +0 -1426
  100. package/lib/types/onebots11.js +0 -1
  101. package/lib/types/reply.js +0 -1
@@ -0,0 +1,425 @@
1
+ import { listener } from '../../../core/index.js';
2
+ import { EventType, KarinMessage, KarinNotice, KarinRequest, MessageSubType, NoticeSubType, RequestSubType, Role, Scene } from '../../../types/index.js';
3
+ export class OB11Event {
4
+ adapter;
5
+ constructor(adapter) {
6
+ this.adapter = adapter;
7
+ }
8
+ /**
9
+ * 处理事件
10
+ * - @param data ob11相关标准数据
11
+ */
12
+ event(data) {
13
+ switch (data.post_type) {
14
+ case 'meta_event':
15
+ this.metaEvent(data);
16
+ return;
17
+ case 'message':
18
+ case 'message_sent':
19
+ this.messageEvent(data);
20
+ return;
21
+ case 'notice':
22
+ this.noticeEvent(data);
23
+ return;
24
+ case 'request':
25
+ this.requestEvent(data);
26
+ return;
27
+ default:
28
+ this.adapter.logger('info', `未知事件:${JSON.stringify(data)}`);
29
+ }
30
+ }
31
+ /**
32
+ * 元事件
33
+ */
34
+ metaEvent(data) {
35
+ if (data.meta_event_type === 'heartbeat') {
36
+ this.adapter.logger('trace', `[心跳]:${JSON.stringify(data.status)}`);
37
+ }
38
+ else {
39
+ const typeMap = {
40
+ enable: 'OneBot启用',
41
+ disable: 'OneBot停用',
42
+ connect: 'WebSocket连接成功',
43
+ };
44
+ const sub_type = data.sub_type;
45
+ this.adapter.logger('debug', `[生命周期]:${typeMap[sub_type]}`);
46
+ }
47
+ }
48
+ /**
49
+ * 消息事件
50
+ */
51
+ messageEvent(data) {
52
+ const message = {
53
+ event: EventType.Message,
54
+ event_id: data.message_id + '',
55
+ sub_event: data.sub_type === 'friend' ? MessageSubType.PrivateMessage : MessageSubType.GroupMessage,
56
+ raw_event: data,
57
+ self_id: data.self_id + '',
58
+ user_id: data.sender.user_id + '',
59
+ time: data.time,
60
+ message_id: data.message_id + '',
61
+ message_seq: data.message_id,
62
+ sender: {
63
+ ...data.sender,
64
+ uid: data.sender.user_id + '',
65
+ uin: data.sender.user_id + '',
66
+ nick: data.sender.nickname || '',
67
+ role: ('role' in data.sender ? data.sender.role || Role.Unknown : Role.Unknown),
68
+ },
69
+ elements: this.adapter.AdapterConvertKarin(data.message),
70
+ contact: {
71
+ scene: data.message_type === 'private' ? Scene.Private : Scene.Group,
72
+ peer: data.message_type === 'private' ? data.sender.user_id : data.group_id,
73
+ sub_peer: '',
74
+ },
75
+ group_id: data.message_type === 'group' ? data.group_id : '',
76
+ raw_message: '',
77
+ };
78
+ const e = new KarinMessage(message);
79
+ e.bot = this.adapter;
80
+ /**
81
+ * 快速回复 开发者不应该使用这个方法,应该使用由karin封装过后的reply方法
82
+ */
83
+ e.replyCallback = async (elements) => await this.adapter.SendMessage(e.contact, elements);
84
+ listener.emit('message', e);
85
+ }
86
+ /**
87
+ * 通知事件
88
+ */
89
+ noticeEvent(data) {
90
+ const time = data.time;
91
+ const self_id = data.self_id + '';
92
+ let notice = {};
93
+ const user_id = data.user_id + '';
94
+ const event_id = `notice.${time}`;
95
+ const sender = {
96
+ uid: data.user_id + '',
97
+ uin: data.user_id + '',
98
+ nick: '',
99
+ role: Role.Unknown,
100
+ };
101
+ const contact = {
102
+ scene: ('group_id' in data ? 'group' : 'friend'),
103
+ peer: 'group_id' in data ? data.group_id : data.user_id,
104
+ sub_peer: '',
105
+ };
106
+ switch (data.notice_type) {
107
+ // 群文件上传
108
+ case 'group_upload': {
109
+ const group_id = data.group_id + '';
110
+ const content = {
111
+ group_id,
112
+ operator_uid: data.user_id + '',
113
+ operator_uin: data.user_id + '',
114
+ file_id: data.file.id,
115
+ file_sub_id: 0,
116
+ file_name: data.file.name,
117
+ file_size: data.file.size,
118
+ expire_time: 0,
119
+ file_url: '',
120
+ };
121
+ const options = {
122
+ raw_event: data,
123
+ time,
124
+ self_id,
125
+ user_id,
126
+ event_id,
127
+ content,
128
+ sender,
129
+ contact,
130
+ group_id,
131
+ sub_event: NoticeSubType.GroupFileUploaded,
132
+ };
133
+ notice = new KarinNotice(options);
134
+ break;
135
+ }
136
+ // 群管理员变动
137
+ case 'group_admin': {
138
+ const group_id = data.group_id + '';
139
+ const content = {
140
+ group_id,
141
+ target_uid: data.user_id + '',
142
+ target_uin: data.user_id + '',
143
+ is_admin: data.sub_type === 'set',
144
+ };
145
+ const options = {
146
+ raw_event: data,
147
+ time,
148
+ self_id,
149
+ user_id,
150
+ event_id,
151
+ sender,
152
+ contact,
153
+ content,
154
+ group_id,
155
+ sub_event: NoticeSubType.GroupAdminChanged,
156
+ };
157
+ notice = new KarinNotice(options);
158
+ break;
159
+ }
160
+ // 群成员减少
161
+ case 'group_decrease': {
162
+ const group_id = data.group_id + '';
163
+ const content = {
164
+ group_id,
165
+ operator_uid: (data.operator_id + '') || '',
166
+ operator_uin: (data.operator_id + '') || '',
167
+ target_uid: data.user_id || '',
168
+ target_uin: data.user_id || '',
169
+ type: data.sub_type,
170
+ };
171
+ const options = {
172
+ raw_event: data,
173
+ time,
174
+ self_id,
175
+ user_id,
176
+ event_id,
177
+ sender,
178
+ contact,
179
+ content,
180
+ group_id,
181
+ sub_event: NoticeSubType.GroupMemberDecrease,
182
+ };
183
+ notice = new KarinNotice(options);
184
+ break;
185
+ }
186
+ // 群成员增加
187
+ case 'group_increase': {
188
+ const group_id = data.group_id + '';
189
+ const content = {
190
+ group_id,
191
+ operator_uid: (data.operator_id || '') + '',
192
+ operator_uin: (data.operator_id || '') + '',
193
+ target_uid: (data.user_id || '') + '',
194
+ target_uin: (data.user_id || '') + '',
195
+ type: data.sub_type,
196
+ };
197
+ const options = {
198
+ raw_event: data,
199
+ time,
200
+ self_id,
201
+ user_id,
202
+ event_id,
203
+ sender,
204
+ contact,
205
+ content,
206
+ group_id,
207
+ sub_event: NoticeSubType.GroupMemberIncrease,
208
+ };
209
+ notice = new KarinNotice(options);
210
+ break;
211
+ }
212
+ // 群禁言事件
213
+ case 'group_ban': {
214
+ const group_id = data.group_id + '';
215
+ const content = {
216
+ group_id,
217
+ operator_uid: (data.operator_id + '') || '',
218
+ operator_uin: (data.operator_id + '') || '',
219
+ target_uid: data.user_id || '',
220
+ target_uin: data.user_id || '',
221
+ duration: data.duration,
222
+ type: data.sub_type,
223
+ };
224
+ const options = {
225
+ raw_event: data,
226
+ time,
227
+ self_id,
228
+ user_id,
229
+ event_id,
230
+ sender,
231
+ contact,
232
+ content,
233
+ group_id,
234
+ sub_event: NoticeSubType.GroupMemberBan,
235
+ };
236
+ notice = new KarinNotice(options);
237
+ break;
238
+ }
239
+ case 'friend_add':
240
+ // todo kritor没有这个事件
241
+ this.adapter.logger('info', `[好友添加]:${JSON.stringify(data)}`);
242
+ break;
243
+ case 'group_recall': {
244
+ const group_id = data.group_id + '';
245
+ const content = {
246
+ group_id,
247
+ operator_uid: (data.operator_id + '') || '',
248
+ operator_uin: (data.operator_id + '') || '',
249
+ target_uid: data.user_id || '',
250
+ target_uin: data.user_id || '',
251
+ message_id: data.message_id,
252
+ tip_text: '撤回了一条消息',
253
+ };
254
+ const options = {
255
+ raw_event: data,
256
+ time,
257
+ self_id,
258
+ user_id,
259
+ event_id,
260
+ sender,
261
+ contact,
262
+ content,
263
+ group_id,
264
+ sub_event: NoticeSubType.GroupRecall,
265
+ };
266
+ notice = new KarinNotice(options);
267
+ break;
268
+ }
269
+ case 'friend_recall': {
270
+ const content = {
271
+ operator_uid: data.user_id || '',
272
+ operator_uin: data.user_id || '',
273
+ message_id: data.message_id,
274
+ tip_text: '撤回了一条消息',
275
+ };
276
+ const options = {
277
+ raw_event: data,
278
+ time,
279
+ self_id,
280
+ user_id,
281
+ event_id,
282
+ sender,
283
+ contact,
284
+ content,
285
+ sub_event: NoticeSubType.PrivateRecall,
286
+ };
287
+ notice = new KarinNotice(options);
288
+ break;
289
+ }
290
+ case 'notify':
291
+ switch (data.sub_type) {
292
+ case 'poke': {
293
+ const group_id = 'group_id' in data ? data.group_id + '' : '';
294
+ const content = {
295
+ group_id,
296
+ operator_uid: data.user_id + '',
297
+ operator_uin: data.user_id + '',
298
+ target_uid: data.target_id + '',
299
+ target_uin: data.target_id + '',
300
+ action: '戳了戳',
301
+ suffix: '',
302
+ action_image: '',
303
+ };
304
+ const options = {
305
+ raw_event: data,
306
+ time,
307
+ self_id,
308
+ user_id,
309
+ event_id,
310
+ sender,
311
+ contact,
312
+ content,
313
+ group_id,
314
+ sub_event: data.group_id ? NoticeSubType.GroupPoke : NoticeSubType.PrivatePoke,
315
+ };
316
+ notice = new KarinNotice(options);
317
+ break;
318
+ }
319
+ case 'lucky_king':
320
+ // todo kritor没有这个事件
321
+ this.adapter.logger('info', `[运气王]:${JSON.stringify(data)}`);
322
+ break;
323
+ case 'honor':
324
+ // todo kritor没有这个事件
325
+ this.adapter.logger('info', `[群荣誉变更]:${JSON.stringify(data)}`);
326
+ break;
327
+ }
328
+ break;
329
+ case 'group_msg_emoji_like': {
330
+ const group_id = data.group_id + '';
331
+ const content = {
332
+ group_id,
333
+ message_id: data.message_id,
334
+ face_id: data.likes[0].emoji_id,
335
+ is_set: true,
336
+ };
337
+ const options = {
338
+ raw_event: data,
339
+ time,
340
+ self_id,
341
+ user_id,
342
+ event_id,
343
+ sender,
344
+ contact,
345
+ content,
346
+ group_id,
347
+ sub_event: NoticeSubType.GroupMessageReaction,
348
+ };
349
+ notice = new KarinNotice(options);
350
+ break;
351
+ }
352
+ default: {
353
+ return this.adapter.logger('error', '未知通知事件:', JSON.stringify(data));
354
+ }
355
+ }
356
+ listener.emit('notice', notice);
357
+ }
358
+ /** 请求事件 */
359
+ requestEvent(data) {
360
+ switch (data.request_type) {
361
+ case 'friend': {
362
+ const request = new KarinRequest({
363
+ raw_event: data,
364
+ event_id: `request.${data.time}`,
365
+ self_id: data.self_id + '',
366
+ user_id: data.user_id + '',
367
+ time: data.time,
368
+ contact: {
369
+ scene: Scene.Private,
370
+ peer: data.user_id + '',
371
+ sub_peer: '',
372
+ },
373
+ sender: {
374
+ uid: data.user_id + '',
375
+ uin: data.user_id + '',
376
+ nick: '',
377
+ role: Role.Unknown,
378
+ },
379
+ sub_event: RequestSubType.PrivateApply,
380
+ content: {
381
+ applier_uid: data.user_id + '',
382
+ applier_uin: data.user_id + '',
383
+ message: data.comment,
384
+ },
385
+ });
386
+ listener.emit('request', request);
387
+ return;
388
+ }
389
+ case 'group': {
390
+ const request = new KarinRequest({
391
+ raw_event: data,
392
+ event_id: `request.${data.time}`,
393
+ self_id: data.self_id + '',
394
+ user_id: data.user_id + '',
395
+ time: data.time,
396
+ contact: {
397
+ scene: Scene.Group,
398
+ peer: data.group_id + '',
399
+ sub_peer: '',
400
+ },
401
+ sender: {
402
+ uid: data.user_id + '',
403
+ uin: data.user_id + '',
404
+ nick: '',
405
+ role: Role.Unknown,
406
+ },
407
+ sub_event: data.sub_type === 'add' ? RequestSubType.GroupApply : RequestSubType.InvitedGroup,
408
+ content: {
409
+ group_id: data.group_id + '',
410
+ applier_uid: data.user_id + '',
411
+ applier_uin: data.user_id + '',
412
+ inviter_uid: data.user_id + '',
413
+ inviter_uin: data.user_id + '',
414
+ message: data.comment,
415
+ },
416
+ });
417
+ listener.emit('request', request);
418
+ return;
419
+ }
420
+ default: {
421
+ this.adapter.logger('info', `未知请求事件:${JSON.stringify(data)}`);
422
+ }
423
+ }
424
+ }
425
+ }