AdminAnnounceEui.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using Content.Server.Administration.Managers;
  2. using Content.Server.Chat;
  3. using Content.Server.Chat.Managers;
  4. using Content.Server.Chat.Systems;
  5. using Content.Server.EUI;
  6. using Content.Shared.Administration;
  7. using Content.Shared.Eui;
  8. namespace Content.Server.Administration.UI
  9. {
  10. public sealed class AdminAnnounceEui : BaseEui
  11. {
  12. [Dependency] private readonly IAdminManager _adminManager = default!;
  13. [Dependency] private readonly IChatManager _chatManager = default!;
  14. private readonly ChatSystem _chatSystem;
  15. public AdminAnnounceEui()
  16. {
  17. IoCManager.InjectDependencies(this);
  18. _chatSystem = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<ChatSystem>();
  19. }
  20. public override void Opened()
  21. {
  22. StateDirty();
  23. }
  24. public override EuiStateBase GetNewState()
  25. {
  26. return new AdminAnnounceEuiState();
  27. }
  28. public override void HandleMessage(EuiMessageBase msg)
  29. {
  30. base.HandleMessage(msg);
  31. switch (msg)
  32. {
  33. case AdminAnnounceEuiMsg.DoAnnounce doAnnounce:
  34. if (!_adminManager.HasAdminFlag(Player, AdminFlags.Admin))
  35. {
  36. Close();
  37. break;
  38. }
  39. switch (doAnnounce.AnnounceType)
  40. {
  41. case AdminAnnounceType.Server:
  42. _chatManager.DispatchServerAnnouncement(doAnnounce.Announcement);
  43. break;
  44. // TODO: Per-station announcement support
  45. case AdminAnnounceType.Station:
  46. _chatSystem.DispatchGlobalAnnouncement(doAnnounce.Announcement, doAnnounce.Announcer, colorOverride: Color.Gold);
  47. break;
  48. }
  49. StateDirty();
  50. if (doAnnounce.CloseAfter)
  51. Close();
  52. break;
  53. }
  54. }
  55. }
  56. }