private void ExecuteInShell(IConsoleShell shell, string command) { try { var args = new List <string>(); CommandParsing.ParseArguments(command, args); // missing cmdName if (args.Count == 0) { return; } string?cmdName = args[0]; if (AvailableCommands.TryGetValue(cmdName, out var conCmd)) // command registered { args.RemoveAt(0); var cmdArgs = args.ToArray(); if (shell.Player != null) // remote client { if (_groupController.CanCommand((IPlayerSession)shell.Player, cmdName)) // client has permission { AnyCommandExecuted?.Invoke(shell, cmdName, command, cmdArgs); conCmd.Execute(shell, command, cmdArgs); } else { shell.WriteError($"Unknown command: '{cmdName}'"); } } else // system console { AnyCommandExecuted?.Invoke(shell, cmdName, command, cmdArgs); conCmd.Execute(shell, command, cmdArgs); } } else { shell.WriteError($"Unknown command: '{cmdName}'"); } } catch (Exception e) { LogManager.GetSawmill(SawmillName).Error($"{FormatPlayerString(shell.Player)}: ExecuteError - {command}:\n{e}"); shell.WriteError($"There was an error while executing the command: {e}"); } }