From c5fafbc7ccd5fa244e7848bb166d59a3940847ef Mon Sep 17 00:00:00 2001 From: DarkRRb <177549718+DarkRRb@users.noreply.github.com> Date: Sun, 18 May 2025 19:57:55 +0800 Subject: [PATCH 1/4] [Core] fix replay sent by the old client is preceded by extra elements --- .../Service/Message/PushMessageService.cs | 6 ++++++ Lagrange.Core/Message/Entity/ForwardEntity.cs | 2 +- Lagrange.Core/Message/Filter/MessageFilter.cs | 1 + .../Filter/Rule/AtBeforeReplyInOldClient.cs | 18 ++++++++++++++++++ 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 Lagrange.Core/Message/Filter/Rule/AtBeforeReplyInOldClient.cs diff --git a/Lagrange.Core/Internal/Service/Message/PushMessageService.cs b/Lagrange.Core/Internal/Service/Message/PushMessageService.cs index baea5c2aa..0c28affda 100644 --- a/Lagrange.Core/Internal/Service/Message/PushMessageService.cs +++ b/Lagrange.Core/Internal/Service/Message/PushMessageService.cs @@ -329,6 +329,11 @@ private static void ProcessEvent0x210(Span payload, PushMsg msg, List PackElement(bool additional) void IMessageEntity.SetSelfUid(string selfUid) => _selfUid = selfUid; - string IMessageEntity.ToPreviewString() => $"[Forward] {{ {Chain.ToPreviewString()} }}"; + string IMessageEntity.ToPreviewString() => $"[Forward] {{ {Chain.Sequence} }}"; string IMessageEntity.ToPreviewText() => ""; } diff --git a/Lagrange.Core/Message/Filter/MessageFilter.cs b/Lagrange.Core/Message/Filter/MessageFilter.cs index e5ea5d204..0ef275b36 100644 --- a/Lagrange.Core/Message/Filter/MessageFilter.cs +++ b/Lagrange.Core/Message/Filter/MessageFilter.cs @@ -16,6 +16,7 @@ internal static class MessageFilter static MessageFilter() { _rules = new IMessageFilterRule[] { + new AtBeforeForwardInOldClient(), new ForwardTrailingAtAndTextFilterRule(), new MultiMsgTrailingXmlFilterRule(), new OldAndInvalidImageFilterRule(), diff --git a/Lagrange.Core/Message/Filter/Rule/AtBeforeReplyInOldClient.cs b/Lagrange.Core/Message/Filter/Rule/AtBeforeReplyInOldClient.cs new file mode 100644 index 000000000..458c48f9f --- /dev/null +++ b/Lagrange.Core/Message/Filter/Rule/AtBeforeReplyInOldClient.cs @@ -0,0 +1,18 @@ + +using Lagrange.Core.Message.Entity; + +namespace Lagrange.Core.Message.Filter.Rule; + +public class AtBeforeForwardInOldClient : IMessageFilterRule +{ + public IEnumerable Apply(MessageChain chain) + { + if (chain.Count < 3) return Array.Empty(); + if (chain[0] is not MentionEntity mention) return Array.Empty(); + if (chain[1] is not TextEntity { Text: " " }) return Array.Empty(); + if (chain[2] is not ForwardEntity forward) return Array.Empty(); + if (mention.Uin != forward.TargetUin) return Array.Empty(); + + return new int[] { 0, 1 }; + } +} \ No newline at end of file From 8f79b6de53bb1c9bc48f7ce3cabce9c4a2ecbbf3 Mon Sep 17 00:00:00 2001 From: DarkRRb <177549718+DarkRRb@users.noreply.github.com> Date: Sun, 18 May 2025 20:01:01 +0800 Subject: [PATCH 2/4] typo --- Lagrange.Core/Message/Filter/MessageFilter.cs | 2 +- Lagrange.Core/Message/Filter/Rule/AtBeforeReplyInOldClient.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Lagrange.Core/Message/Filter/MessageFilter.cs b/Lagrange.Core/Message/Filter/MessageFilter.cs index 0ef275b36..3c83907c0 100644 --- a/Lagrange.Core/Message/Filter/MessageFilter.cs +++ b/Lagrange.Core/Message/Filter/MessageFilter.cs @@ -16,7 +16,7 @@ internal static class MessageFilter static MessageFilter() { _rules = new IMessageFilterRule[] { - new AtBeforeForwardInOldClient(), + new AtBeforeReplyInOldClient(), new ForwardTrailingAtAndTextFilterRule(), new MultiMsgTrailingXmlFilterRule(), new OldAndInvalidImageFilterRule(), diff --git a/Lagrange.Core/Message/Filter/Rule/AtBeforeReplyInOldClient.cs b/Lagrange.Core/Message/Filter/Rule/AtBeforeReplyInOldClient.cs index 458c48f9f..f718411fe 100644 --- a/Lagrange.Core/Message/Filter/Rule/AtBeforeReplyInOldClient.cs +++ b/Lagrange.Core/Message/Filter/Rule/AtBeforeReplyInOldClient.cs @@ -3,7 +3,7 @@ namespace Lagrange.Core.Message.Filter.Rule; -public class AtBeforeForwardInOldClient : IMessageFilterRule +public class AtBeforeReplyInOldClient : IMessageFilterRule { public IEnumerable Apply(MessageChain chain) { From 7ad0f7ffce3f06a80e3f730f9caa61ca9c48ebc6 Mon Sep 17 00:00:00 2001 From: DarkRRb <177549718+DarkRRb@users.noreply.github.com> Date: Sun, 18 May 2025 20:02:16 +0800 Subject: [PATCH 3/4] typo --- ...tBeforeReplyInOldClient.cs => AtBeforeForwardInOldClient.cs} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename Lagrange.Core/Message/Filter/Rule/{AtBeforeReplyInOldClient.cs => AtBeforeForwardInOldClient.cs} (90%) diff --git a/Lagrange.Core/Message/Filter/Rule/AtBeforeReplyInOldClient.cs b/Lagrange.Core/Message/Filter/Rule/AtBeforeForwardInOldClient.cs similarity index 90% rename from Lagrange.Core/Message/Filter/Rule/AtBeforeReplyInOldClient.cs rename to Lagrange.Core/Message/Filter/Rule/AtBeforeForwardInOldClient.cs index f718411fe..458c48f9f 100644 --- a/Lagrange.Core/Message/Filter/Rule/AtBeforeReplyInOldClient.cs +++ b/Lagrange.Core/Message/Filter/Rule/AtBeforeForwardInOldClient.cs @@ -3,7 +3,7 @@ namespace Lagrange.Core.Message.Filter.Rule; -public class AtBeforeReplyInOldClient : IMessageFilterRule +public class AtBeforeForwardInOldClient : IMessageFilterRule { public IEnumerable Apply(MessageChain chain) { From 0604c9e963f66b4352a28647c92a0c049a1ea7de Mon Sep 17 00:00:00 2001 From: DarkRRb <177549718+DarkRRb@users.noreply.github.com> Date: Sun, 18 May 2025 20:02:32 +0800 Subject: [PATCH 4/4] typo --- Lagrange.Core/Message/Filter/MessageFilter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lagrange.Core/Message/Filter/MessageFilter.cs b/Lagrange.Core/Message/Filter/MessageFilter.cs index 3c83907c0..0ef275b36 100644 --- a/Lagrange.Core/Message/Filter/MessageFilter.cs +++ b/Lagrange.Core/Message/Filter/MessageFilter.cs @@ -16,7 +16,7 @@ internal static class MessageFilter static MessageFilter() { _rules = new IMessageFilterRule[] { - new AtBeforeReplyInOldClient(), + new AtBeforeForwardInOldClient(), new ForwardTrailingAtAndTextFilterRule(), new MultiMsgTrailingXmlFilterRule(), new OldAndInvalidImageFilterRule(),