MCPcopy Create free account
hub / github.com/ChatLab/ChatLab / slimMessage

Function slimMessage

packages/parser/src/formats/shuakami-qq-preprocessor.ts:147–206  ·  view source on GitHub ↗

* 精简 QQ JSON 消息对象

(msg: Record<string, unknown>)

Source from the content-addressed store, hash-verified

145 * 精简 QQ JSON 消息对象
146 */
147function slimMessage(msg: Record<string, unknown>): SlimQQMessage {
148 const sender = msg.sender as { uin?: string; uid?: string; name?: string } | undefined
149 const content = msg.content as Record<string, unknown> | undefined
150 const rawMessage = msg.rawMessage as Record<string, unknown> | undefined
151
152 const slimContent: SlimQQMessage['content'] = {
153 text: (content?.text as string) || '',
154 }
155
156 if (content?.elements && Array.isArray(content.elements)) {
157 slimContent.elements = (content.elements as Array<{ type: string }>).map((e) => ({
158 type: e.type,
159 }))
160 }
161
162 if (content?.resources && Array.isArray(content.resources)) {
163 slimContent.resources = (content.resources as Array<{ type: string }>).map((r) => ({
164 type: r.type,
165 }))
166 }
167
168 if (content?.emojis && Array.isArray(content.emojis)) {
169 slimContent.emojis = (content.emojis as Array<{ type: string }>).map((e) => ({
170 type: e.type,
171 }))
172 }
173
174 const slimMsg: SlimQQMessage = {
175 timestamp: msg.timestamp as number | string,
176 sender: { name: sender?.name || '' },
177 content: slimContent,
178 }
179
180 // 旧格式字段
181 if (msg.id) slimMsg.id = msg.id as string
182 if (msg.type) slimMsg.type = msg.type as string
183 if (msg.recalled) slimMsg.recalled = msg.recalled as boolean
184 if (msg.system) slimMsg.system = msg.system as boolean
185
186 // V4 新格式字段
187 if (msg.messageId) slimMsg.messageId = msg.messageId as string
188 if (msg.messageType !== undefined) slimMsg.messageType = msg.messageType as number
189 if (msg.isRecalled) slimMsg.isRecalled = msg.isRecalled as boolean
190 if (msg.isSystemMessage) slimMsg.isSystemMessage = msg.isSystemMessage as boolean
191
192 // sender 字段
193 if (sender?.uin) slimMsg.sender.uin = sender.uin
194 if (sender?.uid) slimMsg.sender.uid = sender.uid
195
196 // V4 新增:保留 rawMessage 中的关键名字字段
197 if (rawMessage) {
198 slimMsg.rawMessage = {}
199 if (rawMessage.sendNickName) slimMsg.rawMessage.sendNickName = rawMessage.sendNickName as string
200 if (rawMessage.sendMemberName) slimMsg.rawMessage.sendMemberName = rawMessage.sendMemberName as string
201 if (rawMessage.senderUin) slimMsg.rawMessage.senderUin = rawMessage.senderUin as string
202 if (rawMessage.senderUid) slimMsg.rawMessage.senderUid = rawMessage.senderUid as string
203 }
204

Callers 1

preprocessQQJsonFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected