fish-station/Content.Server/Administration/Systems/AdminWhoSystem.cs
Copilot 878167c937
Вернуть команду adminwho в общий доступ и реализовать UI с правильным client-server взаимодействием (#2918)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: VigersRay <60344369+VigersRay@users.noreply.github.com>
Co-authored-by: Vigers Ray <vigersray@gmail.com>
2025-09-09 22:06:57 +03:00

64 lines
No EOL
1.9 KiB
C#

using Content.Server.Administration.Managers;
using Content.Server.Afk;
using Content.Shared.Administration;
using Robust.Shared.Utility;
namespace Content.Server.Administration.Systems;
/// <summary>
/// Server system for handling admin who requests
/// </summary>
public sealed class AdminWhoSystem : EntitySystem
{
[Dependency] private readonly IAfkManager _afkManager = default!;
[Dependency] private readonly IAdminManager _adminManager = default!;
public override void Initialize()
{
base.Initialize();
SubscribeNetworkEvent<RequestAdminWhoEvent>(OnRequestAdminWho);
}
private void OnRequestAdminWho(RequestAdminWhoEvent args, EntitySessionEventArgs session)
{
if (session.SenderSession == null)
return;
var seeStealth = false;
var seeAfk = false;
// Check if the requesting player can see stealth admins and AFK status
if (session.SenderSession.AttachedEntity != null)
{
var playerData = _adminManager.GetAdminData(session.SenderSession);
if (playerData != null)
{
seeStealth = playerData.CanStealth();
seeAfk = _adminManager.HasAdminFlag(session.SenderSession, AdminFlags.Admin);
}
}
var adminList = new List<AdminWhoEntry>();
foreach (var admin in _adminManager.ActiveAdmins)
{
var adminData = _adminManager.GetAdminData(admin);
DebugTools.AssertNotNull(adminData);
if (adminData!.Stealth && !seeStealth)
continue;
var isAfk = seeAfk && _afkManager.IsAfk(admin);
adminList.Add(new AdminWhoEntry(
admin.Name,
adminData.Title,
adminData.Stealth,
isAfk
));
}
RaiseNetworkEvent(new AdminWhoResponseEvent(adminList), session.SenderSession);
}
}