From b12acddab3dc0a6d88da1b9f08cb8f97b656d43c Mon Sep 17 00:00:00 2001 From: Jimmacle Date: Thu, 29 Oct 2020 14:04:30 -0700 Subject: [PATCH] Command perms (#408) * Add event to override Torch command permission checker * Correct permission override condition --- Torch/Commands/CommandManager.cs | 25 +++++++++++++++++++------ docs/_config.yml | 1 - docs/index.md | 1 - 3 files changed, 19 insertions(+), 8 deletions(-) delete mode 100644 docs/_config.yml delete mode 100644 docs/index.md diff --git a/Torch/Commands/CommandManager.cs b/Torch/Commands/CommandManager.cs index d3020d1..80fcdb4 100644 --- a/Torch/Commands/CommandManager.cs +++ b/Torch/Commands/CommandManager.cs @@ -17,11 +17,13 @@ using VRage.Network; namespace Torch.Commands { + public delegate void CommandExecutingDel(Command command, IMyPlayer player, bool hasPermission, ref bool? hasPermissionOverride); + public class CommandManager : Manager { public char Prefix { get; set; } - public CommandTree Commands { get; set; } = new CommandTree(); + public event CommandExecutingDel OnCommandExecuting; private Logger _log = LogManager.GetCurrentClassLogger(); [Dependency] private IChatManagerServer _chatManager; @@ -124,7 +126,6 @@ namespace Torch.Commands public void HandleCommand(string message, ulong steamId, ref bool consumed, bool serverConsole = false) { - if (message.Length < 1 || message[0] != Prefix) return; @@ -144,11 +145,23 @@ namespace Torch.Commands { var cmdPath = string.Join(".", command.Path); - if (!HasPermission(steamId, command)) + var defaultPermission = HasPermission(steamId, command); + bool? cancel = null; + OnCommandExecuting?.Invoke(command, player, defaultPermission, ref cancel); + + if (cancel.HasValue) { - _log.Info($"{player.DisplayName} tried to use command {cmdPath} without permission"); - _chatManager.SendMessageAsOther(null, $"You need to be a {command.MinimumPromoteLevel} or higher to use that command.", targetSteamId: steamId); - return; + if (!cancel.Value) + return; + } + else + { + if (!defaultPermission) + { + _log.Info($"{player.DisplayName} tried to use command {cmdPath} without permission"); + _chatManager.SendMessageAsOther(null, $"You need to be a {command.MinimumPromoteLevel} or higher to use that command.", targetSteamId: steamId); + return; + } } var splitArgs = Regex.Matches(argText, "(\"[^\"]+\"|\\S+)").Cast().Select(x => x.ToString().Replace("\"", "")).ToList(); diff --git a/docs/_config.yml b/docs/_config.yml deleted file mode 100644 index 75e2535..0000000 --- a/docs/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-modernist diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index d50dffe..0000000 --- a/docs/index.md +++ /dev/null @@ -1 +0,0 @@ -# Torch