@aalis/plugin-adapter-onebot 0.4.1

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.
package/dist/types.js ADDED
@@ -0,0 +1,309 @@
1
+ /** 从 OneBot 消息段数组中提取纯文本 */
2
+ export function extractText(segments) {
3
+ return segments
4
+ .filter(seg => seg.type === 'text')
5
+ .map(seg => String(seg.data.text ?? ''))
6
+ .join('');
7
+ }
8
+ /**
9
+ * 将 OneBot 消息段数组转换为富文本(含 XML 标记),供 LLM 消费。
10
+ * @param segments 消息段数组
11
+ * @param selfId 机器人自身 ID,用于标记 <at self>
12
+ * @param nicknameMap 可选的 userId→昵称 映射,用于丰富 <at> 标签
13
+ */
14
+ export function segmentsToText(segments, selfId, nicknameMap) {
15
+ return segments
16
+ .map(seg => {
17
+ switch (seg.type) {
18
+ case 'text':
19
+ return String(seg.data.text ?? '');
20
+ case 'at': {
21
+ const qq = String(seg.data.qq ?? '');
22
+ if (qq === 'all')
23
+ return '<at>all</at>';
24
+ const nick = nicknameMap?.get(qq) ?? qq;
25
+ const selfAttr = selfId && qq === selfId ? ' self' : '';
26
+ return `<at${selfAttr} id="${qq}">${nick}</at>`;
27
+ }
28
+ case 'mention': {
29
+ const uid = String(seg.data.user_id ?? '');
30
+ const nick = nicknameMap?.get(uid) ?? uid;
31
+ const selfAttr = selfId && uid === selfId ? ' self' : '';
32
+ return `<at${selfAttr} id="${uid}">${nick}</at>`;
33
+ }
34
+ case 'mention_all':
35
+ return '<at>all</at>';
36
+ case 'face':
37
+ return `[表情:${seg.data.id ?? ''}]`;
38
+ case 'image':
39
+ return '[图片]';
40
+ case 'reply':
41
+ return ''; // 回复引用是元数据,不作为内联内容
42
+ case 'forward': {
43
+ const id = seg.data.id != null ? String(seg.data.id) : '';
44
+ return id ? `<forward id="${id}">[合并转发消息]</forward>` : '[合并转发消息]';
45
+ }
46
+ case 'record':
47
+ return '[语音]';
48
+ case 'video':
49
+ return '[视频]';
50
+ case 'share':
51
+ return `[分享: ${seg.data.title ?? ''}]`;
52
+ case 'json':
53
+ return '[JSON卡片]';
54
+ case 'xml':
55
+ return '[XML卡片]';
56
+ case 'poke':
57
+ return '[戳一戳]';
58
+ default:
59
+ // 未识别段类型:保留类型名避免整条消息文本为空被静默丢弃
60
+ return seg.type ? `[未知段:${seg.type}]` : '';
61
+ }
62
+ })
63
+ .join('');
64
+ }
65
+ // ===== 合并转发(forward)解析与格式化 =====
66
+ /**
67
+ * 从 get_forward_msg 返回的 data 或一个 forward 消息段的 data 中
68
+ * 提取出节点数组。各家实现字段不一:messages / message / content。
69
+ */
70
+ export function getForwardNodes(data) {
71
+ if (Array.isArray(data))
72
+ return data;
73
+ if (!data || typeof data !== 'object')
74
+ return [];
75
+ const obj = data;
76
+ if (Array.isArray(obj.messages))
77
+ return obj.messages;
78
+ if (Array.isArray(obj.message))
79
+ return obj.message;
80
+ if (Array.isArray(obj.content))
81
+ return obj.content;
82
+ return [];
83
+ }
84
+ function getForwardNodeData(item) {
85
+ if (!item || typeof item !== 'object')
86
+ return {};
87
+ const node = item;
88
+ if (node.type === 'node' && node.data && typeof node.data === 'object') {
89
+ return node.data;
90
+ }
91
+ return node;
92
+ }
93
+ function getForwardNodeContent(item) {
94
+ const node = item && typeof item === 'object' ? item : {};
95
+ const nodeData = getForwardNodeData(item);
96
+ return nodeData.content ?? node.content ?? nodeData.message ?? node.message;
97
+ }
98
+ /** 把节点 content(消息段数组或 CQ 字符串)渲染成短文本(无图像识别) */
99
+ function renderForwardNodeContent(content) {
100
+ if (typeof content === 'string') {
101
+ // 简单去掉 CQ 富码占位
102
+ return content
103
+ .replace(/\[CQ:image[^\]]*\]/g, '[图片]')
104
+ .replace(/\[CQ:face,[^\]]*id=(\d+)[^\]]*\]/g, '[表情:$1]')
105
+ .replace(/\[CQ:at,[^\]]*qq=(\d+)[^\]]*\]/g, '<at id="$1">$1</at>')
106
+ .replace(/\[CQ:reply[^\]]*\]/g, '')
107
+ .replace(/\[CQ:forward,[^\]]*id=([^,\]]+)[^\]]*\]/g, '<forward id="$1">[合并转发消息]</forward>')
108
+ .replace(/\[CQ:[a-z]+[^\]]*\]/g, '');
109
+ }
110
+ if (!Array.isArray(content))
111
+ return '';
112
+ return content
113
+ .map(seg => {
114
+ if (!seg || typeof seg !== 'object')
115
+ return '';
116
+ const s = seg;
117
+ const data = s.data ?? {};
118
+ switch (s.type) {
119
+ case 'text':
120
+ return String(data.text ?? '');
121
+ case 'at':
122
+ return data.qq === 'all' ? '<at>all</at>' : `<at id="${String(data.qq ?? '')}">${String(data.qq ?? '')}</at>`;
123
+ case 'face':
124
+ return `[表情:${String(data.id ?? '')}]`;
125
+ case 'image':
126
+ return '[图片]';
127
+ case 'reply':
128
+ return '';
129
+ case 'forward':
130
+ return data.id ? `<forward id="${String(data.id)}">[合并转发消息]</forward>` : '[合并转发消息]';
131
+ case 'record':
132
+ return '[语音]';
133
+ case 'video':
134
+ return '[视频]';
135
+ case 'share':
136
+ return `[分享:${String(data.title ?? '')}]`;
137
+ case 'json':
138
+ return '[JSON卡片]';
139
+ case 'xml':
140
+ return '[XML卡片]';
141
+ default:
142
+ return s.type ? `[${s.type}]` : '';
143
+ }
144
+ })
145
+ .join('');
146
+ }
147
+ /**
148
+ * 把 get_forward_msg 返回的数据格式化为内联可读文本,
149
+ * 用 <forward id="..."> ... </forward> 包裹,便于和原始占位符替换。
150
+ */
151
+ export function formatForwardInline(forwardId, data, limit = 30) {
152
+ const nodes = getForwardNodes(data);
153
+ if (nodes.length === 0) {
154
+ return `<forward id="${forwardId}">[合并转发消息:内容为空或当前 OneBot 实现未返回节点]</forward>`;
155
+ }
156
+ const shown = nodes.slice(0, limit);
157
+ const lines = shown.map((item, i) => {
158
+ const nodeData = getForwardNodeData(item);
159
+ const senderObj = (item && typeof item === 'object' ? item.sender : undefined);
160
+ const name = String(nodeData.nickname ??
161
+ senderObj?.nickname ??
162
+ nodeData.name ??
163
+ nodeData.user_id ??
164
+ senderObj?.user_id ??
165
+ `节点${i + 1}`);
166
+ const userId = nodeData.user_id ?? nodeData.uin ?? senderObj?.user_id;
167
+ const prefix = userId != null ? `${name}(${String(userId)})` : name;
168
+ const text = renderForwardNodeContent(getForwardNodeContent(item)).trim() || '[空消息]';
169
+ return `${i + 1}. ${prefix}: ${text}`;
170
+ });
171
+ const more = nodes.length > shown.length ? `(仅显示前 ${shown.length}/${nodes.length} 条)` : '';
172
+ return `<forward id="${forwardId}">\n合并转发共 ${nodes.length} 条${more}:\n${lines.join('\n')}\n</forward>`;
173
+ }
174
+ /** 扫描消息段中的所有 forward 段,返回 {id, inlineNodes?} 列表 */
175
+ export function collectForwardSegments(segments) {
176
+ const out = [];
177
+ for (const seg of segments) {
178
+ if (seg.type !== 'forward')
179
+ continue;
180
+ const data = seg.data ?? {};
181
+ const id = data.id != null ? String(data.id) : '';
182
+ if (!id)
183
+ continue;
184
+ const inline = getForwardNodes(data);
185
+ out.push({ id, inlineNodes: inline.length > 0 ? inline : undefined });
186
+ }
187
+ return out;
188
+ }
189
+ /**
190
+ * 解析内容字符串中的 XML 标记,拆分为抽象消息段列表。
191
+ *
192
+ * 支持的标记:
193
+ * - `<at id="QQ">昵称</at>` / `<at self id="QQ">昵称</at>` → @提及(新格式)
194
+ * - `<at>QQ</at>` / `<at self>QQ</at>` → @提及(旧格式/无昵称兼容)
195
+ * - `<face id="N"/>` → QQ 表情
196
+ * - `<image url="..."/>` → 图片
197
+ * - `<record url="..."/>` → 语音
198
+ * - `<video url="..."/>` → 视频
199
+ * - `<reply id="..."/>` → 引用回复
200
+ */
201
+ export function parseContentToSegments(content) {
202
+ const segments = [];
203
+ // 匹配新旧两种 at 格式 + face/image/record/video/reply
204
+ const regex = /<at(?:\s+self)?(?:\s+id=["']([^"']*)["'])?\s*>([^<]*)<\/at>|<face\s+id=["']([^"']*)["']\s*\/>|<image\s+url=["']([^"']*)["']\s*\/>|<reply\s+id=["']([^"']*)["']\s*\/>|<video\s+url=["']([^"']*)["']\s*\/>|<record\s+url=["']([^"']*)["']\s*\/>/g;
205
+ let lastIndex = 0;
206
+ let match = regex.exec(content);
207
+ while (match !== null) {
208
+ if (match.index > lastIndex) {
209
+ const text = content.slice(lastIndex, match.index);
210
+ if (text)
211
+ segments.push({ type: 'text', data: { text } });
212
+ }
213
+ if (match[1] !== undefined || match[2] !== undefined) {
214
+ // at 标签:优先用 id 属性(新格式),回退到标签内容(旧格式/纯ID)
215
+ const id = (match[1] ?? match[2]).trim();
216
+ segments.push({ type: 'at', data: { id } });
217
+ }
218
+ else if (match[3] !== undefined) {
219
+ // face 标签:忽略,不转为消息段(防止 LLM 误发 QQ 表情,也兼容v12版本)
220
+ }
221
+ else if (match[4] !== undefined) {
222
+ segments.push({ type: 'image', data: { url: match[4] } });
223
+ }
224
+ else if (match[5] !== undefined) {
225
+ segments.push({ type: 'reply', data: { id: match[5] } });
226
+ }
227
+ else if (match[6] !== undefined) {
228
+ segments.push({ type: 'video', data: { url: match[6] } });
229
+ }
230
+ else if (match[7] !== undefined) {
231
+ segments.push({ type: 'audio', data: { url: match[7] } });
232
+ }
233
+ lastIndex = match.index + match[0].length;
234
+ match = regex.exec(content);
235
+ }
236
+ if (lastIndex < content.length) {
237
+ const text = content.slice(lastIndex);
238
+ if (text)
239
+ segments.push({ type: 'text', data: { text } });
240
+ }
241
+ return segments.length > 0 ? segments : [{ type: 'text', data: { text: content } }];
242
+ }
243
+ /** 将抽象消息段转为 OneBot v11 格式 */
244
+ export function toV11Segments(segments) {
245
+ const result = [];
246
+ for (const seg of segments) {
247
+ switch (seg.type) {
248
+ case 'text':
249
+ result.push({ type: 'text', data: { text: seg.data.text } });
250
+ break;
251
+ case 'at':
252
+ result.push({ type: 'at', data: { qq: seg.data.id === 'all' ? 'all' : Number(seg.data.id) || seg.data.id } });
253
+ break;
254
+ case 'face':
255
+ result.push({ type: 'face', data: { id: Number(seg.data.id) || 0 } });
256
+ break;
257
+ case 'image':
258
+ result.push({ type: 'image', data: { file: seg.data.url } });
259
+ break;
260
+ case 'audio':
261
+ result.push({ type: 'record', data: { file: seg.data.url } });
262
+ break;
263
+ case 'video':
264
+ result.push({ type: 'video', data: { file: seg.data.url } });
265
+ break;
266
+ case 'reply':
267
+ result.push({ type: 'reply', data: { id: Number(seg.data.id) || seg.data.id } });
268
+ break;
269
+ }
270
+ }
271
+ return result;
272
+ }
273
+ /** 将抽象消息段转为 OneBot v12 格式 */
274
+ export function toV12Segments(segments) {
275
+ const result = [];
276
+ for (const seg of segments) {
277
+ switch (seg.type) {
278
+ case 'text':
279
+ result.push({ type: 'text', data: { text: seg.data.text } });
280
+ break;
281
+ case 'at':
282
+ if (seg.data.id === 'all') {
283
+ result.push({ type: 'mention_all', data: {} });
284
+ }
285
+ else {
286
+ result.push({ type: 'mention', data: { user_id: String(seg.data.id) } });
287
+ }
288
+ break;
289
+ case 'face':
290
+ // v12 无标准 face 类型,降级为文本
291
+ result.push({ type: 'text', data: { text: `[表情:${seg.data.id}]` } });
292
+ break;
293
+ case 'image':
294
+ result.push({ type: 'image', data: { file_id: String(seg.data.url) } });
295
+ break;
296
+ case 'audio':
297
+ result.push({ type: 'voice', data: { file_id: String(seg.data.url) } });
298
+ break;
299
+ case 'video':
300
+ result.push({ type: 'video', data: { file_id: String(seg.data.url) } });
301
+ break;
302
+ case 'reply':
303
+ result.push({ type: 'reply', data: { message_id: String(seg.data.id) } });
304
+ break;
305
+ }
306
+ }
307
+ return result;
308
+ }
309
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/v11.d.ts ADDED
@@ -0,0 +1,29 @@
1
+ import type { NormalizedMessageEvent, NormalizedMetaEvent, NormalizedNoticeEvent, NormalizedRequestEvent, OneBotProtocol, OneBotRawEvent, SendMessageParams } from './types.js';
2
+ /**
3
+ * OneBot v11 协议处理器
4
+ *
5
+ * v11 特点:
6
+ * - 事件使用 post_type / message_type / meta_event_type
7
+ * - ID 均为 number 类型
8
+ * - 发送消息: send_msg / send_private_msg / send_group_msg
9
+ * - 获取自身信息: get_login_info
10
+ * - 获取版本: get_version_info
11
+ */
12
+ export declare class OneBotV11 implements OneBotProtocol {
13
+ readonly version: "v11";
14
+ buildSendMessage(params: SendMessageParams): {
15
+ action: string;
16
+ params: Record<string, unknown>;
17
+ };
18
+ getSelfInfoAction(): string;
19
+ parseSelfInfo(data: unknown): {
20
+ userId: string | undefined;
21
+ nickname: string | undefined;
22
+ };
23
+ parseEventType(raw: OneBotRawEvent): 'message' | 'meta' | 'notice' | 'request' | 'other';
24
+ parseMessageEvent(raw: OneBotRawEvent, fallbackSelfId: string, nicknameMap?: Map<string, string>): NormalizedMessageEvent | null;
25
+ parseMetaEvent(raw: OneBotRawEvent): NormalizedMetaEvent;
26
+ parseNoticeEvent(raw: OneBotRawEvent, fallbackSelfId: string): NormalizedNoticeEvent | null;
27
+ parseRequestEvent(raw: OneBotRawEvent, fallbackSelfId: string): NormalizedRequestEvent | null;
28
+ }
29
+ //# sourceMappingURL=v11.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v11.d.ts","sourceRoot":"","sources":["../src/v11.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAGpB;;;;;;;;;GASG;AACH,qBAAa,SAAU,YAAW,cAAc;IAC9C,QAAQ,CAAC,OAAO,EAAG,KAAK,CAAU;IAElC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;IA8BhG,iBAAiB,IAAI,MAAM;IAI3B,aAAa,CAAC,IAAI,EAAE,OAAO;;;;IAQ3B,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO;IAexF,iBAAiB,CACf,GAAG,EAAE,cAAc,EACnB,cAAc,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,sBAAsB,GAAG,IAAI;IA+EhC,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,mBAAmB;IAYxD,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI;IAmG3F,iBAAiB,CAAC,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI;CAsB9F"}
package/dist/v11.js ADDED
@@ -0,0 +1,263 @@
1
+ import { parseContentToSegments, segmentsToText, toV11Segments } from './types.js';
2
+ /**
3
+ * OneBot v11 协议处理器
4
+ *
5
+ * v11 特点:
6
+ * - 事件使用 post_type / message_type / meta_event_type
7
+ * - ID 均为 number 类型
8
+ * - 发送消息: send_msg / send_private_msg / send_group_msg
9
+ * - 获取自身信息: get_login_info
10
+ * - 获取版本: get_version_info
11
+ */
12
+ export class OneBotV11 {
13
+ version = 'v11';
14
+ buildSendMessage(params) {
15
+ const segments = parseContentToSegments(params.content);
16
+ const actionParams = {
17
+ message: toV11Segments(segments),
18
+ };
19
+ if (params.detailType === 'private') {
20
+ return {
21
+ action: 'send_private_msg',
22
+ params: { ...actionParams, user_id: Number(params.targetId) || params.targetId },
23
+ };
24
+ }
25
+ else if (params.detailType === 'group') {
26
+ return {
27
+ action: 'send_group_msg',
28
+ params: { ...actionParams, group_id: Number(params.targetId) || params.targetId },
29
+ };
30
+ }
31
+ // fallback: 使用 send_msg
32
+ return {
33
+ action: 'send_msg',
34
+ params: {
35
+ ...actionParams,
36
+ message_type: params.detailType,
37
+ user_id: params.detailType === 'private' ? Number(params.targetId) || params.targetId : undefined,
38
+ group_id: params.detailType === 'group' ? Number(params.targetId) || params.targetId : undefined,
39
+ },
40
+ };
41
+ }
42
+ getSelfInfoAction() {
43
+ return 'get_login_info';
44
+ }
45
+ parseSelfInfo(data) {
46
+ const info = data;
47
+ return {
48
+ userId: info?.user_id != null ? String(info.user_id) : undefined,
49
+ nickname: info?.nickname ? String(info.nickname) : undefined,
50
+ };
51
+ }
52
+ parseEventType(raw) {
53
+ switch (raw.post_type) {
54
+ case 'message':
55
+ return 'message';
56
+ case 'meta_event':
57
+ return 'meta';
58
+ case 'notice':
59
+ return 'notice';
60
+ case 'request':
61
+ return 'request';
62
+ default:
63
+ return 'other';
64
+ }
65
+ }
66
+ parseMessageEvent(raw, fallbackSelfId, nicknameMap) {
67
+ const selfId = raw.self_id != null ? String(raw.self_id) : fallbackSelfId;
68
+ const detailType = (raw.message_type ?? 'private');
69
+ const message = Array.isArray(raw.message) ? raw.message : [];
70
+ // 优先使用消息段生成富文本(含 <at> 等标记),回退到 raw_message
71
+ const text = message.length > 0 ? segmentsToText(message, selfId, nicknameMap) : (raw.raw_message ?? '');
72
+ if (!text.trim())
73
+ return null;
74
+ // 提取图片 URL(老字段保留兼容)
75
+ // 提取统一附件列表(image/record/video/file)
76
+ const attachments = [];
77
+ for (const seg of message) {
78
+ if (seg.type === 'image' && seg.data.url) {
79
+ const url = String(seg.data.url);
80
+ attachments.push({ kind: 'image', url, name: seg.data.file ? String(seg.data.file) : undefined });
81
+ }
82
+ else if (seg.type === 'record' && (seg.data.url || seg.data.file)) {
83
+ // OneBot v11: 'record' = 语音段
84
+ const url = String(seg.data.url ?? seg.data.file);
85
+ attachments.push({ kind: 'audio', url, name: seg.data.file ? String(seg.data.file) : undefined });
86
+ }
87
+ else if (seg.type === 'video') {
88
+ // 放宽 URL/file 约束:部分 OneBot 实现(如 NapCat 在 某些场景)不会同步返回 URL,
89
+ // 此时仍保留 attachment 让下游 media 能输出「无法获取」描述,避免静默丢失
90
+ const url = seg.data.url ?? seg.data.file;
91
+ attachments.push({
92
+ kind: 'video',
93
+ url: url != null ? String(url) : '',
94
+ name: seg.data.file ? String(seg.data.file) : undefined,
95
+ });
96
+ }
97
+ else if (seg.type === 'file' && (seg.data.url || seg.data.file)) {
98
+ const url = String(seg.data.url ?? seg.data.file);
99
+ attachments.push({ kind: 'file', url, name: seg.data.file ? String(seg.data.file) : undefined });
100
+ }
101
+ }
102
+ // 提取引用回复的消息 ID
103
+ let replyToMessageId;
104
+ for (const seg of message) {
105
+ if (seg.type === 'reply' && seg.data.id != null) {
106
+ replyToMessageId = String(seg.data.id);
107
+ break;
108
+ }
109
+ }
110
+ // 提取发送者昵称(优先群名片,回退到昵称)
111
+ const sender = raw.sender;
112
+ const nickname = sender?.card || sender?.nickname || undefined;
113
+ // 群消息:提取发送者群角色 (owner/admin/member) 与专属头衔
114
+ let senderRole;
115
+ let senderTitle;
116
+ if (detailType === 'group' && sender) {
117
+ const role = sender.role;
118
+ if (role === 'owner' || role === 'admin' || role === 'member') {
119
+ senderRole = role;
120
+ }
121
+ const title = sender.title;
122
+ if (typeof title === 'string' && title.length > 0) {
123
+ senderTitle = title;
124
+ }
125
+ }
126
+ return {
127
+ selfId,
128
+ detailType,
129
+ text,
130
+ messageId: raw.message_id != null ? String(raw.message_id) : undefined,
131
+ userId: raw.user_id != null ? String(raw.user_id) : undefined,
132
+ nickname,
133
+ groupId: raw.group_id != null ? String(raw.group_id) : undefined,
134
+ message,
135
+ attachments: attachments.length > 0 ? attachments : undefined,
136
+ replyToMessageId,
137
+ senderRole,
138
+ senderTitle,
139
+ };
140
+ }
141
+ parseMetaEvent(raw) {
142
+ const subType = (raw.meta_event_type ?? '');
143
+ const selfId = raw.self_id != null ? String(raw.self_id) : undefined;
144
+ const status = raw.status;
145
+ return {
146
+ subType,
147
+ selfId,
148
+ interval: raw.interval ?? status?.interval ?? undefined,
149
+ };
150
+ }
151
+ parseNoticeEvent(raw, fallbackSelfId) {
152
+ const selfId = raw.self_id != null ? String(raw.self_id) : fallbackSelfId;
153
+ const noticeType = (raw.notice_type ?? '');
154
+ const subType = (raw.sub_type ?? '');
155
+ // v11 poke: notice_type='notify', sub_type='poke'
156
+ if (noticeType === 'notify' && subType === 'poke') {
157
+ return {
158
+ selfId,
159
+ noticeType: 'poke',
160
+ userId: raw.user_id != null ? String(raw.user_id) : undefined,
161
+ targetId: raw.target_id != null ? String(raw.target_id) : undefined,
162
+ groupId: raw.group_id != null ? String(raw.group_id) : undefined,
163
+ };
164
+ }
165
+ // 群文件上传: notice_type='group_upload'
166
+ if (noticeType === 'group_upload') {
167
+ const file = raw.file;
168
+ return {
169
+ selfId,
170
+ noticeType: 'group_upload',
171
+ userId: raw.user_id != null ? String(raw.user_id) : undefined,
172
+ groupId: raw.group_id != null ? String(raw.group_id) : undefined,
173
+ data: file
174
+ ? {
175
+ fileId: file.id,
176
+ fileName: file.name,
177
+ fileSize: file.size,
178
+ busid: file.busid,
179
+ }
180
+ : undefined,
181
+ };
182
+ }
183
+ // 群成员增减: notice_type='group_increase' / 'group_decrease'
184
+ if (noticeType === 'group_increase' || noticeType === 'group_decrease') {
185
+ return {
186
+ selfId,
187
+ noticeType,
188
+ subType,
189
+ userId: raw.user_id != null ? String(raw.user_id) : undefined,
190
+ groupId: raw.group_id != null ? String(raw.group_id) : undefined,
191
+ data: {
192
+ operatorId: raw.operator_id != null ? String(raw.operator_id) : undefined,
193
+ },
194
+ };
195
+ }
196
+ // 群管理员变动: notice_type='group_admin'
197
+ if (noticeType === 'group_admin') {
198
+ return {
199
+ selfId,
200
+ noticeType: 'group_admin',
201
+ subType,
202
+ userId: raw.user_id != null ? String(raw.user_id) : undefined,
203
+ groupId: raw.group_id != null ? String(raw.group_id) : undefined,
204
+ };
205
+ }
206
+ // 群禁言: notice_type='group_ban', sub_type='ban' | 'lift_ban'
207
+ if (noticeType === 'group_ban') {
208
+ return {
209
+ selfId,
210
+ noticeType: 'group_ban',
211
+ subType: subType || undefined,
212
+ userId: raw.user_id != null ? String(raw.user_id) : undefined,
213
+ groupId: raw.group_id != null ? String(raw.group_id) : undefined,
214
+ data: {
215
+ operatorId: raw.operator_id != null ? String(raw.operator_id) : undefined,
216
+ duration: raw.duration != null ? Number(raw.duration) : undefined,
217
+ },
218
+ };
219
+ }
220
+ // 消息撤回: notice_type='group_recall' / 'friend_recall'
221
+ if (noticeType === 'group_recall' || noticeType === 'friend_recall') {
222
+ return {
223
+ selfId,
224
+ noticeType,
225
+ userId: raw.user_id != null ? String(raw.user_id) : undefined,
226
+ groupId: raw.group_id != null ? String(raw.group_id) : undefined,
227
+ data: {
228
+ operatorId: raw.operator_id != null ? String(raw.operator_id) : undefined,
229
+ messageId: raw.message_id != null ? String(raw.message_id) : undefined,
230
+ },
231
+ };
232
+ }
233
+ // 其他未处理的通知类型
234
+ return {
235
+ selfId,
236
+ noticeType: noticeType || 'unknown',
237
+ subType: subType || undefined,
238
+ userId: raw.user_id != null ? String(raw.user_id) : undefined,
239
+ groupId: raw.group_id != null ? String(raw.group_id) : undefined,
240
+ };
241
+ }
242
+ parseRequestEvent(raw, fallbackSelfId) {
243
+ const selfId = raw.self_id != null ? String(raw.self_id) : fallbackSelfId;
244
+ const requestType = (raw.request_type ?? '');
245
+ const userId = raw.user_id != null ? String(raw.user_id) : '';
246
+ const flag = raw.flag != null ? String(raw.flag) : '';
247
+ const comment = raw.comment != null ? String(raw.comment) : undefined;
248
+ if (!userId || !flag)
249
+ return null;
250
+ if (requestType === 'friend') {
251
+ return { selfId, requestType: 'friend', userId, flag, comment };
252
+ }
253
+ if (requestType === 'group') {
254
+ const subType = raw.sub_type === 'add' || raw.sub_type === 'invite' ? raw.sub_type : undefined;
255
+ const groupId = raw.group_id != null ? String(raw.group_id) : undefined;
256
+ if (!subType || !groupId)
257
+ return null;
258
+ return { selfId, requestType: 'group', subType, userId, groupId, flag, comment };
259
+ }
260
+ return null;
261
+ }
262
+ }
263
+ //# sourceMappingURL=v11.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v11.js","sourceRoot":"","sources":["../src/v11.ts"],"names":[],"mappings":"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"}