Fix chat sanitization and entity name escaping (#12015)
This commit is contained in:
@@ -23,9 +23,9 @@ namespace Content.Client.Chat
|
|||||||
public ChatChannel Channel { get; set; }
|
public ChatChannel Channel { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// What to "wrap" the message contents with. Example is stuff like 'Joe says: "{0}"'
|
/// Modified message with some wrapping text. E.g. 'Joe says: "HELP!"'
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string MessageWrap { get; set; }
|
public string WrappedMessage { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The override color of the message
|
/// The override color of the message
|
||||||
@@ -44,7 +44,7 @@ namespace Content.Client.Chat
|
|||||||
{
|
{
|
||||||
Message = netMsg.Message;
|
Message = netMsg.Message;
|
||||||
Channel = netMsg.Channel;
|
Channel = netMsg.Channel;
|
||||||
MessageWrap = netMsg.MessageWrap;
|
WrappedMessage = netMsg.WrappedMessage;
|
||||||
MessageColorOverride = netMsg.MessageColorOverride;
|
MessageColorOverride = netMsg.MessageColorOverride;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,13 +46,7 @@ public partial class ChatBox : UIWidget
|
|||||||
|
|
||||||
private void OnMessageAdded(StoredChatMessage msg)
|
private void OnMessageAdded(StoredChatMessage msg)
|
||||||
{
|
{
|
||||||
var text = FormattedMessage.EscapeText(msg.Message);
|
Logger.DebugS("chat", $"{msg.Channel}: {msg.Message}");
|
||||||
if (!string.IsNullOrEmpty(msg.MessageWrap))
|
|
||||||
{
|
|
||||||
text = string.Format(msg.MessageWrap, text);
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.DebugS("chat", $"{msg.Channel}: {text}");
|
|
||||||
if (!ChatInput.FilterButton.ChatFilterPopup.IsActive(msg.Channel))
|
if (!ChatInput.FilterButton.ChatFilterPopup.IsActive(msg.Channel))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -64,7 +58,7 @@ public partial class ChatBox : UIWidget
|
|||||||
? msg.MessageColorOverride
|
? msg.MessageColorOverride
|
||||||
: msg.Channel.TextColor();
|
: msg.Channel.TextColor();
|
||||||
|
|
||||||
AddLine(text, color);
|
AddLine(msg.WrappedMessage, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnChannelSelect(ChatSelectChannel channel)
|
private void OnChannelSelect(ChatSelectChannel channel)
|
||||||
|
|||||||
@@ -77,8 +77,8 @@ namespace Content.Server.Chat.Managers
|
|||||||
|
|
||||||
public void DispatchServerAnnouncement(string message, Color? colorOverride = null)
|
public void DispatchServerAnnouncement(string message, Color? colorOverride = null)
|
||||||
{
|
{
|
||||||
var messageWrap = Loc.GetString("chat-manager-server-wrap-message");
|
var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", FormattedMessage.EscapeText(message)));
|
||||||
ChatMessageToAll(ChatChannel.Server, message, messageWrap, colorOverride);
|
ChatMessageToAll(ChatChannel.Server, message, wrappedMessage, colorOverride);
|
||||||
Logger.InfoS("SERVER", message);
|
Logger.InfoS("SERVER", message);
|
||||||
|
|
||||||
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Server announcement: {message}");
|
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Server announcement: {message}");
|
||||||
@@ -86,8 +86,8 @@ namespace Content.Server.Chat.Managers
|
|||||||
|
|
||||||
public void DispatchServerMessage(IPlayerSession player, string message)
|
public void DispatchServerMessage(IPlayerSession player, string message)
|
||||||
{
|
{
|
||||||
var messageWrap = Loc.GetString("chat-manager-server-wrap-message");
|
var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", FormattedMessage.EscapeText(message)));
|
||||||
ChatMessageToOne(ChatChannel.Server, message, messageWrap, default, false, player.ConnectedClient);
|
ChatMessageToOne(ChatChannel.Server, message, wrappedMessage, default, false, player.ConnectedClient);
|
||||||
|
|
||||||
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Server message to {player:Player}: {message}");
|
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Server message to {player:Player}: {message}");
|
||||||
}
|
}
|
||||||
@@ -95,12 +95,11 @@ namespace Content.Server.Chat.Managers
|
|||||||
public void SendAdminAnnouncement(string message)
|
public void SendAdminAnnouncement(string message)
|
||||||
{
|
{
|
||||||
var clients = _adminManager.ActiveAdmins.Select(p => p.ConnectedClient);
|
var clients = _adminManager.ActiveAdmins.Select(p => p.ConnectedClient);
|
||||||
message = FormattedMessage.EscapeText(message);
|
|
||||||
|
|
||||||
var messageWrap = Loc.GetString("chat-manager-send-admin-announcement-wrap-message",
|
var wrappedMessage = Loc.GetString("chat-manager-send-admin-announcement-wrap-message",
|
||||||
("adminChannelName", Loc.GetString("chat-manager-admin-channel-name")));
|
("adminChannelName", Loc.GetString("chat-manager-admin-channel-name")), ("message", FormattedMessage.EscapeText(message)));
|
||||||
|
|
||||||
ChatMessageToMany(ChatChannel.Admin, message, messageWrap, default, false, clients.ToList());
|
ChatMessageToMany(ChatChannel.Admin, message, wrappedMessage, default, false, clients.ToList());
|
||||||
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Admin announcement from {message}: {message}");
|
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Admin announcement from {message}: {message}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,9 +109,8 @@ namespace Content.Server.Chat.Managers
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
message = FormattedMessage.EscapeText(message);
|
var wrappedMessage = Loc.GetString("chat-manager-send-hook-ooc-wrap-message", ("senderName", sender), ("message", FormattedMessage.EscapeText(message)));
|
||||||
var messageWrap = Loc.GetString("chat-manager-send-hook-ooc-wrap-message", ("senderName", sender));
|
ChatMessageToAll(ChatChannel.OOC, message, wrappedMessage);
|
||||||
ChatMessageToAll(ChatChannel.OOC, message, messageWrap);
|
|
||||||
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Hook OOC from {sender}: {message}");
|
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Hook OOC from {sender}: {message}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,8 +133,6 @@ namespace Content.Server.Chat.Managers
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
message = FormattedMessage.EscapeText(message);
|
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case OOCChatType.OOC:
|
case OOCChatType.OOC:
|
||||||
@@ -167,7 +163,7 @@ namespace Content.Server.Chat.Managers
|
|||||||
}
|
}
|
||||||
|
|
||||||
Color? colorOverride = null;
|
Color? colorOverride = null;
|
||||||
var messageWrap = Loc.GetString("chat-manager-send-ooc-wrap-message", ("playerName",player.Name));
|
var wrappedMessage = Loc.GetString("chat-manager-send-ooc-wrap-message", ("playerName",player.Name), ("message", FormattedMessage.EscapeText(message)));
|
||||||
if (_adminManager.HasAdminFlag(player, AdminFlags.Admin))
|
if (_adminManager.HasAdminFlag(player, AdminFlags.Admin))
|
||||||
{
|
{
|
||||||
var prefs = _preferencesManager.GetPreferences(player.UserId);
|
var prefs = _preferencesManager.GetPreferences(player.UserId);
|
||||||
@@ -176,11 +172,11 @@ namespace Content.Server.Chat.Managers
|
|||||||
if (player.ConnectedClient.UserData.PatronTier is { } patron &&
|
if (player.ConnectedClient.UserData.PatronTier is { } patron &&
|
||||||
PatronOocColors.TryGetValue(patron, out var patronColor))
|
PatronOocColors.TryGetValue(patron, out var patronColor))
|
||||||
{
|
{
|
||||||
messageWrap = Loc.GetString("chat-manager-send-ooc-patron-wrap-message", ("patronColor", patronColor),("playerName", player.Name));
|
wrappedMessage = Loc.GetString("chat-manager-send-ooc-patron-wrap-message", ("patronColor", patronColor),("playerName", player.Name), ("message", FormattedMessage.EscapeText(message)));
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: player.Name color, this will need to change the structure of the MsgChatMessage
|
//TODO: player.Name color, this will need to change the structure of the MsgChatMessage
|
||||||
ChatMessageToAll(ChatChannel.OOC, message, messageWrap, colorOverride);
|
ChatMessageToAll(ChatChannel.OOC, message, wrappedMessage, colorOverride);
|
||||||
_mommiLink.SendOOCMessage(player.Name, message);
|
_mommiLink.SendOOCMessage(player.Name, message);
|
||||||
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"OOC from {player:Player}: {message}");
|
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"OOC from {player:Player}: {message}");
|
||||||
}
|
}
|
||||||
@@ -194,10 +190,10 @@ namespace Content.Server.Chat.Managers
|
|||||||
}
|
}
|
||||||
|
|
||||||
var clients = _adminManager.ActiveAdmins.Select(p => p.ConnectedClient);
|
var clients = _adminManager.ActiveAdmins.Select(p => p.ConnectedClient);
|
||||||
var messageWrap = Loc.GetString("chat-manager-send-admin-chat-wrap-message",
|
var wrappedMessage = Loc.GetString("chat-manager-send-admin-chat-wrap-message",
|
||||||
("adminChannelName", Loc.GetString("chat-manager-admin-channel-name")),
|
("adminChannelName", Loc.GetString("chat-manager-admin-channel-name")),
|
||||||
("playerName", player.Name));
|
("playerName", player.Name), ("message", FormattedMessage.EscapeText(message)));
|
||||||
ChatMessageToMany(ChatChannel.Admin, message, messageWrap, default, false, clients.ToList());
|
ChatMessageToMany(ChatChannel.Admin, message, wrappedMessage, default, false, clients.ToList());
|
||||||
|
|
||||||
_adminLogger.Add(LogType.Chat, $"Admin chat from {player:Player}: {message}");
|
_adminLogger.Add(LogType.Chat, $"Admin chat from {player:Player}: {message}");
|
||||||
}
|
}
|
||||||
@@ -206,12 +202,12 @@ namespace Content.Server.Chat.Managers
|
|||||||
|
|
||||||
#region Utility
|
#region Utility
|
||||||
|
|
||||||
public void ChatMessageToOne(ChatChannel channel, string message, string messageWrap, EntityUid source, bool hideChat, INetChannel client, Color? colorOverride = null)
|
public void ChatMessageToOne(ChatChannel channel, string message, string wrappedMessage, EntityUid source, bool hideChat, INetChannel client, Color? colorOverride = null)
|
||||||
{
|
{
|
||||||
var msg = new MsgChatMessage();
|
var msg = new MsgChatMessage();
|
||||||
msg.Channel = channel;
|
msg.Channel = channel;
|
||||||
msg.Message = message;
|
msg.Message = message;
|
||||||
msg.MessageWrap = messageWrap;
|
msg.WrappedMessage = wrappedMessage;
|
||||||
msg.SenderEntity = source;
|
msg.SenderEntity = source;
|
||||||
msg.HideChat = hideChat;
|
msg.HideChat = hideChat;
|
||||||
if (colorOverride != null)
|
if (colorOverride != null)
|
||||||
@@ -221,12 +217,12 @@ namespace Content.Server.Chat.Managers
|
|||||||
_netManager.ServerSendMessage(msg, client);
|
_netManager.ServerSendMessage(msg, client);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ChatMessageToMany(ChatChannel channel, string message, string messageWrap, EntityUid source, bool hideChat, List<INetChannel> clients, Color? colorOverride = null)
|
public void ChatMessageToMany(ChatChannel channel, string message, string wrappedMessage, EntityUid source, bool hideChat, List<INetChannel> clients, Color? colorOverride = null)
|
||||||
{
|
{
|
||||||
var msg = new MsgChatMessage();
|
var msg = new MsgChatMessage();
|
||||||
msg.Channel = channel;
|
msg.Channel = channel;
|
||||||
msg.Message = message;
|
msg.Message = message;
|
||||||
msg.MessageWrap = messageWrap;
|
msg.WrappedMessage = wrappedMessage;
|
||||||
msg.SenderEntity = source;
|
msg.SenderEntity = source;
|
||||||
msg.HideChat = hideChat;
|
msg.HideChat = hideChat;
|
||||||
if (colorOverride != null)
|
if (colorOverride != null)
|
||||||
@@ -236,7 +232,7 @@ namespace Content.Server.Chat.Managers
|
|||||||
_netManager.ServerSendToMany(msg, clients);
|
_netManager.ServerSendToMany(msg, clients);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ChatMessageToManyFiltered(Filter filter, ChatChannel channel, string message, string messageWrap, EntityUid source,
|
public void ChatMessageToManyFiltered(Filter filter, ChatChannel channel, string message, string wrappedMessage, EntityUid source,
|
||||||
bool hideChat, Color? colorOverride = null)
|
bool hideChat, Color? colorOverride = null)
|
||||||
{
|
{
|
||||||
if (!filter.Recipients.Any()) return;
|
if (!filter.Recipients.Any()) return;
|
||||||
@@ -247,15 +243,15 @@ namespace Content.Server.Chat.Managers
|
|||||||
clients.Add(recipient.ConnectedClient);
|
clients.Add(recipient.ConnectedClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
ChatMessageToMany(channel, message, messageWrap, source, hideChat, clients, colorOverride);
|
ChatMessageToMany(channel, message, wrappedMessage, source, hideChat, clients, colorOverride);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ChatMessageToAll(ChatChannel channel, string message, string messageWrap, Color? colorOverride = null)
|
public void ChatMessageToAll(ChatChannel channel, string message, string wrappedMessage, Color? colorOverride = null)
|
||||||
{
|
{
|
||||||
var msg = new MsgChatMessage();
|
var msg = new MsgChatMessage();
|
||||||
msg.Channel = channel;
|
msg.Channel = channel;
|
||||||
msg.Message = message;
|
msg.Message = message;
|
||||||
msg.MessageWrap = messageWrap;
|
msg.WrappedMessage = wrappedMessage;
|
||||||
if (colorOverride != null)
|
if (colorOverride != null)
|
||||||
{
|
{
|
||||||
msg.MessageColorOverride = colorOverride.Value;
|
msg.MessageColorOverride = colorOverride.Value;
|
||||||
|
|||||||
@@ -23,12 +23,12 @@ namespace Content.Server.Chat.Managers
|
|||||||
void SendHookOOC(string sender, string message);
|
void SendHookOOC(string sender, string message);
|
||||||
void SendAdminAnnouncement(string message);
|
void SendAdminAnnouncement(string message);
|
||||||
|
|
||||||
void ChatMessageToOne(ChatChannel channel, string message, string messageWrap, EntityUid source, bool hideChat,
|
void ChatMessageToOne(ChatChannel channel, string message, string wrappedMessage, EntityUid source, bool hideChat,
|
||||||
INetChannel client, Color? colorOverride = null);
|
INetChannel client, Color? colorOverride = null);
|
||||||
void ChatMessageToMany(ChatChannel channel, string message, string messageWrap, EntityUid source, bool hideChat,
|
void ChatMessageToMany(ChatChannel channel, string message, string wrappedMessage, EntityUid source, bool hideChat,
|
||||||
List<INetChannel> clients, Color? colorOverride = null);
|
List<INetChannel> clients, Color? colorOverride = null);
|
||||||
void ChatMessageToManyFiltered(Filter filter, ChatChannel channel, string message, string messageWrap, EntityUid source, bool hideChat, Color? colorOverride);
|
void ChatMessageToManyFiltered(Filter filter, ChatChannel channel, string message, string wrappedMessage, EntityUid source, bool hideChat, Color? colorOverride);
|
||||||
void ChatMessageToAll(ChatChannel channel, string message, string messageWrap, Color? colorOverride = null);
|
void ChatMessageToAll(ChatChannel channel, string message, string wrappedMessage, Color? colorOverride = null);
|
||||||
|
|
||||||
bool MessageCharacterLimit(IPlayerSession player, string message);
|
bool MessageCharacterLimit(IPlayerSession player, string message);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,8 +198,8 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||||||
public void DispatchGlobalAnnouncement(string message, string sender = "Central Command",
|
public void DispatchGlobalAnnouncement(string message, string sender = "Central Command",
|
||||||
bool playSound = true, SoundSpecifier? announcementSound = null, Color? colorOverride = null)
|
bool playSound = true, SoundSpecifier? announcementSound = null, Color? colorOverride = null)
|
||||||
{
|
{
|
||||||
var messageWrap = Loc.GetString("chat-manager-sender-announcement-wrap-message", ("sender", sender));
|
var wrappedMessage = Loc.GetString("chat-manager-sender-announcement-wrap-message", ("sender", sender), ("message", FormattedMessage.EscapeText(message)));
|
||||||
_chatManager.ChatMessageToAll(ChatChannel.Radio, message, messageWrap, colorOverride);
|
_chatManager.ChatMessageToAll(ChatChannel.Radio, message, wrappedMessage, colorOverride);
|
||||||
if (playSound)
|
if (playSound)
|
||||||
{
|
{
|
||||||
SoundSystem.Play(announcementSound?.GetSound() ?? DefaultAnnouncementSound, Filter.Broadcast(), AudioParams.Default.WithVolume(-2f));
|
SoundSystem.Play(announcementSound?.GetSound() ?? DefaultAnnouncementSound, Filter.Broadcast(), AudioParams.Default.WithVolume(-2f));
|
||||||
@@ -218,7 +218,7 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||||||
public void DispatchStationAnnouncement(EntityUid source, string message, string sender = "Central Command",
|
public void DispatchStationAnnouncement(EntityUid source, string message, string sender = "Central Command",
|
||||||
bool playDefaultSound = true, SoundSpecifier? announcementSound = null, Color? colorOverride = null)
|
bool playDefaultSound = true, SoundSpecifier? announcementSound = null, Color? colorOverride = null)
|
||||||
{
|
{
|
||||||
var messageWrap = Loc.GetString("chat-manager-sender-announcement-wrap-message", ("sender", sender));
|
var wrappedMessage = Loc.GetString("chat-manager-sender-announcement-wrap-message", ("sender", sender), ("message", FormattedMessage.EscapeText(message)));
|
||||||
var station = _stationSystem.GetOwningStation(source);
|
var station = _stationSystem.GetOwningStation(source);
|
||||||
|
|
||||||
if (station == null)
|
if (station == null)
|
||||||
@@ -231,7 +231,7 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||||||
|
|
||||||
var filter = _stationSystem.GetInStation(stationDataComp);
|
var filter = _stationSystem.GetInStation(stationDataComp);
|
||||||
|
|
||||||
_chatManager.ChatMessageToManyFiltered(filter, ChatChannel.Radio, message, messageWrap, source, false, colorOverride);
|
_chatManager.ChatMessageToManyFiltered(filter, ChatChannel.Radio, message, wrappedMessage, source, false, colorOverride);
|
||||||
|
|
||||||
if (playDefaultSound)
|
if (playDefaultSound)
|
||||||
{
|
{
|
||||||
@@ -261,15 +261,16 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||||||
|
|
||||||
var nameEv = new TransformSpeakerNameEvent(source, Name(source));
|
var nameEv = new TransformSpeakerNameEvent(source, Name(source));
|
||||||
RaiseLocalEvent(source, nameEv);
|
RaiseLocalEvent(source, nameEv);
|
||||||
|
var name = FormattedMessage.EscapeText(nameEv.Name);
|
||||||
|
|
||||||
message = TransformSpeech(source, message);
|
message = TransformSpeech(source, message);
|
||||||
if (message.Length == 0)
|
if (message.Length == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var messageWrap = Loc.GetString("chat-manager-entity-say-wrap-message",
|
var wrappedMessage = Loc.GetString("chat-manager-entity-say-wrap-message",
|
||||||
("entityName", nameEv.Name));
|
("entityName", name), ("message", FormattedMessage.EscapeText(message)));
|
||||||
|
|
||||||
SendInVoiceRange(ChatChannel.Local, message, messageWrap, source, hideChat);
|
SendInVoiceRange(ChatChannel.Local, message, wrappedMessage, source, hideChat);
|
||||||
_listener.PingListeners(source, message, null);
|
_listener.PingListeners(source, message, null);
|
||||||
|
|
||||||
var ev = new EntitySpokeEvent(message);
|
var ev = new EntitySpokeEvent(message);
|
||||||
@@ -302,8 +303,7 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||||||
var nameEv = new TransformSpeakerNameEvent(source, Name(source));
|
var nameEv = new TransformSpeakerNameEvent(source, Name(source));
|
||||||
RaiseLocalEvent(source, nameEv);
|
RaiseLocalEvent(source, nameEv);
|
||||||
|
|
||||||
var messageWrap = Loc.GetString("chat-manager-entity-whisper-wrap-message",
|
var name = FormattedMessage.EscapeText(nameEv.Name);
|
||||||
("entityName", nameEv.Name));
|
|
||||||
|
|
||||||
var xforms = GetEntityQuery<TransformComponent>();
|
var xforms = GetEntityQuery<TransformComponent>();
|
||||||
var ghosts = GetEntityQuery<GhostComponent>();
|
var ghosts = GetEntityQuery<GhostComponent>();
|
||||||
@@ -322,11 +322,17 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||||||
if (sourceCoords.InRange(EntityManager, transformEntity.Coordinates, WhisperRange) ||
|
if (sourceCoords.InRange(EntityManager, transformEntity.Coordinates, WhisperRange) ||
|
||||||
ghosts.HasComponent(playerEntity))
|
ghosts.HasComponent(playerEntity))
|
||||||
{
|
{
|
||||||
_chatManager.ChatMessageToOne(ChatChannel.Whisper, message, messageWrap, source, hideChat, session.ConnectedClient);
|
var wrappedMessage = Loc.GetString("chat-manager-entity-whisper-wrap-message",
|
||||||
|
("entityName", name), ("message", FormattedMessage.EscapeText(message)));
|
||||||
|
|
||||||
|
_chatManager.ChatMessageToOne(ChatChannel.Whisper, message, wrappedMessage, source, hideChat, session.ConnectedClient);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_chatManager.ChatMessageToOne(ChatChannel.Whisper, obfuscatedMessage, messageWrap, source, hideChat,
|
var wrappedMessage = Loc.GetString("chat-manager-entity-whisper-wrap-message",
|
||||||
|
("entityName", name), ("message", FormattedMessage.EscapeText(obfuscatedMessage)));
|
||||||
|
|
||||||
|
_chatManager.ChatMessageToOne(ChatChannel.Whisper, obfuscatedMessage, wrappedMessage, source, hideChat,
|
||||||
session.ConnectedClient);
|
session.ConnectedClient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -344,26 +350,32 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||||||
{
|
{
|
||||||
if (!_actionBlocker.CanEmote(source)) return;
|
if (!_actionBlocker.CanEmote(source)) return;
|
||||||
|
|
||||||
// Emotes use Identity.Name, since it doesn't actually involve your voice at all.
|
var name = FormattedMessage.EscapeText(Identity.Name(source, EntityManager));
|
||||||
var messageWrap = Loc.GetString("chat-manager-entity-me-wrap-message",
|
|
||||||
("entityName", Identity.Name(source, EntityManager)));
|
|
||||||
|
|
||||||
SendInVoiceRange(ChatChannel.Emotes, action, messageWrap, source, hideChat);
|
// Emotes use Identity.Name, since it doesn't actually involve your voice at all.
|
||||||
|
var wrappedMessage = Loc.GetString("chat-manager-entity-me-wrap-message",
|
||||||
|
("entityName", name),
|
||||||
|
("message", FormattedMessage.EscapeText(action)));
|
||||||
|
|
||||||
|
SendInVoiceRange(ChatChannel.Emotes, action, wrappedMessage, source, hideChat);
|
||||||
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Emote from {ToPrettyString(source):user}: {action}");
|
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Emote from {ToPrettyString(source):user}: {action}");
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReSharper disable once InconsistentNaming
|
// ReSharper disable once InconsistentNaming
|
||||||
private void SendLOOC(EntityUid source, IPlayerSession player, string message, bool hideChat)
|
private void SendLOOC(EntityUid source, IPlayerSession player, string message, bool hideChat)
|
||||||
{
|
{
|
||||||
|
var name = FormattedMessage.EscapeText(Identity.Name(source, EntityManager));
|
||||||
|
|
||||||
if (_adminManager.IsAdmin(player))
|
if (_adminManager.IsAdmin(player))
|
||||||
{
|
{
|
||||||
if (!_adminLoocEnabled) return;
|
if (!_adminLoocEnabled) return;
|
||||||
}
|
}
|
||||||
else if (!_loocEnabled) return;
|
else if (!_loocEnabled) return;
|
||||||
var messageWrap = Loc.GetString("chat-manager-entity-looc-wrap-message",
|
var wrappedMessage = Loc.GetString("chat-manager-entity-looc-wrap-message",
|
||||||
("entityName", Identity.Name(source, EntityManager)));
|
("entityName", name),
|
||||||
|
("message", FormattedMessage.EscapeText(message)));
|
||||||
|
|
||||||
SendInVoiceRange(ChatChannel.LOOC, message, messageWrap, source, hideChat);
|
SendInVoiceRange(ChatChannel.LOOC, message, wrappedMessage, source, hideChat);
|
||||||
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"LOOC from {player:Player}: {message}");
|
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"LOOC from {player:Player}: {message}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -371,23 +383,25 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||||||
{
|
{
|
||||||
var clients = GetDeadChatClients();
|
var clients = GetDeadChatClients();
|
||||||
var playerName = Name(source);
|
var playerName = Name(source);
|
||||||
string messageWrap;
|
string wrappedMessage;
|
||||||
if (_adminManager.IsAdmin(player))
|
if (_adminManager.IsAdmin(player))
|
||||||
{
|
{
|
||||||
messageWrap = Loc.GetString("chat-manager-send-admin-dead-chat-wrap-message",
|
wrappedMessage = Loc.GetString("chat-manager-send-admin-dead-chat-wrap-message",
|
||||||
("adminChannelName", Loc.GetString("chat-manager-admin-channel-name")),
|
("adminChannelName", Loc.GetString("chat-manager-admin-channel-name")),
|
||||||
("userName", player.ConnectedClient.UserName));
|
("userName", player.ConnectedClient.UserName),
|
||||||
|
("message", FormattedMessage.EscapeText(message)));
|
||||||
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Admin dead chat from {player:Player}: {message}");
|
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Admin dead chat from {player:Player}: {message}");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
messageWrap = Loc.GetString("chat-manager-send-dead-chat-wrap-message",
|
wrappedMessage = Loc.GetString("chat-manager-send-dead-chat-wrap-message",
|
||||||
("deadChannelName", Loc.GetString("chat-manager-dead-channel-name")),
|
("deadChannelName", Loc.GetString("chat-manager-dead-channel-name")),
|
||||||
("playerName", (playerName)));
|
("playerName", (playerName)),
|
||||||
|
("message", FormattedMessage.EscapeText(message)));
|
||||||
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Dead chat from {player:Player}: {message}");
|
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"Dead chat from {player:Player}: {message}");
|
||||||
}
|
}
|
||||||
|
|
||||||
_chatManager.ChatMessageToMany(ChatChannel.Dead, message, messageWrap, source, hideChat, clients.ToList());
|
_chatManager.ChatMessageToMany(ChatChannel.Dead, message, wrappedMessage, source, hideChat, clients.ToList());
|
||||||
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
@@ -397,11 +411,11 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sends a chat message to the given players in range of the source entity.
|
/// Sends a chat message to the given players in range of the source entity.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void SendInVoiceRange(ChatChannel channel, string message, string messageWrap, EntityUid source, bool hideChat)
|
private void SendInVoiceRange(ChatChannel channel, string message, string wrappedMessage, EntityUid source, bool hideChat)
|
||||||
{
|
{
|
||||||
var sessions = new List<ICommonSession>();
|
var sessions = new List<ICommonSession>();
|
||||||
ClientDistanceToList(source, VoiceRange, sessions);
|
ClientDistanceToList(source, VoiceRange, sessions);
|
||||||
_chatManager.ChatMessageToMany(channel, message, messageWrap, source, hideChat, sessions.Select(s => s.ConnectedClient).ToList());
|
_chatManager.ChatMessageToMany(channel, message, wrappedMessage, source, hideChat, sessions.Select(s => s.ConnectedClient).ToList());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -438,7 +452,6 @@ public sealed partial class ChatSystem : SharedChatSystem
|
|||||||
newMessage = SanitizeMessageCapital(newMessage);
|
newMessage = SanitizeMessageCapital(newMessage);
|
||||||
if (punctuate)
|
if (punctuate)
|
||||||
newMessage = SanitizeMessagePeriod(newMessage);
|
newMessage = SanitizeMessagePeriod(newMessage);
|
||||||
newMessage = FormattedMessage.EscapeText(newMessage);
|
|
||||||
|
|
||||||
_sanitizer.TrySanitizeOutSmilies(newMessage, source, out newMessage, out emoteStr);
|
_sanitizer.TrySanitizeOutSmilies(newMessage, source, out newMessage, out emoteStr);
|
||||||
|
|
||||||
|
|||||||
@@ -299,15 +299,16 @@ public sealed class ZombieRuleSystem : GameRuleSystem
|
|||||||
|
|
||||||
if (mind.Session != null)
|
if (mind.Session != null)
|
||||||
{
|
{
|
||||||
var messageWrapper = Loc.GetString("chat-manager-server-wrap-message");
|
var message = Loc.GetString("zombie-patientzero-role-greeting");
|
||||||
|
var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", message));
|
||||||
|
|
||||||
//gets the names now in case the players leave.
|
//gets the names now in case the players leave.
|
||||||
//this gets unhappy if people with the same name get chose. Probably shouldn't happen.
|
//this gets unhappy if people with the same name get chose. Probably shouldn't happen.
|
||||||
_initialInfectedNames.Add(inCharacterName, mind.Session.Name);
|
_initialInfectedNames.Add(inCharacterName, mind.Session.Name);
|
||||||
|
|
||||||
// I went all the way to ChatManager.cs and all i got was this lousy T-shirt
|
// I went all the way to ChatManager.cs and all i got was this lousy T-shirt
|
||||||
_chatManager.ChatMessageToOne(Shared.Chat.ChatChannel.Server, Loc.GetString("zombie-patientzero-role-greeting"),
|
_chatManager.ChatMessageToOne(Shared.Chat.ChatChannel.Server, message,
|
||||||
messageWrapper, default, false, mind.Session.ConnectedClient, Color.Plum);
|
wrappedMessage, default, false, mind.Session.ConnectedClient, Color.Plum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ using Content.Shared.Radio;
|
|||||||
using Robust.Server.GameObjects;
|
using Robust.Server.GameObjects;
|
||||||
using Robust.Shared.Network;
|
using Robust.Shared.Network;
|
||||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set;
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set;
|
||||||
|
using Robust.Shared.Utility;
|
||||||
|
|
||||||
namespace Content.Server.Ghost.Components
|
namespace Content.Server.Ghost.Components
|
||||||
{
|
{
|
||||||
@@ -37,12 +38,14 @@ namespace Content.Server.Ghost.Components
|
|||||||
name = Identity.Name(speaker, _entMan);
|
name = Identity.Name(speaker, _entMan);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message = FormattedMessage.EscapeText(message);
|
||||||
|
name = FormattedMessage.EscapeText(name);
|
||||||
|
|
||||||
var msg = new MsgChatMessage
|
var msg = new MsgChatMessage
|
||||||
{
|
{
|
||||||
Channel = ChatChannel.Radio,
|
Channel = ChatChannel.Radio,
|
||||||
Message = message,
|
Message = message,
|
||||||
//Square brackets are added here to avoid issues with escaping
|
WrappedMessage = Loc.GetString("chat-radio-message-wrap", ("color", channel.Color), ("channel", $"\\[{channel.LocalizedName}\\]"), ("name", name), ("message", message))
|
||||||
MessageWrap = Loc.GetString("chat-radio-message-wrap", ("color", channel.Color), ("channel", $"\\[{channel.LocalizedName}\\]"), ("name", name))
|
|
||||||
};
|
};
|
||||||
|
|
||||||
_netManager.ServerSendMessage(msg, playerChannel);
|
_netManager.ServerSendMessage(msg, playerChannel);
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ using Robust.Shared.Prototypes;
|
|||||||
using Robust.Shared.Network;
|
using Robust.Shared.Network;
|
||||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
|
||||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set;
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set;
|
||||||
|
using Robust.Shared.Utility;
|
||||||
|
|
||||||
namespace Content.Server.Headset
|
namespace Content.Server.Headset
|
||||||
{
|
{
|
||||||
@@ -71,12 +72,14 @@ namespace Content.Server.Headset
|
|||||||
if (message.Length == 0)
|
if (message.Length == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
message = FormattedMessage.EscapeText(message);
|
||||||
|
name = FormattedMessage.EscapeText(name);
|
||||||
|
|
||||||
var msg = new MsgChatMessage
|
var msg = new MsgChatMessage
|
||||||
{
|
{
|
||||||
Channel = ChatChannel.Radio,
|
Channel = ChatChannel.Radio,
|
||||||
Message = message,
|
Message = message,
|
||||||
//Square brackets are added here to avoid issues with escaping
|
WrappedMessage = Loc.GetString("chat-radio-message-wrap", ("color", channel.Color), ("channel", $"\\[{channel.LocalizedName}\\]"), ("name", name), ("message", message))
|
||||||
MessageWrap = Loc.GetString("chat-radio-message-wrap", ("color", channel.Color), ("channel", $"\\[{channel.LocalizedName}\\]"), ("name", name))
|
|
||||||
};
|
};
|
||||||
|
|
||||||
_netManager.ServerSendMessage(msg, playerChannel);
|
_netManager.ServerSendMessage(msg, playerChannel);
|
||||||
|
|||||||
@@ -24,9 +24,9 @@ namespace Content.Shared.Chat
|
|||||||
public string Message { get; set; } = string.Empty;
|
public string Message { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// What to "wrap" the message contents with. Example is stuff like 'Joe says: "{0}"'
|
/// Modified message with some wrapping text. E.g. 'Joe says: "HELP!"'
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string MessageWrap { get; set; } = string.Empty;
|
public string WrappedMessage { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The sending entity.
|
/// The sending entity.
|
||||||
@@ -46,7 +46,7 @@ namespace Content.Shared.Chat
|
|||||||
{
|
{
|
||||||
Channel = (ChatChannel) buffer.ReadInt16();
|
Channel = (ChatChannel) buffer.ReadInt16();
|
||||||
Message = buffer.ReadString();
|
Message = buffer.ReadString();
|
||||||
MessageWrap = buffer.ReadString();
|
WrappedMessage = buffer.ReadString();
|
||||||
|
|
||||||
switch (Channel)
|
switch (Channel)
|
||||||
{
|
{
|
||||||
@@ -66,7 +66,7 @@ namespace Content.Shared.Chat
|
|||||||
{
|
{
|
||||||
buffer.Write((short)Channel);
|
buffer.Write((short)Channel);
|
||||||
buffer.Write(Message);
|
buffer.Write(Message);
|
||||||
buffer.Write(MessageWrap);
|
buffer.Write(WrappedMessage);
|
||||||
|
|
||||||
switch (Channel)
|
switch (Channel)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,20 +13,20 @@ chat-manager-max-message-length-exceeded-message = Your message exceeded {$limit
|
|||||||
chat-manager-no-headset-on-message = You don't have a headset on!
|
chat-manager-no-headset-on-message = You don't have a headset on!
|
||||||
chat-manager-no-such-channel = There is no such channel!
|
chat-manager-no-such-channel = There is no such channel!
|
||||||
chat-manager-whisper-headset-on-message = You can't whisper on the radio!
|
chat-manager-whisper-headset-on-message = You can't whisper on the radio!
|
||||||
chat-manager-server-wrap-message = SERVER: {"{0}"}
|
chat-manager-server-wrap-message = SERVER: {$message}
|
||||||
chat-manager-sender-announcement-wrap-message = {$sender} Announcement:
|
chat-manager-sender-announcement-wrap-message = {$sender} Announcement:
|
||||||
{"{0}"}
|
{$message}
|
||||||
chat-manager-entity-say-wrap-message = {$entityName} says: "{"{0}"}"
|
chat-manager-entity-say-wrap-message = {$entityName} says: "{$message}"
|
||||||
chat-manager-entity-whisper-wrap-message = {$entityName} whispers: "{"{0}"}"
|
chat-manager-entity-whisper-wrap-message = {$entityName} whispers: "{$message}"
|
||||||
chat-manager-entity-me-wrap-message = {$entityName} {"{0}"}
|
chat-manager-entity-me-wrap-message = {$entityName} {$message}
|
||||||
chat-manager-entity-looc-wrap-message = LOOC: {$entityName}: {"{0}"}
|
chat-manager-entity-looc-wrap-message = LOOC: {$entityName}: {$message}
|
||||||
chat-manager-send-ooc-wrap-message = OOC: {$playerName}: {"{0}"}
|
chat-manager-send-ooc-wrap-message = OOC: {$playerName}: {$message}
|
||||||
chat-manager-send-ooc-patron-wrap-message = OOC: [color={$patronColor}]{$playerName}[/color]: {"{0}"}
|
chat-manager-send-ooc-patron-wrap-message = OOC: [color={$patronColor}]{$playerName}[/color]: {$message}
|
||||||
chat-manager-send-dead-chat-wrap-message = {$deadChannelName}: {$playerName}: {"{0}"}
|
chat-manager-send-dead-chat-wrap-message = {$deadChannelName}: {$playerName}: {$message}
|
||||||
chat-manager-send-admin-dead-chat-wrap-message = {$adminChannelName}:({$userName}): {"{0}"}
|
chat-manager-send-admin-dead-chat-wrap-message = {$adminChannelName}:({$userName}): {$message}
|
||||||
chat-manager-send-admin-chat-wrap-message = {$adminChannelName}: {$playerName}: {"{0}"}
|
chat-manager-send-admin-chat-wrap-message = {$adminChannelName}: {$playerName}: {$message}
|
||||||
chat-manager-send-admin-announcement-wrap-message = {$adminChannelName}: {"{0}"}
|
chat-manager-send-admin-announcement-wrap-message = {$adminChannelName}: {$message}
|
||||||
chat-manager-send-hook-ooc-wrap-message = OOC: (D){$senderName}: {"{0}"}
|
chat-manager-send-hook-ooc-wrap-message = OOC: (D){$senderName}: {$message}
|
||||||
|
|
||||||
chat-manager-dead-channel-name = DEAD
|
chat-manager-dead-channel-name = DEAD
|
||||||
chat-manager-admin-channel-name = ADMIN
|
chat-manager-admin-channel-name = ADMIN
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Chat window radio wrap (prefix and postfix)
|
# Chat window radio wrap (prefix and postfix)
|
||||||
chat-radio-message-wrap = [color={$color}]{$channel} {$name} says: "{"{"}0{"}"}"[/color]
|
chat-radio-message-wrap = [color={$color}]{$channel} {$name} says: "{$message}"[/color]
|
||||||
|
|
||||||
examine-radio-frequency = It's set to broadcast over the {$frequency} frequency.
|
examine-radio-frequency = It's set to broadcast over the {$frequency} frequency.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user