From 7845417d107036ea2be5483c359c79d6bc70cd1c Mon Sep 17 00:00:00 2001 From: Kyle Tyo <36606155+VerinSenpai@users.noreply.github.com> Date: Fri, 11 Jul 2025 13:48:58 -0400 Subject: [PATCH] Tweaks to ShowRulesCommand structure, localization, and autocomplete. (#38855) commit --- Content.Server/Info/ShowRulesCommand.cs | 63 ++++++++----------- .../en-US/commands/showrules-command.ftl | 3 + 2 files changed, 30 insertions(+), 36 deletions(-) create mode 100644 Resources/Locale/en-US/commands/showrules-command.ftl diff --git a/Content.Server/Info/ShowRulesCommand.cs b/Content.Server/Info/ShowRulesCommand.cs index eb3fb08db0..c6cc585270 100644 --- a/Content.Server/Info/ShowRulesCommand.cs +++ b/Content.Server/Info/ShowRulesCommand.cs @@ -10,55 +10,46 @@ using Robust.Shared.Network; namespace Content.Server.Info; [AdminCommand(AdminFlags.Admin)] -public sealed class ShowRulesCommand : IConsoleCommand +public sealed class ShowRulesCommand : LocalizedCommands { - [Dependency] private readonly INetManager _net = default!; [Dependency] private readonly IConfigurationManager _configuration = default!; + [Dependency] private readonly INetManager _net = default!; [Dependency] private readonly IPlayerManager _player = default!; - public string Command => "showrules"; - public string Description => "Opens the rules popup for the specified player."; - public string Help => "showrules [seconds]"; - public async void Execute(IConsoleShell shell, string argStr, string[] args) + public override string Command => "showrules"; + + public override async void Execute(IConsoleShell shell, string argStr, string[] args) { - string target; - float seconds; - - switch (args.Length) + if (args.Length is < 1 or > 2) { - case 1: - { - target = args[0]; - seconds = _configuration.GetCVar(CCVars.RulesWaitTime); - break; - } - case 2: - { - if (!float.TryParse(args[1], out seconds)) - { - shell.WriteError($"{args[1]} is not a valid amount of seconds.\n{Help}"); - return; - } - - target = args[0]; - break; - } - default: - { - shell.WriteLine(Help); - return; - } + shell.WriteError(Loc.GetString("shell-wrong-arguments-number")); + return; } + var seconds = _configuration.GetCVar(CCVars.RulesWaitTime); - if (!_player.TryGetSessionByUsername(target, out var player)) + if (args.Length == 2 && !float.TryParse(args[1], out seconds)) { - shell.WriteError("Unable to find a player with that name."); - return; + shell.WriteError(Loc.GetString("cmd-showrules-invalid-seconds", ("seconds", args[1]))); + return; + } + + if (!_player.TryGetSessionByUsername(args[0], out var player)) + { + shell.WriteError(Loc.GetString("shell-target-player-does-not-exist")); + return; } var coreRules = _configuration.GetCVar(CCVars.RulesFile); - var message = new SendRulesInformationMessage { PopupTime = seconds, CoreRules = coreRules, ShouldShowRules = true}; + var message = new SendRulesInformationMessage + { PopupTime = seconds, CoreRules = coreRules, ShouldShowRules = true }; _net.ServerSendMessage(message, player.Channel); } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + return args.Length == 1 + ? CompletionResult.FromOptions(CompletionHelper.SessionNames(players: _player)) + : CompletionResult.Empty; + } } diff --git a/Resources/Locale/en-US/commands/showrules-command.ftl b/Resources/Locale/en-US/commands/showrules-command.ftl new file mode 100644 index 0000000000..d997427de4 --- /dev/null +++ b/Resources/Locale/en-US/commands/showrules-command.ftl @@ -0,0 +1,3 @@ +cmd-showrules-desc = Opens the rules popup for the specified player. +cmd-showrules-help = Usage: showrules [seconds] +cmd-showrules-invalid-seconds = {$seconds} is not a valid number of seconds!