From 4d6efc8dfe0c041c7209178f6bba787a84745fe2 Mon Sep 17 00:00:00 2001
From: Dmitry <57028746+DIMMoon1@users.noreply.github.com>
Date: Wed, 23 Sep 2026 13:31:53 +0000
Subject: [PATCH] Announce logging (#46147)
* Announce logging
* 2
* 3
---
.../Administration/UI/AdminAnnounceEui.cs | 3 +--
Content.Server/Announcements/AnnounceCommand.cs | 15 +++++++++++++++
Content.Server/Chat/Managers/ChatManager.cs | 17 +++++++++++------
Content.Server/Chat/Managers/IChatManager.cs | 3 ++-
4 files changed, 29 insertions(+), 9 deletions(-)
diff --git a/Content.Server/Administration/UI/AdminAnnounceEui.cs b/Content.Server/Administration/UI/AdminAnnounceEui.cs
index 0abd11524c..eab5f138c6 100644
--- a/Content.Server/Administration/UI/AdminAnnounceEui.cs
+++ b/Content.Server/Administration/UI/AdminAnnounceEui.cs
@@ -1,5 +1,4 @@
using Content.Server.Administration.Managers;
-using Content.Server.Chat;
using Content.Server.Chat.Managers;
using Content.Server.Chat.Systems;
using Content.Server.EUI;
@@ -46,7 +45,7 @@ namespace Content.Server.Administration.UI
switch (doAnnounce.AnnounceType)
{
case AdminAnnounceType.Server:
- _chatManager.DispatchServerAnnouncement(doAnnounce.Announcement);
+ _chatManager.DispatchServerAnnouncement(doAnnounce.Announcement, sender: Player);
break;
// TODO: Per-station announcement support
case AdminAnnounceType.Station:
diff --git a/Content.Server/Announcements/AnnounceCommand.cs b/Content.Server/Announcements/AnnounceCommand.cs
index 0edf27dd4e..d0774f4f44 100644
--- a/Content.Server/Announcements/AnnounceCommand.cs
+++ b/Content.Server/Announcements/AnnounceCommand.cs
@@ -1,6 +1,8 @@
using Content.Server.Administration;
+using Content.Server.Administration.Logs;
using Content.Server.Chat.Systems;
using Content.Shared.Administration;
+using Content.Shared.Database;
using Robust.Shared.Audio;
using Robust.Shared.Console;
using Robust.Shared.ContentPack;
@@ -14,6 +16,7 @@ public sealed partial class AnnounceCommand : LocalizedEntityCommands
[Dependency] private ChatSystem _chat = default!;
[Dependency] private IPrototypeManager _proto = default!;
[Dependency] private IResourceManager _res = default!;
+ [Dependency] private IAdminLogManager _adminLogger = default!;
public override string Command => "announce";
public override string Description => Loc.GetString("cmd-announce-desc");
@@ -59,6 +62,18 @@ public sealed partial class AnnounceCommand : LocalizedEntityCommands
sound = new SoundPathSpecifier(args[3]);
_chat.DispatchGlobalAnnouncement(message, sender, true, sound, color);
+
+ if (shell.Player is null)
+ {
+ _adminLogger.Add(LogType.Chat, LogImpact.Low,
+ $"LOCAL used 'announce' with displayed sender {sender}: {message}");
+ }
+ else
+ {
+ _adminLogger.Add(LogType.Chat, LogImpact.Low,
+ $"{shell.Player:Player} used 'announce' with displayed sender {sender}: {message}");
+ }
+
shell.WriteLine(Loc.GetString("shell-command-success"));
}
diff --git a/Content.Server/Chat/Managers/ChatManager.cs b/Content.Server/Chat/Managers/ChatManager.cs
index bba3fdb080..9b9a2d06d0 100644
--- a/Content.Server/Chat/Managers/ChatManager.cs
+++ b/Content.Server/Chat/Managers/ChatManager.cs
@@ -92,10 +92,10 @@ private ISawmill? _sawmill = default!;
DispatchServerAnnouncement(Loc.GetString(val ? "chat-manager-admin-ooc-chat-enabled-message" : "chat-manager-admin-ooc-chat-disabled-message"));
}
- public void DeleteMessagesBy(NetUserId uid)
- {
- if (!_players.TryGetValue(uid, out var user))
- return;
+ public void DeleteMessagesBy(NetUserId uid)
+ {
+ if (!_players.TryGetValue(uid, out var user))
+ return;
var msg = new MsgDeleteChatMessagesBy { Key = user.Key, Entities = user.Entities };
_netManager.ServerSendToAll(msg);
@@ -116,7 +116,7 @@ private ISawmill? _sawmill = default!;
#region Server Announcements
- public void DispatchServerAnnouncement(string message, Color? colorOverride = null)
+ public void DispatchServerAnnouncement(string message, Color? colorOverride = null, ICommonSession? sender = null)
{
var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", FormattedMessage.EscapeText(message)));
ChatMessageToAll(ChatChannel.Server, message, wrappedMessage, EntityUid.Invalid, hideChat: false, recordReplay: true, colorOverride: colorOverride);
@@ -125,7 +125,12 @@ private ISawmill? _sawmill = default!;
// during server setup when some cvars are changed
_sawmill?.Info(message);
- _adminLogger.Add(LogType.Chat, LogImpact.Low, $"Server announcement: {message}");
+ if (sender is null) //just so that log search works...
+ _adminLogger.Add(LogType.Chat, LogImpact.Low,
+ $"Server announcement from SYSTEM: {message}");
+ else
+ _adminLogger.Add(LogType.Chat, LogImpact.Low,
+ $"Server announcement from {sender:Player}: {message}");
}
public void DispatchServerMessage(ICommonSession player, string message, bool suppressLog = false)
diff --git a/Content.Server/Chat/Managers/IChatManager.cs b/Content.Server/Chat/Managers/IChatManager.cs
index 9ac2a27c4e..6e57df42be 100644
--- a/Content.Server/Chat/Managers/IChatManager.cs
+++ b/Content.Server/Chat/Managers/IChatManager.cs
@@ -14,7 +14,8 @@ namespace Content.Server.Chat.Managers
///
///
/// Override the color of the message being sent.
- void DispatchServerAnnouncement(string message, Color? colorOverride = null);
+ /// Session of the administrator who initiated the announcement.
+ void DispatchServerAnnouncement(string message, Color? colorOverride = null, ICommonSession? sender = null);
void DispatchServerMessage(ICommonSession player, string message, bool suppressLog = false);