diff --git a/GameServer/Command/CommandSender.cs b/GameServer/Command/CommandSender.cs index 0486421..e74e794 100644 --- a/GameServer/Command/CommandSender.cs +++ b/GameServer/Command/CommandSender.cs @@ -38,9 +38,9 @@ public class PlayerCommandSender(PlayerInstance player) : ICommandSender Type = ChatType.Friend, Sender = (uint)ConfigManager.Config.ServerOption.ServerProfile.Uid, Recver = (uint)Player.Uid, - Text = msg, + Text = ChatMessageHelper.NormalizeForClient(msg), Profile = Player.ToServerFriendProto(), - TimeStamp = (uint)Extensions.GetUnixMs() + TimeStamp = ChatMessageHelper.BuildClientTimestamp() }; await Player.SendPacket(CmdIds.NtfFriendChat, data); } diff --git a/GameServer/Game/Player/ChatMessageHelper.cs b/GameServer/Game/Player/ChatMessageHelper.cs new file mode 100644 index 0000000..bebdf46 --- /dev/null +++ b/GameServer/Game/Player/ChatMessageHelper.cs @@ -0,0 +1,27 @@ +using System.Text.RegularExpressions; + +namespace MikuSB.GameServer.Game.Player; + +public static partial class ChatMessageHelper +{ + [GeneratedRegex(@"\s+")] + private static partial Regex MultiWhitespaceRegex(); + + public static uint BuildClientTimestamp() + { + return (uint)MikuSB.Util.Extensions.Extensions.GetUnixSec(); + } + + public static string NormalizeForClient(string? text) + { + if (string.IsNullOrWhiteSpace(text)) + return string.Empty; + + var normalized = text + .Replace("\r\n", " ") + .Replace('\r', ' ') + .Replace('\n', ' '); + + return MultiWhitespaceRegex().Replace(normalized, " ").Trim(); + } +} diff --git a/GameServer/Game/Player/PlayerInstance.cs b/GameServer/Game/Player/PlayerInstance.cs index 1dc1137..a424c18 100644 --- a/GameServer/Game/Player/PlayerInstance.cs +++ b/GameServer/Game/Player/PlayerInstance.cs @@ -160,9 +160,9 @@ public class PlayerInstance(PlayerGameData data) Sender = sendUid, Recver = recvUid, Emoji = emojiId ?? 0, - Text = message ?? "", + Text = ChatMessageHelper.NormalizeForClient(message), Profile = Data.ToProfileProto(), - TimeStamp = (uint)Extensions.GetUnixMs() + TimeStamp = ChatMessageHelper.BuildClientTimestamp() }; await SendPacket(CmdIds.NtfFriendChat, data);