AnnounceCommand.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using Content.Server.Administration;
  2. using Content.Server.Chat.Systems;
  3. using Content.Shared.Administration;
  4. using Robust.Shared.Audio;
  5. using Robust.Shared.Console;
  6. using Robust.Shared.ContentPack;
  7. using Robust.Shared.Prototypes;
  8. namespace Content.Server.Announcements;
  9. [AdminCommand(AdminFlags.Moderator)]
  10. public sealed class AnnounceCommand : LocalizedEntityCommands
  11. {
  12. [Dependency] private readonly ChatSystem _chat = default!;
  13. [Dependency] private readonly IPrototypeManager _proto = default!;
  14. [Dependency] private readonly IResourceManager _res = default!;
  15. public override string Command => "announce";
  16. public override string Description => Loc.GetString("cmd-announce-desc");
  17. public override string Help => Loc.GetString("cmd-announce-help", ("command", Command));
  18. public override void Execute(IConsoleShell shell, string argStr, string[] args)
  19. {
  20. switch (args.Length)
  21. {
  22. case 0:
  23. shell.WriteError(Loc.GetString("shell-need-minimum-one-argument"));
  24. return;
  25. case > 4:
  26. shell.WriteError(Loc.GetString("shell-wrong-arguments-number"));
  27. return;
  28. }
  29. var message = args[0];
  30. var sender = Loc.GetString("cmd-announce-sender");
  31. var color = Color.Gold;
  32. var sound = new SoundPathSpecifier("/Audio/Announcements/announce.ogg");
  33. // Optional sender argument
  34. if (args.Length >= 2)
  35. sender = args[1];
  36. // Optional color argument
  37. if (args.Length >= 3)
  38. {
  39. try
  40. {
  41. color = Color.FromHex(args[2]);
  42. }
  43. catch
  44. {
  45. shell.WriteError(Loc.GetString("shell-invalid-color-hex"));
  46. return;
  47. }
  48. }
  49. // Optional sound argument
  50. if (args.Length >= 4)
  51. sound = new SoundPathSpecifier(args[3]);
  52. _chat.DispatchGlobalAnnouncement(message, sender, true, sound, color);
  53. shell.WriteLine(Loc.GetString("shell-command-success"));
  54. }
  55. public override CompletionResult GetCompletion(IConsoleShell shell, string[] args)
  56. {
  57. return args.Length switch
  58. {
  59. 1 => CompletionResult.FromHint(Loc.GetString("cmd-announce-arg-message")),
  60. 2 => CompletionResult.FromHint(Loc.GetString("cmd-announce-arg-sender")),
  61. 3 => CompletionResult.FromHint(Loc.GetString("cmd-announce-arg-color")),
  62. 4 => CompletionResult.FromHintOptions(
  63. CompletionHelper.AudioFilePath(args[3], _proto, _res),
  64. Loc.GetString("cmd-announce-arg-sound")
  65. ),
  66. _ => CompletionResult.Empty
  67. };
  68. }
  69. }