diff --git a/Lagrange.Core/Message/Entity/ForwardEntity.cs b/Lagrange.Core/Message/Entity/ForwardEntity.cs index d75eb077c..1e22151ee 100644 --- a/Lagrange.Core/Message/Entity/ForwardEntity.cs +++ b/Lagrange.Core/Message/Entity/ForwardEntity.cs @@ -85,29 +85,40 @@ IEnumerable PackElement(bool fake) { if (elem.SrcMsg is not { } src) return null; - var reserve = Serializer.Deserialize(src.PbReserve.AsSpan()); - return new ForwardEntity(MessagePacker.Parse(new PushMsgBody + if (src.SourceMsg != null) { - ResponseHead = new ResponseHead - { - FromUin = (uint)src.SenderUin, - FromUid = reserve.SenderUid, - Grp = reserve.ReceiverUid != null ? null : new ResponseGrp { } - }, - ContentHead = new ContentHead - { - Random = (long?)(reserve.MessageId & 0xFFFFFFFF), - Sequence = src.OrigSeqs?.Count > 0 ? src.OrigSeqs[0] : 0, - Timestamp = src.Time, - }, - Body = new MessageBody + var chain = MessagePacker.Parse(Serializer.Deserialize(src.SourceMsg.AsSpan()), true); + return new ForwardEntity(chain); + } + + if (src.PbReserve != null) + { + var reserve = Serializer.Deserialize(src.PbReserve.AsSpan()); + return new ForwardEntity(MessagePacker.Parse(new PushMsgBody { - RichText = new RichText + ResponseHead = new ResponseHead + { + FromUin = (uint)src.SenderUin, + FromUid = reserve.SenderUid, + Grp = reserve.ReceiverUid != null ? null : new ResponseGrp { } + }, + ContentHead = new ContentHead + { + Random = (long?)(reserve.MessageId & 0xFFFFFFFF), + Sequence = (src.OrigSeqs != null && src.OrigSeqs.Count > 0) ? src.OrigSeqs[0] : 0, + Timestamp = src.Time, + }, + Body = new MessageBody { - Elems = src.Elems ?? new List(), + RichText = new RichText + { + Elems = src.Elems ?? new List(), + } } - } - }, true)); + }, true)); + } + + return new ForwardEntity(new MessageChain(0, 0, (src.OrigSeqs != null && src.OrigSeqs.Count > 0 ? src.OrigSeqs[0] : 0), 0)); } void IMessageEntity.SetSelfUid(string selfUid) => _selfUid = selfUid;