From cd318e285d59fcc9ad5353ea2f4987e422a90231 Mon Sep 17 00:00:00 2001 From: DarkRRb <177549718+DarkRRb@users.noreply.github.com> Date: Tue, 3 Jun 2025 20:06:33 +0800 Subject: [PATCH 1/3] [All] Fix MessageChain parsing error in ForwardEntity --- Lagrange.Core/Message/Entity/ForwardEntity.cs | 49 ++++++++++++------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/Lagrange.Core/Message/Entity/ForwardEntity.cs b/Lagrange.Core/Message/Entity/ForwardEntity.cs index d75eb077c..dc7c3c1bf 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?[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?[0] ?? 0, 0)); } void IMessageEntity.SetSelfUid(string selfUid) => _selfUid = selfUid; From 56429fcf5f2831c20c2fbf4ca3972bf5ae8d0994 Mon Sep 17 00:00:00 2001 From: DarkRRb <177549718+DarkRRb@users.noreply.github.com> Date: Tue, 3 Jun 2025 20:12:26 +0800 Subject: [PATCH 2/3] Update Lagrange.Core/Message/Entity/ForwardEntity.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- Lagrange.Core/Message/Entity/ForwardEntity.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lagrange.Core/Message/Entity/ForwardEntity.cs b/Lagrange.Core/Message/Entity/ForwardEntity.cs index dc7c3c1bf..8dbde000b 100644 --- a/Lagrange.Core/Message/Entity/ForwardEntity.cs +++ b/Lagrange.Core/Message/Entity/ForwardEntity.cs @@ -105,7 +105,7 @@ IEnumerable PackElement(bool fake) ContentHead = new ContentHead { Random = (long?)(reserve.MessageId & 0xFFFFFFFF), - Sequence = src.OrigSeqs?[0] ?? 0, + Sequence = (src.OrigSeqs != null && src.OrigSeqs.Count > 0) ? src.OrigSeqs[0] : 0, Timestamp = src.Time, }, Body = new MessageBody From d53718165262f05b862bf2ce618aafeca7147763 Mon Sep 17 00:00:00 2001 From: DarkRRb <177549718+DarkRRb@users.noreply.github.com> Date: Tue, 3 Jun 2025 20:14:21 +0800 Subject: [PATCH 3/3] Update Lagrange.Core/Message/Entity/ForwardEntity.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- Lagrange.Core/Message/Entity/ForwardEntity.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lagrange.Core/Message/Entity/ForwardEntity.cs b/Lagrange.Core/Message/Entity/ForwardEntity.cs index 8dbde000b..1e22151ee 100644 --- a/Lagrange.Core/Message/Entity/ForwardEntity.cs +++ b/Lagrange.Core/Message/Entity/ForwardEntity.cs @@ -118,7 +118,7 @@ IEnumerable PackElement(bool fake) }, true)); } - return new ForwardEntity(new MessageChain(0, 0, src.OrigSeqs?[0] ?? 0, 0)); + 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;