e91a506bf5aa48dd9b088eff0127a65c1322dbdc
Captures protocol-level media fingerprints (md5/sha1/dims/format) on the receive side and persists them alongside existing MediaStore entries, so a forward can re-send the original message via QQ's md5 fast-upload path without re-downloading the source CDN bytes. Avoids the stale-rkey trap where the cached imageUrl 404s a few hours after receipt. - MessageElement: add md5Hex / sha1Hex / pic|video|voiceFormat / noByteFallback optional fields. - MediaStore: extend CachedImage / CachedRecord with fingerprints, add CachedVideo + rememberVideo / findVideo / updateVideoUrl. Per-row growth ~80-90 bytes; LRU cap stays at 4096 per type. - msg-push-handler: extract fingerprints from NTV2 image/record/video and legacy NotOnlineImage/CustomFace/Ptt paths. - event-converter: invoke mediaSegmentSink for video too. - highway image/ptt/video upload: add fast-only branch that skips loadBinarySource/encodeSilk/stageVideoSource when noByteFallback is set, and fails fast if the server still returns uKey. Video forward uses the 100-byte FALLBACK_THUMB as its subFile (original thumb not preserved in onebot semantics). - message-actions: add forwardSingleMessage which looks up the cached event, enriches each media element with cached fingerprints, and dispatches via the existing sendGroup/sendPrivateMessage path. Files reject explicitly (separate upload protocol, out of scope). - extended actions: wire forward_friend_single_msg / forward_group_single_msg to the new context method, replacing the not-implemented stubs.
❄️ SnowLuma
Next Remote Protocol Framework.
关于项目
项目处于开发初期,仅支持部分功能,高速迭代中,随时可能出现破坏性更新。
鸣谢
LagrangeV2 - Proto
NapCatQQ - Scaner/Packet
辅助编程
推荐 Opus4.6 + Gemini3.1pro 对本项目辅助开发
本项目大量使用Ai技术。
加入我们
Languages
TypeScript
98.9%
CSS
0.5%
JavaScript
0.5%