* 精简 QQ JSON 消息对象
(msg: Record<string, unknown>)
| 145 | * 精简 QQ JSON 消息对象 |
| 146 | */ |
| 147 | function 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 |