namespace WxAgent.Core; public static class WechatSendConfirmation { public static bool IsMentionToken(string text) => text.TrimEnd() == "\uFFFC"; public static bool MatchesMention(ChatMessageSnapshot message, IReadOnlySet baseline, string memberName, string? body) { if (baseline.Contains(message.Fingerprint) || message.Type != ChatMessageType.Text) return false; var expected = "@" + memberName + (string.IsNullOrEmpty(body) ? "" : " " + body); return string.Equals(NormalizeWhitespace(message.Text), NormalizeWhitespace(expected), StringComparison.Ordinal); } private static string NormalizeWhitespace(string text) => string.Join(' ', text.Split((char[]?)null, StringSplitOptions.RemoveEmptyEntries)); // UIA proves only a fresh matching visible row, not delivery or sender identity. public static bool Matches(ChatMessageSnapshot message, IReadOnlySet baseline, ChatMessageType type, string? expectedText) { if (baseline.Contains(message.Fingerprint) || message.Type != type) return false; if (expectedText is null) return true; return type == ChatMessageType.File ? message.Text.Split('\n').Any(line => string.Equals(line.TrimEnd('\r'), expectedText, StringComparison.Ordinal)) : string.Equals(message.Text, expectedText, StringComparison.Ordinal); } }