node-karin 0.8.10 → 0.8.13

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 (42) hide show
  1. package/lib/adapter/index.d.ts +0 -2
  2. package/lib/adapter/index.js +0 -2
  3. package/lib/adapter/input/index.js +8 -4
  4. package/lib/cli/karin.js +2 -1
  5. package/lib/core/karin.d.ts +37 -4
  6. package/lib/core/karin.js +35 -4
  7. package/lib/core/listener.d.ts +2 -1
  8. package/lib/core/listener.js +23 -2
  9. package/lib/core/plugin.app.d.ts +1 -0
  10. package/lib/core/plugin.app.js +1 -0
  11. package/lib/core/plugin.d.ts +2 -2
  12. package/lib/core/plugin.loader.js +1 -3
  13. package/lib/core/server.d.ts +1 -1
  14. package/lib/core/server.js +0 -3
  15. package/lib/index.d.ts +0 -1
  16. package/lib/index.js +0 -1
  17. package/lib/render/client.d.ts +2 -2
  18. package/lib/render/client.js +1 -1
  19. package/lib/types/event/event.d.ts +13 -1
  20. package/lib/types/event/notice.d.ts +1 -1
  21. package/lib/types/event/notice.js +2 -1
  22. package/lib/types/event/request.d.ts +1 -1
  23. package/lib/types/event/request.js +2 -1
  24. package/lib/types/plugin.d.ts +13 -4
  25. package/lib/utils/common.d.ts +1 -1
  26. package/lib/utils/common.js +5 -1
  27. package/lib/utils/config.js +3 -1
  28. package/lib/utils/handler.d.ts +2 -2
  29. package/lib/utils/init.js +1 -3
  30. package/package.json +7 -6
  31. package/lib/adapter/kritor/grpc.d.ts +0 -33
  32. package/lib/adapter/kritor/grpc.js +0 -997
  33. package/lib/adapter/kritor/index.d.ts +0 -411
  34. package/lib/adapter/kritor/index.js +0 -1188
  35. package/lib/modules/grpc-js.d.ts +0 -2
  36. package/lib/modules/grpc-js.js +0 -2
  37. package/lib/modules/kritor-proto.d.ts +0 -2
  38. package/lib/modules/kritor-proto.js +0 -2
  39. package/lib/modules/proto-loader.d.ts +0 -2
  40. package/lib/modules/proto-loader.js +0 -2
  41. package/modules.d.ts +0 -15
  42. package/modules.js +0 -15
@@ -1,997 +0,0 @@
1
- import AdapterKritor from './index.js';
2
- import * as grpc from '@grpc/grpc-js';
3
- import { listener } from '../../core/index.js';
4
- import { kritor, proto } from 'kritor-proto';
5
- import { common, config, logger, segment } from '../../utils/index.js';
6
- import * as protoLoader from '@grpc/proto-loader';
7
- import { KarinMessage, KarinNotice } from '../../types/index.js';
8
- export class KritorGrpc {
9
- /**
10
- * - proto 文件路径
11
- */
12
- dir;
13
- #server;
14
- BotMap;
15
- constructor() {
16
- this.dir = proto;
17
- this.#server = new grpc.Server();
18
- this.BotMap = new Map();
19
- }
20
- /**
21
- * 获取 proto 文件
22
- * @param filename 文件名
23
- */
24
- getProto(filename) {
25
- filename = `${this.dir}/${filename}`;
26
- const dirs = [this.dir];
27
- const definition = protoLoader.loadSync(filename, {
28
- includeDirs: dirs,
29
- keepCase: true,
30
- longs: String,
31
- // enums: String,
32
- defaults: true,
33
- oneofs: true,
34
- });
35
- return grpc.loadPackageDefinition(definition);
36
- }
37
- /**
38
- * 初始化 gRPC 服务器
39
- */
40
- init() {
41
- try {
42
- const authenticationProtoGrpcType = this.getProto('auth/authentication.proto');
43
- const coreProtoGrpcType = this.getProto('core/core.proto');
44
- const customizationGrpcType = this.getProto('developer/customization.proto');
45
- const developerGrpcType = this.getProto('developer/developer.proto');
46
- const QsignGrpcType = this.getProto('developer/qsign.proto');
47
- const eventProtoGrpcType = this.getProto('event/event.proto');
48
- const GroupFileGrpcType = this.getProto('file/group_file.proto');
49
- const friendGrpcType = this.getProto('friend/friend.proto');
50
- const groupGrpcType = this.getProto('group/group.proto');
51
- const guildGrpcType = this.getProto('guild/guild.proto');
52
- const messageProtoGrpcType = this.getProto('message/message.proto');
53
- const reverseProtoGrpcType = this.getProto('reverse/reverse.proto');
54
- const webGrpcType = this.getProto('web/web.proto');
55
- const authenticationServer = {
56
- RegisterPassiveListener: (grpc) => {
57
- const metadata = grpc.metadata.getMap();
58
- const { 'kritor-self-uid': uid, 'kritor-self-uin': uin } = metadata;
59
- /** 监听上报事件 */
60
- grpc.on('data', (data) => {
61
- const str = data.toString();
62
- logger.bot('debug', uin, '上报事件:', str);
63
- const bot = listener.getBot(uid);
64
- if (!bot) {
65
- logger.bot('warn', uin, '未注册Bot,忽略事件: ', str);
66
- return;
67
- }
68
- const self_id = uid;
69
- switch (data.type) {
70
- /** 消息事件 */
71
- case kritor.event.EventType.EVENT_TYPE_MESSAGE: {
72
- const kritorData = data.message;
73
- const sender = kritorData.sender;
74
- const contact = kritorData.contact;
75
- const { role, scene } = this.KarinSceneContact(contact, sender);
76
- const e = new KarinMessage({
77
- event: "message" /* EventType.Message */,
78
- raw_event: data,
79
- event_id: kritorData.message_id + '',
80
- self_id,
81
- user_id: sender.uid + '',
82
- time: kritorData.time,
83
- sub_event: scene === "group" /* Scene.Group */ ? "group_message" /* MessageSubType.GroupMessage */ : "private_message" /* MessageSubType.PrivateMessage */,
84
- message_id: kritorData.message_id + '',
85
- message_seq: Number(kritorData.message_seq),
86
- sender: {
87
- ...sender,
88
- uid: sender.uid + '',
89
- uin: sender.uin + '',
90
- nick: sender.nick || '',
91
- role,
92
- },
93
- elements: this.AdapterConvertKarin(kritorData.elements),
94
- contact: {
95
- scene,
96
- peer: contact.peer + '',
97
- sub_peer: contact.sub_peer + '',
98
- },
99
- group_id: scene === 'group' ? contact.peer + '' : '',
100
- });
101
- e.bot = bot;
102
- e.replyCallback = (elements) => {
103
- return bot.SendMessage(contact, elements);
104
- };
105
- listener.emit('message', e);
106
- return;
107
- }
108
- /** 请求事件 */
109
- case kritor.event.EventType.EVENT_TYPE_REQUEST: {
110
- if (data)
111
- return logger.error('暂未完成');
112
- // const notice = Converters.noticeConverter.convert(data.notice, uin || uid)
113
- listener.emit('notice', data);
114
- break;
115
- }
116
- /** 通知事件 */
117
- case kritor.event.EventType.EVENT_TYPE_NOTICE: {
118
- let e = {};
119
- const kritorData = data.message;
120
- const time = Number(kritorData.time);
121
- switch (kritorData.type) {
122
- /** 好友头像戳一戳 */
123
- case kritor.event.NoticeEvent.NoticeType.PRIVATE_POKE: {
124
- const data = kritorData.private_poke;
125
- const uid = data.operator_uid;
126
- const uin = data.operator_uin;
127
- const contact = {
128
- scene: "friend" /* Scene.Private */,
129
- peer: uid,
130
- sub_peer: '',
131
- };
132
- const content = {
133
- group_id: contact.peer + '',
134
- operator_uid: uid,
135
- operator_uin: data.operator_uin + '',
136
- target_uid: uid + '',
137
- target_uin: uin + '',
138
- action: '戳了戳',
139
- suffix: data.suffix,
140
- action_image: data.action_image,
141
- };
142
- const options = {
143
- raw_event: data,
144
- self_id,
145
- time,
146
- user_id: uid,
147
- event_id: kritorData.notice_id,
148
- contact,
149
- content,
150
- sender: {
151
- uid: uid + '',
152
- uin: uin + '',
153
- nick: '',
154
- role: "unknown" /* Role.Unknown */,
155
- },
156
- sub_event: "private_poke" /* NoticeSubType.PrivatePoke */,
157
- };
158
- e = new KarinNotice(options);
159
- break;
160
- }
161
- /** 好友消息撤回 */
162
- case kritor.event.NoticeEvent.NoticeType.PRIVATE_RECALL: {
163
- const data = kritorData.private_recall;
164
- const uid = data.operator_uid;
165
- const uin = data.operator_uin;
166
- const contact = {
167
- scene: "friend" /* Scene.Private */,
168
- peer: uid,
169
- sub_peer: '',
170
- };
171
- const content = {
172
- operator_uid: uid || '',
173
- operator_uin: uin + '' || '',
174
- message_id: data.message_id,
175
- tip_text: '撤回了一条消息',
176
- };
177
- const options = {
178
- raw_event: data,
179
- self_id,
180
- time,
181
- user_id: uid,
182
- event_id: kritorData.notice_id,
183
- contact,
184
- content,
185
- sender: {
186
- uid: uid + '',
187
- uin: uin + '',
188
- nick: '',
189
- role: "unknown" /* Role.Unknown */,
190
- },
191
- sub_event: "private_recall" /* NoticeSubType.PrivateRecall */,
192
- };
193
- e = new KarinNotice(options);
194
- break;
195
- }
196
- /** 私聊文件上传 */
197
- case kritor.event.NoticeEvent.NoticeType.PRIVATE_FILE_UPLOADED: {
198
- const data = kritorData.private_file_uploaded;
199
- const uid = data.operator_uid;
200
- const uin = data.operator_uin;
201
- const contact = {
202
- scene: "friend" /* Scene.Private */,
203
- peer: uid,
204
- sub_peer: '',
205
- };
206
- const content = {
207
- group_id: '',
208
- operator_uid: uid + '',
209
- operator_uin: uin + '' + '',
210
- file_id: data.file_id,
211
- file_sub_id: Number(data.file_sub_id),
212
- file_name: data.file_name,
213
- file_size: Number(data.file_size),
214
- expire_time: Number(data.expire_time),
215
- file_url: data.file_url,
216
- };
217
- const options = {
218
- raw_event: data,
219
- self_id,
220
- time,
221
- user_id: uid,
222
- event_id: kritorData.notice_id,
223
- contact,
224
- content,
225
- sender: {
226
- uid: uid + '',
227
- uin: uin + '',
228
- nick: '',
229
- role: "unknown" /* Role.Unknown */,
230
- },
231
- sub_event: "private_file_uploaded" /* NoticeSubType.PrivateFileUploaded */,
232
- };
233
- e = new KarinNotice(options);
234
- break;
235
- }
236
- /** 群头像戳一戳 */
237
- case kritor.event.NoticeEvent.NoticeType.GROUP_POKE: {
238
- const data = kritorData.group_poke;
239
- const uid = data.operator_uid;
240
- const uin = data.operator_uin;
241
- const group_id = data.group_id + '';
242
- const contact = {
243
- scene: "group" /* Scene.Group */,
244
- peer: group_id,
245
- sub_peer: '',
246
- };
247
- const content = {
248
- group_id: data.group_id + '',
249
- operator_uid: data.operator_uid + '',
250
- operator_uin: data.operator_uin + '',
251
- target_uid: data.target_uid + '',
252
- target_uin: data.target_uin + '',
253
- action: '戳了戳',
254
- suffix: data.suffix,
255
- action_image: data.action_image,
256
- };
257
- const options = {
258
- raw_event: data,
259
- self_id,
260
- time,
261
- user_id: uid,
262
- event_id: kritorData.notice_id,
263
- contact,
264
- content,
265
- sender: {
266
- uid: uid + '',
267
- uin: uin + '',
268
- nick: '',
269
- role: "unknown" /* Role.Unknown */,
270
- },
271
- group_id: data.group_id + '',
272
- sub_event: "group_poke" /* NoticeSubType.GroupPoke */,
273
- };
274
- e = new KarinNotice(options);
275
- break;
276
- }
277
- /** 群名片改变 */
278
- case kritor.event.NoticeEvent.NoticeType.GROUP_CARD_CHANGED: {
279
- const data = kritorData.group_card_changed;
280
- const uid = data.operator_uid;
281
- const uin = data.operator_uin;
282
- const group_id = data.group_id + '';
283
- const contact = {
284
- scene: "group" /* Scene.Group */,
285
- peer: group_id,
286
- sub_peer: '',
287
- };
288
- const content = {
289
- group_id,
290
- operator_uid: data.operator_uid + '',
291
- operator_uin: data.operator_uin + '',
292
- target_uid: data.target_uid + '',
293
- target_uin: data.target_uin + '',
294
- new_card: data.new_card,
295
- };
296
- const options = {
297
- raw_event: data,
298
- self_id,
299
- time,
300
- user_id: uid,
301
- event_id: kritorData.notice_id,
302
- contact,
303
- content,
304
- sender: {
305
- uid: uid + '',
306
- uin: uin + '',
307
- nick: '',
308
- role: "unknown" /* Role.Unknown */,
309
- },
310
- group_id,
311
- sub_event: "group_card_changed" /* NoticeSubType.GroupCardChanged */,
312
- };
313
- e = new KarinNotice(options);
314
- break;
315
- }
316
- /** 群成员专属头衔改变 */
317
- case kritor.event.NoticeEvent.NoticeType.GROUP_MEMBER_UNIQUE_TITLE_CHANGED: {
318
- const data = kritorData.group_member_unique_title_changed;
319
- const uid = data.target_uid;
320
- const uin = data.target_uin;
321
- const group_id = data.group_id + '';
322
- const contact = {
323
- scene: "group" /* Scene.Group */,
324
- peer: group_id,
325
- sub_peer: '',
326
- };
327
- const content = {
328
- group_id,
329
- target_uid: data.target_uid + '',
330
- target_uin: data.target_uin + '',
331
- title: data.title,
332
- };
333
- const options = {
334
- raw_event: data,
335
- self_id,
336
- time,
337
- user_id: uid,
338
- event_id: kritorData.notice_id,
339
- contact,
340
- content,
341
- sender: {
342
- uid: uid + '',
343
- uin: uin + '',
344
- nick: '',
345
- role: "unknown" /* Role.Unknown */,
346
- },
347
- group_id,
348
- sub_event: "group_member_unique_title_changed" /* NoticeSubType.GroupMemberUniqueTitleChanged */,
349
- };
350
- e = new KarinNotice(options);
351
- break;
352
- }
353
- /** 群精华消息改变 */
354
- case kritor.event.NoticeEvent.NoticeType.GROUP_ESSENCE_CHANGED: {
355
- const data = kritorData.group_essence_changed;
356
- const uid = data.operator_uid;
357
- const uin = data.operator_uin;
358
- const group_id = data.group_id + '';
359
- const contact = {
360
- scene: "group" /* Scene.Group */,
361
- peer: group_id,
362
- sub_peer: '',
363
- };
364
- const content = {
365
- group_id,
366
- operator_uid: data.operator_uid + '',
367
- operator_uin: data.operator_uin + '',
368
- target_uid: data.target_uid + '',
369
- target_uin: data.target_uin + '',
370
- message_id: data.message_id + '',
371
- is_set: data.is_set,
372
- };
373
- const options = {
374
- raw_event: data,
375
- self_id,
376
- time,
377
- user_id: uid,
378
- event_id: kritorData.notice_id,
379
- contact,
380
- content,
381
- sender: {
382
- uid: uid + '',
383
- uin: uin + '',
384
- nick: '',
385
- role: "unknown" /* Role.Unknown */,
386
- },
387
- group_id,
388
- sub_event: "group_essence_changed" /* NoticeSubType.GroupEssenceChanged */,
389
- };
390
- e = new KarinNotice(options);
391
- break;
392
- }
393
- /** 群消息撤回 */
394
- case kritor.event.NoticeEvent.NoticeType.GROUP_RECALL: {
395
- const data = kritorData.group_recall;
396
- const uid = data.operator_uid;
397
- const uin = data.operator_uin;
398
- const group_id = data.group_id + '';
399
- const contact = {
400
- scene: "group" /* Scene.Group */,
401
- peer: group_id,
402
- sub_peer: '',
403
- };
404
- const content = {
405
- group_id,
406
- operator_uid: data.operator_uid + '',
407
- operator_uin: data.operator_uin + '',
408
- target_uid: data.target_uid + '',
409
- target_uin: data.target_uin + '',
410
- message_id: data.message_id + '',
411
- tip_text: data.tip_text,
412
- };
413
- const options = {
414
- raw_event: data,
415
- self_id,
416
- time,
417
- user_id: uid,
418
- event_id: kritorData.notice_id,
419
- contact,
420
- content,
421
- sender: {
422
- uid: uid + '',
423
- uin: uin + '',
424
- nick: '',
425
- role: "unknown" /* Role.Unknown */,
426
- },
427
- group_id,
428
- sub_event: "group_recall" /* NoticeSubType.GroupRecall */,
429
- };
430
- e = new KarinNotice(options);
431
- break;
432
- }
433
- /** 群成员增加 */
434
- case kritor.event.NoticeEvent.NoticeType.GROUP_MEMBER_INCREASE: {
435
- const data = kritorData.group_member_increase;
436
- const uid = data.operator_uid;
437
- const uin = data.operator_uin;
438
- const group_id = data.group_id + '';
439
- const contact = {
440
- scene: "group" /* Scene.Group */,
441
- peer: group_id,
442
- sub_peer: '',
443
- };
444
- const typeMap = {
445
- [kritor.event.GroupMemberIncreasedNotice.GroupMemberIncreasedType.INVITE]: 'invite',
446
- [kritor.event.GroupMemberIncreasedNotice.GroupMemberIncreasedType.APPROVE]: 'approve',
447
- };
448
- const content = {
449
- group_id,
450
- operator_uid: data.operator_uid + '',
451
- operator_uin: data.operator_uin + '',
452
- target_uid: data.target_uid + '',
453
- target_uin: data.target_uin + '',
454
- type: typeMap[data.type],
455
- };
456
- const options = {
457
- raw_event: data,
458
- self_id,
459
- time,
460
- user_id: uid,
461
- event_id: kritorData.notice_id,
462
- contact,
463
- content,
464
- sender: {
465
- uid: uid + '',
466
- uin: uin + '',
467
- nick: '',
468
- role: "unknown" /* Role.Unknown */,
469
- },
470
- group_id,
471
- sub_event: "group_member_increase" /* NoticeSubType.GroupMemberIncrease */,
472
- };
473
- e = new KarinNotice(options);
474
- break;
475
- }
476
- /** 群成员减少 */
477
- case kritor.event.NoticeEvent.NoticeType.GROUP_MEMBER_DECREASE: {
478
- const data = kritorData.group_member_decrease;
479
- const uid = String(data.operator_uid);
480
- const uin = String(data.operator_uin);
481
- const group_id = data.group_id + '';
482
- const contact = {
483
- scene: "group" /* Scene.Group */,
484
- peer: group_id,
485
- sub_peer: '',
486
- };
487
- const typeMap = {
488
- [kritor.event.GroupMemberDecreasedNotice.GroupMemberDecreasedType.LEAVE]: 'leave',
489
- [kritor.event.GroupMemberDecreasedNotice.GroupMemberDecreasedType.KICK]: 'kick',
490
- [kritor.event.GroupMemberDecreasedNotice.GroupMemberDecreasedType.KICK_ME]: 'kick_me',
491
- };
492
- const content = {
493
- group_id,
494
- operator_uid: data.operator_uid + '',
495
- operator_uin: data.operator_uin + '',
496
- target_uid: data.target_uid + '',
497
- target_uin: data.target_uin + '',
498
- type: typeMap[data.type],
499
- };
500
- const options = {
501
- raw_event: data,
502
- self_id,
503
- time,
504
- user_id: uid,
505
- event_id: kritorData.notice_id,
506
- contact,
507
- content,
508
- sender: {
509
- uid: uid + '',
510
- uin: uin + '',
511
- nick: '',
512
- role: "unknown" /* Role.Unknown */,
513
- },
514
- group_id,
515
- sub_event: "group_member_decrease" /* NoticeSubType.GroupMemberDecrease */,
516
- };
517
- e = new KarinNotice(options);
518
- break;
519
- }
520
- /** 群管理员变动 */
521
- case kritor.event.NoticeEvent.NoticeType.GROUP_ADMIN_CHANGED: {
522
- const data = kritorData.group_admin_changed;
523
- const uid = String(data.target_uid);
524
- const uin = String(data.target_uid);
525
- const group_id = data.group_id + '';
526
- const contact = {
527
- scene: "group" /* Scene.Group */,
528
- peer: group_id,
529
- sub_peer: '',
530
- };
531
- const content = {
532
- group_id,
533
- target_uid: data.target_uid + '',
534
- target_uin: data.target_uin + '',
535
- is_admin: data.is_admin,
536
- };
537
- const options = {
538
- raw_event: data,
539
- self_id,
540
- time,
541
- user_id: uid,
542
- event_id: kritorData.notice_id,
543
- contact,
544
- content,
545
- sender: {
546
- uid: uid + '',
547
- uin: uin + '',
548
- nick: '',
549
- role: "unknown" /* Role.Unknown */,
550
- },
551
- group_id,
552
- sub_event: "group_admin_changed" /* NoticeSubType.GroupAdminChanged */,
553
- };
554
- e = new KarinNotice(options);
555
- break;
556
- }
557
- /** 群成员被禁言 */
558
- case kritor.event.NoticeEvent.NoticeType.GROUP_MEMBER_BAN: {
559
- const data = kritorData.group_member_ban;
560
- const uid = String(data.operator_uid);
561
- const uin = String(data.operator_uid);
562
- const group_id = data.group_id + '';
563
- const contact = {
564
- scene: "group" /* Scene.Group */,
565
- peer: group_id,
566
- sub_peer: '',
567
- };
568
- const typeMap = {
569
- [kritor.event.GroupMemberBanNotice.GroupMemberBanType.BAN]: 'ban',
570
- [kritor.event.GroupMemberBanNotice.GroupMemberBanType.LIFT_BAN]: 'lift_ban',
571
- };
572
- const content = {
573
- group_id,
574
- operator_uid: uid,
575
- operator_uin: uin,
576
- target_uid: data.target_uid + '',
577
- target_uin: data.target_uin + '',
578
- duration: data.duration,
579
- type: typeMap[data.type],
580
- };
581
- const options = {
582
- raw_event: data,
583
- self_id,
584
- time,
585
- user_id: uid,
586
- event_id: kritorData.notice_id,
587
- contact,
588
- content,
589
- sender: {
590
- uid: uid + '',
591
- uin: uin + '',
592
- nick: '',
593
- role: "unknown" /* Role.Unknown */,
594
- },
595
- group_id,
596
- sub_event: "group_member_ban" /* NoticeSubType.GroupMemberBan */,
597
- };
598
- e = new KarinNotice(options);
599
- break;
600
- }
601
- /** 群签到 */
602
- case kritor.event.NoticeEvent.NoticeType.GROUP_SIGN_IN: {
603
- const data = kritorData.group_sign_in;
604
- const uid = String(data.target_uid);
605
- const uin = String(data.target_uid);
606
- const group_id = data.group_id + '';
607
- const contact = {
608
- scene: "group" /* Scene.Group */,
609
- peer: group_id,
610
- sub_peer: '',
611
- };
612
- const content = {
613
- group_id,
614
- target_uid: uid,
615
- target_uin: uin,
616
- action: data.action,
617
- rank_image: data.rank_image,
618
- };
619
- const options = {
620
- raw_event: data,
621
- self_id,
622
- time,
623
- user_id: uid,
624
- event_id: kritorData.notice_id,
625
- contact,
626
- content,
627
- sender: {
628
- uid: uid + '',
629
- uin: uin + '',
630
- nick: '',
631
- role: "unknown" /* Role.Unknown */,
632
- },
633
- group_id,
634
- sub_event: "group_sign_in" /* NoticeSubType.GroupSignIn */,
635
- };
636
- e = new KarinNotice(options);
637
- break;
638
- }
639
- /** 群全员禁言 */
640
- case kritor.event.NoticeEvent.NoticeType.GROUP_WHOLE_BAN: {
641
- const data = kritorData.group_whole_ban;
642
- const uid = String(data.operator_uid);
643
- const uin = String(data.operator_uid);
644
- const group_id = data.group_id + '';
645
- const contact = {
646
- scene: "group" /* Scene.Group */,
647
- peer: group_id,
648
- sub_peer: '',
649
- };
650
- const content = {
651
- group_id,
652
- operator_uid: uid,
653
- operator_uin: uin,
654
- is_ban: data.is_ban,
655
- };
656
- const options = {
657
- raw_event: data,
658
- self_id,
659
- time,
660
- user_id: uid,
661
- event_id: kritorData.notice_id,
662
- contact,
663
- content,
664
- sender: {
665
- uid: uid + '',
666
- uin: uin + '',
667
- nick: '',
668
- role: "unknown" /* Role.Unknown */,
669
- },
670
- group_id,
671
- sub_event: "group_whole_ban" /* NoticeSubType.GroupWholeBan */,
672
- };
673
- e = new KarinNotice(options);
674
- break;
675
- }
676
- /** 群文件上传 */
677
- case kritor.event.NoticeEvent.NoticeType.GROUP_FILE_UPLOADED: {
678
- const data = kritorData.group_file_uploaded;
679
- const uid = String(data.operator_uid);
680
- const uin = String(data.operator_uid);
681
- const group_id = data.group_id + '';
682
- const contact = {
683
- scene: "group" /* Scene.Group */,
684
- peer: group_id,
685
- sub_peer: '',
686
- };
687
- const content = {
688
- group_id,
689
- operator_uid: uid,
690
- operator_uin: uin,
691
- file_id: data.file_id,
692
- file_name: data.file_name,
693
- file_size: Number(data.file_size),
694
- file_sub_id: Number(data.file_sub_id),
695
- expire_time: Number(data.expire_time),
696
- file_url: data.file_url,
697
- };
698
- const options = {
699
- raw_event: data,
700
- self_id,
701
- time,
702
- user_id: uid,
703
- event_id: kritorData.notice_id,
704
- contact,
705
- content,
706
- sender: {
707
- uid: uid + '',
708
- uin: uin + '',
709
- nick: '',
710
- role: "unknown" /* Role.Unknown */,
711
- },
712
- group_id,
713
- sub_event: "group_file_uploaded" /* NoticeSubType.GroupFileUploaded */,
714
- };
715
- e = new KarinNotice(options);
716
- break;
717
- }
718
- }
719
- e.bot = bot;
720
- e.replyCallback = (elements) => {
721
- return bot.SendMessage(e.contact, elements);
722
- };
723
- listener.emit('request', e);
724
- return;
725
- }
726
- /** 元事件 */
727
- case kritor.event.EventType.EVENT_TYPE_CORE_EVENT: {
728
- logger.info('核心事件: ' + JSON.stringify(data.toJSON()));
729
- }
730
- }
731
- });
732
- },
733
- ReverseStream: (grpc) => {
734
- const metadata = grpc.metadata.getMap();
735
- const { 'kritor-self-uid': uid, 'kritor-self-uin': uin } = metadata;
736
- logger.debug('gRPC ', metadata);
737
- const bot = new AdapterKritor(grpc, uid, uin + '');
738
- this.BotMap.set(uid, bot);
739
- /** 注册bot */
740
- const index = listener.addBot({ type: bot.adapter.type, bot });
741
- if (index)
742
- bot.adapter.index = index;
743
- },
744
- };
745
- this.#server.addService(coreProtoGrpcType.kritor.core.CoreService.service, authenticationServer);
746
- this.#server.addService(authenticationProtoGrpcType.kritor.authentication.AuthenticationService.service, authenticationServer);
747
- this.#server.addService(eventProtoGrpcType.kritor.event.EventService.service, authenticationServer);
748
- this.#server.addService(reverseProtoGrpcType.kritor.reverse.ReverseService.service, authenticationServer);
749
- this.#server.addService(messageProtoGrpcType.kritor.message.MessageService.service, authenticationServer);
750
- this.#server.addService(friendGrpcType.kritor.friend.FriendService.service, authenticationServer);
751
- this.#server.addService(groupGrpcType.kritor.group.GroupService.service, authenticationServer);
752
- this.#server.addService(guildGrpcType.kritor.guild.GuildService.service, authenticationServer);
753
- this.#server.addService(GroupFileGrpcType.kritor.file.GroupFileService.service, authenticationServer);
754
- this.#server.addService(customizationGrpcType.kritor.customization.CustomizationService.service, authenticationServer);
755
- this.#server.addService(developerGrpcType.kritor.developer.DeveloperService.service, authenticationServer);
756
- this.#server.addService(QsignGrpcType.kritor.developer.QsignService.service, authenticationServer);
757
- this.#server.addService(webGrpcType.kritor.web.WebService.service, authenticationServer);
758
- this.#server.bindAsync(config.Server.grpc.host, grpc.ServerCredentials.createInsecure(), (err) => {
759
- if (err) {
760
- logger.error('grpc服务器启动失败:', err);
761
- }
762
- else {
763
- logger.info('[服务器][启动成功][grpc]: ', logger.green(`http://${config.Server.grpc.host}`));
764
- }
765
- });
766
- listener.once('restart.grpc', () => {
767
- logger.mark('[服务器][重启][grpc] 正在重启grpc服务器...');
768
- this.#restart();
769
- });
770
- /** 关闭 gRPC 服务器 */
771
- listener.once('exit_grpc', () => this.#server.forceShutdown());
772
- }
773
- catch (error) {
774
- logger.error('初始化grpc服务器失败: ', error);
775
- }
776
- }
777
- /**
778
- * 重启 gRPC 服务器
779
- */
780
- async #restart() {
781
- this.#server.forceShutdown();
782
- /** 延迟1秒 */
783
- await common.sleep(1000);
784
- this.init();
785
- }
786
- /**
787
- * scene contact转换器
788
- */
789
- KarinSceneContact(contact, sender) {
790
- /** scene映射表 */
791
- const sceneMap = {
792
- [kritor.common.Scene.GROUP]: "group" /* Scene.Group */,
793
- [kritor.common.Scene.FRIEND]: "friend" /* Scene.Private */,
794
- [kritor.common.Scene.GUILD]: "guild" /* Scene.Guild */,
795
- [kritor.common.Scene.NEARBY]: "nearby" /* Scene.Nearby */,
796
- [kritor.common.Scene.STRANGER]: "stranger" /* Scene.Stranger */,
797
- [kritor.common.Scene.STRANGER_FROM_GROUP]: "stranger_from_group" /* Scene.StrangerFromGroup */,
798
- };
799
- const roleMap = {
800
- [kritor.common.Role.OWNER]: "owner" /* Role.Owner */,
801
- [kritor.common.Role.ADMIN]: "admin" /* Role.Admin */,
802
- [kritor.common.Role.MEMBER]: "member" /* Role.Member */,
803
- [kritor.common.Role.UNKNOWN]: "unknown" /* Role.Unknown */,
804
- };
805
- /*
806
- 0=群聊 1=私聊 2=频道 5=附近的人 6=陌生人 10=群临时会话
807
- 0=group 1=friend 2=guild 5=nearby 6=stranger 10=stranger_from_group
808
- */
809
- const scene = sceneMap[contact.scene];
810
- const role = roleMap?.[sender.role] || "unknown" /* Role.Unknown */;
811
- return { scene, role };
812
- }
813
- /**
814
- * kritor 转 karin
815
- * @param data 消息数据
816
- */
817
- AdapterConvertKarin(data) {
818
- const elements = [];
819
- for (const i of data) {
820
- switch (i.type) {
821
- /** 文本消息 */
822
- case kritor.common.Element.ElementType.TEXT: {
823
- const text = i.text.text;
824
- elements.push(segment.text(text));
825
- break;
826
- }
827
- /** 艾特消息 */
828
- case kritor.common.Element.ElementType.AT: {
829
- const uid = i.at.uid;
830
- const uin = String(i.at.uin);
831
- elements.push(segment.at(uid, uin));
832
- break;
833
- }
834
- /** 表情消息 */
835
- case kritor.common.Element.ElementType.FACE: {
836
- const face = i.face.id;
837
- const is_big = i.face.is_big;
838
- elements.push(segment.face(face, is_big));
839
- break;
840
- }
841
- /** 图片消息 */
842
- case kritor.common.Element.ElementType.IMAGE: {
843
- const file_url = i.image.file_url;
844
- const typeMap = {
845
- [kritor.common.ImageElement.ImageType.COMMON]: 'show',
846
- [kritor.common.ImageElement.ImageType.ORIGIN]: 'original',
847
- [kritor.common.ImageElement.ImageType.FLASH]: 'flash',
848
- };
849
- const options = {
850
- file_type: typeMap[i.image.file_type],
851
- name: i.image.file_name || '',
852
- md5: i.image.file_md5 || '',
853
- sub_type: String(i.image.sub_type),
854
- width: undefined,
855
- height: undefined,
856
- };
857
- elements.push(segment.image(file_url, options));
858
- break;
859
- }
860
- /** 弹射表情 */
861
- case kritor.common.Element.ElementType.BUBBLE_FACE: {
862
- const id = i.bubble_face.id;
863
- const count = i.bubble_face.count;
864
- elements.push(segment.bubble_face(id, count));
865
- break;
866
- }
867
- /** 回复消息 */
868
- case kritor.common.Element.ElementType.REPLY: {
869
- const message_id = i.reply.message_id;
870
- elements.push(segment.reply(message_id));
871
- break;
872
- }
873
- /** 语音消息 */
874
- case kritor.common.Element.ElementType.VOICE: {
875
- const file = i.voice.file_url;
876
- const magic = i.voice.magic;
877
- const md5 = i.voice.file_md5;
878
- const name = i.voice.file_name;
879
- elements.push(segment.record(file, magic, md5, name));
880
- break;
881
- }
882
- /** 视频消息 */
883
- case kritor.common.Element.ElementType.VIDEO: {
884
- const file = i.video.file_url;
885
- const md5 = i.video.file_md5;
886
- const name = i.video.file_name;
887
- elements.push(segment.video(file, md5, name));
888
- break;
889
- }
890
- /** 篮球消息 */
891
- case kritor.common.Element.ElementType.BASKETBALL: {
892
- const id = i.basketball.id;
893
- elements.push(segment.basketball(id));
894
- break;
895
- }
896
- /** 骰子消息 */
897
- case kritor.common.Element.ElementType.DICE: {
898
- const id = i.dice.id;
899
- elements.push(segment.dice(id));
900
- break;
901
- }
902
- case kritor.common.Element.ElementType.RPS: {
903
- const id = i.rps.id;
904
- elements.push(segment.rps(id));
905
- break;
906
- }
907
- /** 戳一戳消息 */
908
- case kritor.common.Element.ElementType.POKE: {
909
- const id = i.poke.id;
910
- const poke_type = i.poke.poke_type;
911
- const strength = i.poke.strength;
912
- elements.push(segment.poke(id, poke_type, strength));
913
- break;
914
- }
915
- /** 音乐消息 */
916
- case kritor.common.Element.ElementType.MUSIC: {
917
- const id = i.music.id;
918
- const custom = i.music.custom;
919
- const { url, audio, title, author, pic } = custom;
920
- elements.push(segment.customMusic(url, audio, title, author, pic, id));
921
- break;
922
- }
923
- /** 天气消息 */
924
- case kritor.common.Element.ElementType.WEATHER: {
925
- const city = i.weather.city;
926
- const code = i.weather.code;
927
- elements.push(segment.weather(city, code));
928
- break;
929
- }
930
- /** 位置消息 */
931
- case kritor.common.Element.ElementType.LOCATION: {
932
- const lat = i.location.lat;
933
- const lon = i.location.lon;
934
- const title = i.location.title;
935
- const address = i.location.address;
936
- elements.push(segment.location(lat, lon, title, address));
937
- break;
938
- }
939
- /** 链接分享 */
940
- case kritor.common.Element.ElementType.SHARE: {
941
- const url = i.share.url;
942
- const title = i.share.title;
943
- const content = i.share.content;
944
- const image = i.share.image;
945
- elements.push(segment.share(url, title, content, image));
946
- break;
947
- }
948
- /** 礼物消息 只收不发 */
949
- case kritor.common.Element.ElementType.GIFT: {
950
- const qq = Number(i.gift.qq);
951
- const id = Number(i.gift.id);
952
- elements.push(segment.gift(qq, id));
953
- break;
954
- }
955
- /** 转发消息 */
956
- case kritor.common.Element.ElementType.FORWARD: {
957
- const res_id = i.forward.res_id;
958
- const uniseq = i.forward.uniseq;
959
- const summary = i.forward.summary;
960
- const description = i.forward.description;
961
- elements.push(segment.forward(res_id, uniseq, summary, description));
962
- break;
963
- }
964
- /** 文件消息 收不到 文件为通知事件 不走这里 */
965
- case kritor.common.Element.ElementType.FILE: {
966
- // const file_url = (i.file as kritor.common.IFileElement).file_url as string
967
- // elements.push(new KarinFileElement(i.file.file_url))
968
- break;
969
- }
970
- /** JSON消息 */
971
- case kritor.common.Element.ElementType.JSON: {
972
- const json = i.json.json;
973
- elements.push(segment.json(json));
974
- break;
975
- }
976
- /** XML消息 */
977
- case kritor.common.Element.ElementType.XML: {
978
- const xml = i.xml.xml;
979
- elements.push(segment.xml(xml));
980
- break;
981
- }
982
- // 这都啥玩意啊...
983
- case kritor.common.Element.ElementType.MARKET_FACE:
984
- case kritor.common.Element.ElementType.CONTACT:
985
- case kritor.common.Element.ElementType.MARKDOWN:
986
- case kritor.common.Element.ElementType.KEYBOARD:
987
- default: {
988
- let { ...args } = i;
989
- args = JSON.stringify(args);
990
- logger.warn(`未知消息类型 ${i.type} ${args}`);
991
- elements.push(segment.text(args));
992
- }
993
- }
994
- }
995
- return elements;
996
- }
997
- }