ChatManager.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. using Content.Client.Administration.Managers;
  2. using Content.Client.Ghost;
  3. using Content.Shared.Administration;
  4. using Content.Shared.Chat;
  5. using Robust.Client.Console;
  6. using Robust.Shared.Utility;
  7. namespace Content.Client.Chat.Managers;
  8. internal sealed class ChatManager : IChatManager
  9. {
  10. [Dependency] private readonly IClientConsoleHost _consoleHost = default!;
  11. [Dependency] private readonly IClientAdminManager _adminMgr = default!;
  12. [Dependency] private readonly IEntitySystemManager _systems = default!;
  13. private ISawmill _sawmill = default!;
  14. public void Initialize()
  15. {
  16. _sawmill = Logger.GetSawmill("chat");
  17. _sawmill.Level = LogLevel.Info;
  18. }
  19. public void SendAdminAlert(string message)
  20. {
  21. // See server-side manager. This just exists for shared code.
  22. }
  23. public void SendAdminAlert(EntityUid player, string message)
  24. {
  25. // See server-side manager. This just exists for shared code.
  26. }
  27. public void SendMessage(string text, ChatSelectChannel channel)
  28. {
  29. var str = text.ToString();
  30. switch (channel)
  31. {
  32. case ChatSelectChannel.Console:
  33. // run locally
  34. _consoleHost.ExecuteCommand(text);
  35. break;
  36. case ChatSelectChannel.LOOC:
  37. _consoleHost.ExecuteCommand($"looc \"{CommandParsing.Escape(str)}\"");
  38. break;
  39. case ChatSelectChannel.OOC:
  40. _consoleHost.ExecuteCommand($"ooc \"{CommandParsing.Escape(str)}\"");
  41. break;
  42. case ChatSelectChannel.Admin:
  43. _consoleHost.ExecuteCommand($"asay \"{CommandParsing.Escape(str)}\"");
  44. break;
  45. case ChatSelectChannel.Emotes:
  46. _consoleHost.ExecuteCommand($"me \"{CommandParsing.Escape(str)}\"");
  47. break;
  48. case ChatSelectChannel.Dead:
  49. if (_systems.GetEntitySystemOrNull<GhostSystem>() is {IsGhost: true})
  50. goto case ChatSelectChannel.Local;
  51. if (_adminMgr.HasFlag(AdminFlags.Admin))
  52. _consoleHost.ExecuteCommand($"dsay \"{CommandParsing.Escape(str)}\"");
  53. else
  54. _sawmill.Warning("Tried to speak on deadchat without being ghost or admin.");
  55. break;
  56. // TODO sepearate radio and say into separate commands.
  57. case ChatSelectChannel.Radio:
  58. case ChatSelectChannel.Local:
  59. _consoleHost.ExecuteCommand($"say \"{CommandParsing.Escape(str)}\"");
  60. break;
  61. case ChatSelectChannel.Whisper:
  62. _consoleHost.ExecuteCommand($"whisper \"{CommandParsing.Escape(str)}\"");
  63. break;
  64. default:
  65. throw new ArgumentOutOfRangeException(nameof(channel), channel, null);
  66. }
  67. }
  68. }