@zhin.js/adapter-icqq 3.0.4 → 3.0.6

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 (67) hide show
  1. package/CHANGELOG.md +106 -78
  2. package/README.md +3 -3
  3. package/client/index.tsx +1 -1
  4. package/client/tsconfig.json +1 -1
  5. package/dist/index.js +1 -1
  6. package/lib/bot.d.ts +56 -12
  7. package/lib/bot.d.ts.map +1 -1
  8. package/lib/bot.js +416 -136
  9. package/lib/bot.js.map +1 -1
  10. package/lib/cq-message.d.ts +10 -0
  11. package/lib/cq-message.d.ts.map +1 -0
  12. package/lib/cq-message.js +119 -0
  13. package/lib/cq-message.js.map +1 -0
  14. package/lib/forward-msg.d.ts +27 -0
  15. package/lib/forward-msg.d.ts.map +1 -0
  16. package/lib/forward-msg.js +387 -0
  17. package/lib/forward-msg.js.map +1 -0
  18. package/lib/get-msg.d.ts +3 -0
  19. package/lib/get-msg.d.ts.map +1 -0
  20. package/lib/get-msg.js +46 -0
  21. package/lib/get-msg.js.map +1 -0
  22. package/lib/icqq-inbound.d.ts +114 -0
  23. package/lib/icqq-inbound.d.ts.map +1 -0
  24. package/lib/icqq-inbound.js +495 -0
  25. package/lib/icqq-inbound.js.map +1 -0
  26. package/lib/icqq-side-events.d.ts +34 -0
  27. package/lib/icqq-side-events.d.ts.map +1 -0
  28. package/lib/icqq-side-events.js +194 -0
  29. package/lib/icqq-side-events.js.map +1 -0
  30. package/lib/index.d.ts +4 -2
  31. package/lib/index.d.ts.map +1 -1
  32. package/lib/index.js +1 -0
  33. package/lib/index.js.map +1 -1
  34. package/lib/ipc-client.d.ts +7 -2
  35. package/lib/ipc-client.d.ts.map +1 -1
  36. package/lib/ipc-client.js +74 -16
  37. package/lib/ipc-client.js.map +1 -1
  38. package/lib/protocol.d.ts +3 -10
  39. package/lib/protocol.d.ts.map +1 -1
  40. package/lib/protocol.js +2 -0
  41. package/lib/protocol.js.map +1 -1
  42. package/lib/routes.d.ts +1 -1
  43. package/lib/routes.d.ts.map +1 -1
  44. package/lib/types.d.ts +44 -0
  45. package/lib/types.d.ts.map +1 -1
  46. package/lib/typing-indicator-example.d.ts +108 -0
  47. package/lib/typing-indicator-example.d.ts.map +1 -0
  48. package/lib/typing-indicator-example.js +220 -0
  49. package/lib/typing-indicator-example.js.map +1 -0
  50. package/lib/typing-indicator.d.ts +87 -0
  51. package/lib/typing-indicator.d.ts.map +1 -0
  52. package/lib/typing-indicator.js +225 -0
  53. package/lib/typing-indicator.js.map +1 -0
  54. package/package.json +18 -12
  55. package/src/bot.ts +524 -149
  56. package/src/cq-message.ts +120 -0
  57. package/src/forward-msg.ts +433 -0
  58. package/src/get-msg.ts +56 -0
  59. package/src/icqq-inbound.ts +616 -0
  60. package/src/icqq-side-events.ts +228 -0
  61. package/src/index.ts +10 -2
  62. package/src/ipc-client.ts +76 -16
  63. package/src/protocol.ts +4 -10
  64. package/src/routes.ts +1 -1
  65. package/src/types.ts +45 -0
  66. package/src/typing-indicator-example.ts +269 -0
  67. package/src/typing-indicator.ts +312 -0
@@ -0,0 +1,495 @@
1
+ /**
2
+ * icqq 守护进程 IPC 入站事件归一化(post_type / message_type / message 段)
3
+ */
4
+ import { Message } from "zhin.js";
5
+ import { parseCqMessage } from "./cq-message.js";
6
+ import { extractForwardResidFromJsonElement } from "./forward-msg.js";
7
+ const DEDUPE_TTL_MS = 120_000;
8
+ const MESSAGE_POST_TYPES = new Set(["message"]);
9
+ function isMessagePostType(postType) {
10
+ if (typeof postType !== "string" || postType === "")
11
+ return false;
12
+ if (MESSAGE_POST_TYPES.has(postType))
13
+ return true;
14
+ // 如 message.private / message.group
15
+ return postType.startsWith("message.");
16
+ }
17
+ /** 从 IPC 事件壳中取出 OneBot/icqq 载荷(兼容 data 嵌套或字段在根级) */
18
+ export function unwrapIcqqIpcEventPayload(event) {
19
+ const nested = event.data;
20
+ if (nested && typeof nested === "object" && !Array.isArray(nested)) {
21
+ const d = nested;
22
+ if (isRecognizedIcqqIpcPayload(d)) {
23
+ return nested;
24
+ }
25
+ for (const key of ["data", "detail", "payload", "event"]) {
26
+ const inner = d[key];
27
+ if (inner && typeof inner === "object" && !Array.isArray(inner)) {
28
+ return inner;
29
+ }
30
+ }
31
+ }
32
+ const { id: _id, event: _ev, data: _data, ok: _ok, ...rest } = event;
33
+ if (isRecognizedIcqqIpcPayload(rest)) {
34
+ return rest;
35
+ }
36
+ return nested;
37
+ }
38
+ function isRecognizedIcqqIpcPayload(d) {
39
+ const pt = d.post_type;
40
+ if (typeof pt === "string") {
41
+ if (isMessagePostType(pt) ||
42
+ pt === "notice" ||
43
+ pt === "request" ||
44
+ pt === "meta_event" ||
45
+ pt.startsWith("notice.") ||
46
+ pt.startsWith("request.") ||
47
+ pt.startsWith("system.")) {
48
+ return true;
49
+ }
50
+ }
51
+ return (d.message_type != null ||
52
+ d.raw_message != null ||
53
+ d.message != null ||
54
+ d.type === "group" ||
55
+ d.type === "private" ||
56
+ d.notice_type != null ||
57
+ d.request_type != null ||
58
+ d.meta_event_type != null);
59
+ }
60
+ export function resolveIcqqInboundUserId(data) {
61
+ const sender = data.sender;
62
+ if (sender && typeof sender === "object" && !Array.isArray(sender)) {
63
+ const suid = sender.user_id;
64
+ if (suid != null)
65
+ return Number(suid);
66
+ }
67
+ if (data.user_id != null)
68
+ return Number(data.user_id);
69
+ if (data.from_id != null)
70
+ return Number(data.from_id);
71
+ return undefined;
72
+ }
73
+ export function isIcqqMessagePostType(data) {
74
+ if (!data || typeof data !== "object")
75
+ return false;
76
+ const d = data;
77
+ if (isMessagePostType(d.post_type))
78
+ return true;
79
+ // 其它 post_type(notice/request 等)明确排除
80
+ if (d.post_type != null && d.post_type !== "")
81
+ return false;
82
+ const hasBody = typeof d.raw_message === "string" ||
83
+ Array.isArray(d.message) ||
84
+ typeof d.message_type === "string" ||
85
+ d.type === "group" ||
86
+ d.type === "private";
87
+ return hasBody && resolveIcqqInboundUserId(d) != null;
88
+ }
89
+ export function shouldSkipSelfInboundMessage(data) {
90
+ if (data.self_id == null || data.user_id == null)
91
+ return false;
92
+ return Number(data.self_id) === Number(data.user_id);
93
+ }
94
+ export function resolveChannelFromIcqqMessage(data) {
95
+ const messageType = data.message_type ??
96
+ (data.type === "group" || data.type === "private" ? data.type : undefined);
97
+ if (messageType === "group" || data.group_id != null) {
98
+ return {
99
+ channelType: "group",
100
+ channelId: String(data.group_id ?? data.from_id ?? data.user_id),
101
+ };
102
+ }
103
+ return {
104
+ channelType: "private",
105
+ channelId: String(data.from_id ?? data.user_id),
106
+ };
107
+ }
108
+ export function resolveIcqqInboundMessageId(data, channelId) {
109
+ if (data.message_id != null && String(data.message_id) !== "") {
110
+ return { id: String(data.message_id), source: "message_id" };
111
+ }
112
+ if (data.msg_id != null && String(data.msg_id) !== "") {
113
+ return { id: String(data.msg_id), source: "msg_id" };
114
+ }
115
+ if (data.seq != null && String(data.seq) !== "") {
116
+ return { id: String(data.seq), source: "seq" };
117
+ }
118
+ const uid = resolveIcqqInboundUserId(data) ?? 0;
119
+ return {
120
+ id: `${data.time}_${uid}_${channelId}`,
121
+ source: "synthetic",
122
+ };
123
+ }
124
+ export function icqqElementsToSegments(elements) {
125
+ if (!elements?.length)
126
+ return null;
127
+ const out = [];
128
+ for (const el of elements) {
129
+ if (!el || typeof el !== "object")
130
+ continue;
131
+ const type = el.type;
132
+ switch (type) {
133
+ case "text":
134
+ if (el.text != null && el.text !== "") {
135
+ out.push({ type: "text", data: { text: String(el.text) } });
136
+ }
137
+ break;
138
+ case "at":
139
+ out.push({
140
+ type: "at",
141
+ data: { qq: String(el.qq ?? el.user_id ?? "") },
142
+ });
143
+ break;
144
+ case "face":
145
+ out.push({ type: "face", data: { id: Number(el.id) } });
146
+ break;
147
+ case "image":
148
+ out.push({
149
+ type: "image",
150
+ data: {
151
+ url: String(el.url ?? el.file ?? ""),
152
+ file: String(el.file ?? el.url ?? ""),
153
+ },
154
+ });
155
+ break;
156
+ case "forward": {
157
+ const forwardResid = String(el.id ?? el.resid ?? el.res_id ?? el.file ?? "").trim();
158
+ if (forwardResid) {
159
+ out.push({
160
+ type: "forward",
161
+ data: { id: forwardResid, resid: forwardResid },
162
+ });
163
+ }
164
+ else {
165
+ out.push({ type: "text", data: { text: "[聊天记录]" } });
166
+ }
167
+ break;
168
+ }
169
+ case "light_app":
170
+ case "xml": {
171
+ const forwardResid = extractForwardResidFromJsonElement(el);
172
+ if (forwardResid) {
173
+ out.push({
174
+ type: "forward",
175
+ data: { id: forwardResid, resid: forwardResid },
176
+ });
177
+ }
178
+ else if (el.text != null && el.text !== "") {
179
+ out.push({ type: "text", data: { text: String(el.text) } });
180
+ }
181
+ else {
182
+ out.push({ type: "text", data: { text: "[聊天记录]" } });
183
+ }
184
+ break;
185
+ }
186
+ case "reply": {
187
+ const replyId = String(el.id ?? el.message_id ?? "");
188
+ if (replyId) {
189
+ out.push({
190
+ type: "reply",
191
+ data: { id: replyId, message_id: replyId },
192
+ });
193
+ }
194
+ break;
195
+ }
196
+ case "json": {
197
+ const forwardResid = extractForwardResidFromJsonElement(el);
198
+ if (forwardResid) {
199
+ out.push({
200
+ type: "forward",
201
+ data: { id: forwardResid, resid: forwardResid },
202
+ });
203
+ break;
204
+ }
205
+ const replyFromJson = resolveReplyIdFromJsonElement(el);
206
+ if (replyFromJson) {
207
+ out.push({
208
+ type: "reply",
209
+ data: { id: replyFromJson, message_id: replyFromJson },
210
+ });
211
+ }
212
+ else if (el.text != null && el.text !== "") {
213
+ out.push({ type: "text", data: { text: String(el.text) } });
214
+ }
215
+ break;
216
+ }
217
+ case "record":
218
+ case "audio":
219
+ out.push({
220
+ type: "record",
221
+ data: { file: String(el.file ?? el.url ?? "") },
222
+ });
223
+ break;
224
+ case "video":
225
+ out.push({
226
+ type: "video",
227
+ data: { file: String(el.file ?? el.url ?? "") },
228
+ });
229
+ break;
230
+ default:
231
+ if (el.text != null && el.text !== "") {
232
+ out.push({ type: "text", data: { text: String(el.text) } });
233
+ }
234
+ break;
235
+ }
236
+ }
237
+ return out.length ? out : null;
238
+ }
239
+ function resolveReplyIdFromJsonElement(el) {
240
+ let payload = el.data ?? el;
241
+ if (typeof payload === "string") {
242
+ try {
243
+ payload = JSON.parse(payload);
244
+ }
245
+ catch {
246
+ return undefined;
247
+ }
248
+ }
249
+ if (!payload || typeof payload !== "object")
250
+ return undefined;
251
+ const record = payload;
252
+ const refer = record.msgRefer ??
253
+ record.reply ??
254
+ record.resid ??
255
+ record.message_id ??
256
+ record.id;
257
+ if (refer && typeof refer === "object") {
258
+ const r = refer;
259
+ const id = r.msgId ?? r.message_id ?? r.id ?? r.msg_id;
260
+ if (id != null && String(id))
261
+ return String(id);
262
+ }
263
+ if (typeof refer === "string" && refer)
264
+ return refer;
265
+ if (typeof refer === "number")
266
+ return String(refer);
267
+ return undefined;
268
+ }
269
+ const MAX_SOURCE_WALK_DEPTH = 10;
270
+ function icqqSourceMessageBody(s) {
271
+ return s.message;
272
+ }
273
+ function icqqSourceHasBody(s) {
274
+ const body = icqqSourceMessageBody(s);
275
+ if (Array.isArray(body) && body.length > 0)
276
+ return true;
277
+ if (typeof body === "string" && body.trim().length > 0)
278
+ return true;
279
+ return typeof s.raw_message === "string" && s.raw_message.length > 0;
280
+ }
281
+ function looksLikeIcqqMessageSource(value) {
282
+ if (!value || typeof value !== "object")
283
+ return false;
284
+ const r = value;
285
+ // 整条入站事件也有 message_id,不能与 oicq Message#source 混淆
286
+ if (r.post_type != null || r.message_type != null)
287
+ return false;
288
+ const s = value;
289
+ if (!icqqSourceHasBody(s))
290
+ return false;
291
+ return !!resolveQuoteIdFromIcqqSource(value);
292
+ }
293
+ /** IPC 载荷可能把 source 嵌在 data / event 等字段,深度查找 */
294
+ export function findIcqqNestedMessageSource(root, maxDepth = MAX_SOURCE_WALK_DEPTH) {
295
+ const seen = new Set();
296
+ function walk(node, depth) {
297
+ if (depth > maxDepth || node == null)
298
+ return undefined;
299
+ if (typeof node !== "object")
300
+ return undefined;
301
+ if (seen.has(node))
302
+ return undefined;
303
+ seen.add(node);
304
+ if (looksLikeIcqqMessageSource(node)) {
305
+ return node;
306
+ }
307
+ const record = node;
308
+ if (record.source && looksLikeIcqqMessageSource(record.source)) {
309
+ return record.source;
310
+ }
311
+ for (const value of Object.values(record)) {
312
+ if (value && typeof value === "object") {
313
+ const hit = walk(value, depth + 1);
314
+ if (hit)
315
+ return hit;
316
+ }
317
+ }
318
+ return undefined;
319
+ }
320
+ return walk(root, 0);
321
+ }
322
+ /** 从 oicq MessageEvent.source 解析被引用消息的 message_id */
323
+ export function resolveQuoteIdFromIcqqSource(source) {
324
+ if (!source || typeof source !== "object")
325
+ return undefined;
326
+ const s = source;
327
+ if (s.message_id != null && String(s.message_id).trim()) {
328
+ return String(s.message_id).trim();
329
+ }
330
+ if (s.msg_id != null && String(s.msg_id).trim()) {
331
+ return String(s.msg_id).trim();
332
+ }
333
+ // NT 引用源常仅有 seq/rand,无 message_id
334
+ if (s.seq != null && String(s.seq) !== "") {
335
+ const seq = String(s.seq);
336
+ if (s.rand != null && String(s.rand) !== "") {
337
+ return `${seq}:${s.rand}`;
338
+ }
339
+ return seq;
340
+ }
341
+ return undefined;
342
+ }
343
+ function icqqSourceToContentSegments(s) {
344
+ const body = icqqSourceMessageBody(s);
345
+ if (Array.isArray(body) && body.length) {
346
+ return icqqElementsToSegments(body) ?? [];
347
+ }
348
+ if (typeof body === "string" && body.trim()) {
349
+ return [{ type: "text", data: { text: body.trim() } }];
350
+ }
351
+ if (typeof s.raw_message === "string" && s.raw_message) {
352
+ return parseCqMessage(s.raw_message);
353
+ }
354
+ return [];
355
+ }
356
+ /** 将 source 转为 QuotedMessagePayload(供 $getMsg 缓存,避免重复拉取) */
357
+ export function quotedPayloadFromIcqqSource(source) {
358
+ if (!source || typeof source !== "object")
359
+ return null;
360
+ const s = source;
361
+ const body = icqqSourceMessageBody(s);
362
+ const content = icqqSourceToContentSegments(s);
363
+ const messageId = resolveQuoteIdFromIcqqSource(source);
364
+ if (!messageId && !content.length)
365
+ return null;
366
+ const senderRaw = s.sender;
367
+ const senderFromUserId = s.user_id != null
368
+ ? { id: String(s.user_id), name: "" }
369
+ : undefined;
370
+ return {
371
+ messageId: messageId ?? `seq:${s.seq ?? 0}:${s.rand ?? 0}`,
372
+ sender: senderRaw
373
+ ? {
374
+ id: String(senderRaw.user_id ?? ""),
375
+ name: String(senderRaw.nickname ?? senderRaw.card ?? ""),
376
+ }
377
+ : senderFromUserId,
378
+ content,
379
+ raw: typeof s.raw_message === "string"
380
+ ? s.raw_message
381
+ : typeof body === "string"
382
+ ? body
383
+ : undefined,
384
+ time: typeof s.time === "number" ? s.time : undefined,
385
+ };
386
+ }
387
+ /** 从 IPC 事件顶层字段解析引用 message_id(与 message 段互补) */
388
+ export function resolveIcqqQuoteIdFromEvent(data) {
389
+ const fromSource = resolveQuoteIdFromIcqqSource(data.source) ??
390
+ resolveQuoteIdFromIcqqSource(findIcqqNestedMessageSource(data));
391
+ if (fromSource)
392
+ return fromSource;
393
+ const ext = data;
394
+ const candidates = [
395
+ ext.reply,
396
+ ext.quoted_message_id,
397
+ ext.quote_message_id,
398
+ ext.source_message_id,
399
+ ];
400
+ for (const c of candidates) {
401
+ if (typeof c === "string" && c.trim())
402
+ return c.trim();
403
+ if (typeof c === "number")
404
+ return String(c);
405
+ if (c && typeof c === "object") {
406
+ const r = c;
407
+ const id = r.id ?? r.message_id ?? r.msg_id ?? r.msgId;
408
+ if (id != null && String(id))
409
+ return String(id);
410
+ }
411
+ }
412
+ return undefined;
413
+ }
414
+ function mergeReplyFromRawMessage(content, rawMessage) {
415
+ if (!rawMessage || Message.quoteIdFromContent(content))
416
+ return content;
417
+ const fromRaw = parseCqMessage(rawMessage);
418
+ const quoteFromRaw = Message.quoteIdFromContent(fromRaw);
419
+ if (!quoteFromRaw)
420
+ return content;
421
+ return [
422
+ { type: "reply", data: { id: quoteFromRaw, message_id: quoteFromRaw } },
423
+ ...content.filter((s) => s.type !== "reply"),
424
+ ];
425
+ }
426
+ function mergeReplyFromSource(content, data) {
427
+ if (Message.quoteIdFromContent(content))
428
+ return content;
429
+ const quoteId = resolveQuoteIdFromIcqqSource(data.source) ??
430
+ resolveQuoteIdFromIcqqSource(findIcqqNestedMessageSource(data));
431
+ if (!quoteId)
432
+ return content;
433
+ return [
434
+ { type: "reply", data: { id: quoteId, message_id: quoteId } },
435
+ ...content.filter((s) => s.type !== "reply"),
436
+ ];
437
+ }
438
+ export function resolveInboundContent(data) {
439
+ const fromElements = icqqElementsToSegments(data.message);
440
+ const raw = data.raw_message ?? "";
441
+ let content;
442
+ if (fromElements?.length) {
443
+ content = mergeReplyFromRawMessage(fromElements, raw);
444
+ }
445
+ else if (raw) {
446
+ content = parseCqMessage(raw);
447
+ }
448
+ else {
449
+ content = [{ type: "text", data: { text: "" } }];
450
+ }
451
+ return mergeReplyFromSource(content, data);
452
+ }
453
+ export function normalizeIcqqInboundMessage(data) {
454
+ if (!isIcqqMessagePostType(data))
455
+ return null;
456
+ const ext = data;
457
+ const userIdNum = resolveIcqqInboundUserId(ext);
458
+ if (userIdNum == null)
459
+ return null;
460
+ const { channelType, channelId } = resolveChannelFromIcqqMessage(data);
461
+ const resolved = resolveIcqqInboundMessageId(data, channelId);
462
+ const nickname = data.sender?.nickname ?? data.nickname ?? String(userIdNum);
463
+ const rawMessage = data.raw_message ?? "";
464
+ return {
465
+ messageId: resolved.id,
466
+ idSource: resolved.source,
467
+ channelType,
468
+ channelId,
469
+ userId: String(userIdNum),
470
+ nickname,
471
+ content: resolveInboundContent(data),
472
+ rawMessage,
473
+ timestampMs: data.time * 1000,
474
+ raw: data,
475
+ };
476
+ }
477
+ /** 按 message_id 去重(多路 subscribe 会收到同一消息多次) */
478
+ export class InboundMessageDeduper {
479
+ seen = new Map();
480
+ shouldProcess(messageId) {
481
+ const now = Date.now();
482
+ for (const [id, t] of this.seen) {
483
+ if (now - t > DEDUPE_TTL_MS)
484
+ this.seen.delete(id);
485
+ }
486
+ if (this.seen.has(messageId))
487
+ return false;
488
+ this.seen.set(messageId, now);
489
+ return true;
490
+ }
491
+ clear() {
492
+ this.seen.clear();
493
+ }
494
+ }
495
+ //# sourceMappingURL=icqq-inbound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icqq-inbound.js","sourceRoot":"","sources":["../src/icqq-inbound.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * icqq IPC 非 message 入站:notice / request / meta(对齐 OneBot 与 @icqqjs/icqq EventMap)
3
+ * @see https://icqq.pages.dev/interfaces/EventMap.html
4
+ */
5
+ import { Notice, Request } from "zhin.js";
6
+ import type { IpcClient } from "./ipc-client.js";
7
+ /** OneBot / icqq 守护进程推送的通用事件字段 */
8
+ export interface IcqqIpcRawEvent {
9
+ post_type?: string;
10
+ time?: number;
11
+ self_id?: number;
12
+ notice_type?: string;
13
+ request_type?: string;
14
+ sub_type?: string;
15
+ meta_event_type?: string;
16
+ group_id?: number;
17
+ user_id?: number;
18
+ operator_id?: number;
19
+ flag?: string;
20
+ comment?: string;
21
+ [key: string]: unknown;
22
+ }
23
+ export declare function resolveIcqqEventPostType(data: Record<string, unknown>): string | undefined;
24
+ export declare function isIcqqNoticePayload(data: unknown): data is IcqqIpcRawEvent;
25
+ export declare function isIcqqRequestPayload(data: unknown): data is IcqqIpcRawEvent;
26
+ export declare function isIcqqMetaPayload(data: unknown): data is IcqqIpcRawEvent;
27
+ /** 去重用:notice / request 无稳定 id 时组合键 */
28
+ export declare function resolveSideEventDedupeKey(data: IcqqIpcRawEvent, kind: "notice" | "request" | "meta"): string;
29
+ export declare function formatIcqqNotice(event: IcqqIpcRawEvent, botName: string): ReturnType<typeof Notice.from<IcqqIpcRawEvent>>;
30
+ export declare function formatIcqqRequest(event: IcqqIpcRawEvent, botName: string, ipc: IpcClient): ReturnType<typeof Request.from<IcqqIpcRawEvent>>;
31
+ /** meta_event / system.*:返回是否建议在上线后刷新好友/群列表 */
32
+ export declare function shouldRefreshListsOnMeta(event: IcqqIpcRawEvent): boolean;
33
+ export declare function formatIcqqMetaLog(event: IcqqIpcRawEvent): string;
34
+ //# sourceMappingURL=icqq-side-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icqq-side-events.d.ts","sourceRoot":"","sources":["../src/icqq-side-events.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAiB,MAAM,SAAS,CAAC;AAIzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,GAAG,SAAS,CAOpB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,eAAe,CAI1E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,eAAe,CAI3E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,eAAe,CAIxE;AAED,uCAAuC;AACvC,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,eAAe,EACrB,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAClC,MAAM,CAUR;AA8CD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,MAAM,GACd,UAAU,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAsBjD;AAWD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,SAAS,GACb,UAAU,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAoDlD;AAED,+CAA+C;AAC/C,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAQxE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAMhE"}