mirror of
https://github.com/space-syndicate/space-station-14.git
synced 2026-10-09 10:21:18 +03:00
Fix Emote Chat Sanitizer (#32940)
* Fix bug? * Fix :) * aaaa * AAAA!!! * comment * Nicer code * What's a pull requestWhat's a pull request?
This commit is contained in:
parent
79c35e0a41
commit
d4da9923ea
3 changed files with 34 additions and 4 deletions
|
|
@ -35,7 +35,7 @@ public sealed class ChatSanitizationManager : IChatSanitizationManager
|
|||
{ ":D", "chatsan-smiles-widely" },
|
||||
{ "D:", "chatsan-frowns-deeply" },
|
||||
{ ":O", "chatsan-surprised" },
|
||||
{ ":3", "chatsan-smiles" }, //nope
|
||||
{ ":3", "chatsan-smiles" },
|
||||
{ ":S", "chatsan-uncertain" },
|
||||
{ ":>", "chatsan-grins" },
|
||||
{ ":<", "chatsan-pouts" },
|
||||
|
|
|
|||
|
|
@ -746,8 +746,9 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||
// ReSharper disable once InconsistentNaming
|
||||
private string SanitizeInGameICMessage(EntityUid source, string message, out string? emoteStr, bool capitalize = true, bool punctuate = false, bool capitalizeTheWordI = true)
|
||||
{
|
||||
var newMessage = message.Trim();
|
||||
newMessage = SanitizeMessageReplaceWords(newMessage);
|
||||
var newMessage = SanitizeMessageReplaceWords(message.Trim());
|
||||
|
||||
GetRadioKeycodePrefix(source, newMessage, out newMessage, out var prefix);
|
||||
|
||||
// Sanitize it first as it might change the word order
|
||||
_sanitizer.TrySanitizeEmoteShorthands(newMessage, source, out newMessage, out emoteStr);
|
||||
|
|
@ -759,7 +760,7 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||
if (punctuate)
|
||||
newMessage = SanitizeMessagePeriod(newMessage);
|
||||
|
||||
return newMessage;
|
||||
return prefix + newMessage;
|
||||
}
|
||||
|
||||
private string SanitizeInGameOOCMessage(string message)
|
||||
|
|
|
|||
|
|
@ -84,6 +84,35 @@ public abstract class SharedChatSystem : EntitySystem
|
|||
return current ?? _prototypeManager.Index<SpeechVerbPrototype>(speech.SpeechVerb);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Splits the input message into a radio prefix part and the rest to preserve it during sanitization.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This is primarily for the chat emote sanitizer, which can match against ":b" as an emote, which is a valid radio keycode.
|
||||
/// </remarks>
|
||||
public void GetRadioKeycodePrefix(EntityUid source,
|
||||
string input,
|
||||
out string output,
|
||||
out string prefix)
|
||||
{
|
||||
prefix = string.Empty;
|
||||
output = input;
|
||||
|
||||
// If the string is less than 2, then it's probably supposed to be an emote.
|
||||
// No one is sending empty radio messages!
|
||||
if (input.Length <= 2)
|
||||
return;
|
||||
|
||||
if (!(input.StartsWith(RadioChannelPrefix) || input.StartsWith(RadioChannelAltPrefix)))
|
||||
return;
|
||||
|
||||
if (!_keyCodes.TryGetValue(input[1], out _))
|
||||
return;
|
||||
|
||||
prefix = input[..2];
|
||||
output = input[2..];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to resolve radio prefixes in chat messages (e.g., remove a leading ":e" and resolve the requested
|
||||
/// channel. Returns true if a radio message was attempted, even if the channel is invalid.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue