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:
@@ -35,7 +35,7 @@ public sealed class ChatSanitizationManager : IChatSanitizationManager
|
|||||||
{ ":D", "chatsan-smiles-widely" },
|
{ ":D", "chatsan-smiles-widely" },
|
||||||
{ "D:", "chatsan-frowns-deeply" },
|
{ "D:", "chatsan-frowns-deeply" },
|
||||||
{ ":O", "chatsan-surprised" },
|
{ ":O", "chatsan-surprised" },
|
||||||
{ ":3", "chatsan-smiles" }, //nope
|
{ ":3", "chatsan-smiles" },
|
||||||
{ ":S", "chatsan-uncertain" },
|
{ ":S", "chatsan-uncertain" },
|
||||||
{ ":>", "chatsan-grins" },
|
{ ":>", "chatsan-grins" },
|
||||||
{ ":<", "chatsan-pouts" },
|
{ ":<", "chatsan-pouts" },
|
||||||
|
|||||||
@@ -746,8 +746,9 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||||||
// ReSharper disable once InconsistentNaming
|
// ReSharper disable once InconsistentNaming
|
||||||
private string SanitizeInGameICMessage(EntityUid source, string message, out string? emoteStr, bool capitalize = true, bool punctuate = false, bool capitalizeTheWordI = true)
|
private string SanitizeInGameICMessage(EntityUid source, string message, out string? emoteStr, bool capitalize = true, bool punctuate = false, bool capitalizeTheWordI = true)
|
||||||
{
|
{
|
||||||
var newMessage = message.Trim();
|
var newMessage = SanitizeMessageReplaceWords(message.Trim());
|
||||||
newMessage = SanitizeMessageReplaceWords(newMessage);
|
|
||||||
|
GetRadioKeycodePrefix(source, newMessage, out newMessage, out var prefix);
|
||||||
|
|
||||||
// Sanitize it first as it might change the word order
|
// Sanitize it first as it might change the word order
|
||||||
_sanitizer.TrySanitizeEmoteShorthands(newMessage, source, out newMessage, out emoteStr);
|
_sanitizer.TrySanitizeEmoteShorthands(newMessage, source, out newMessage, out emoteStr);
|
||||||
@@ -759,7 +760,7 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||||||
if (punctuate)
|
if (punctuate)
|
||||||
newMessage = SanitizeMessagePeriod(newMessage);
|
newMessage = SanitizeMessagePeriod(newMessage);
|
||||||
|
|
||||||
return newMessage;
|
return prefix + newMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
private string SanitizeInGameOOCMessage(string message)
|
private string SanitizeInGameOOCMessage(string message)
|
||||||
|
|||||||
@@ -84,6 +84,35 @@ public abstract class SharedChatSystem : EntitySystem
|
|||||||
return current ?? _prototypeManager.Index<SpeechVerbPrototype>(speech.SpeechVerb);
|
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>
|
/// <summary>
|
||||||
/// Attempts to resolve radio prefixes in chat messages (e.g., remove a leading ":e" and resolve the requested
|
/// 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.
|
/// channel. Returns true if a radio message was attempted, even if the channel is invalid.
|
||||||
|
|||||||
Reference in New Issue
Block a user