public static ConsoleMessage ProcessHelpMessage(ConsoleMessage consoleMessage)
        {
            ConsoleMessage consoleResponse = new ConsoleMessage();

            consoleResponse.AgentId = consoleMessage.AgentId;
            consoleResponse.UserId  = 1;

            consoleResponse.Received = DateTime.UtcNow;
            consoleResponse.Type     = "HelpResponse";

            // Remove the leading "HELP ", if we can't do this lets assume its just "help"
            string recievedCommand = "";

            try
            {
                recievedCommand = consoleMessage.Content.Remove(0, 5);
            }
            catch
            {
                consoleResponse.Display = $"Faction Agent Help:\n\n* 'show commands' will return a list of available commands.\n* 'show modules' will show available modules\n* 'help <command>` will give you details about a command\n* 'help <command> /<paramater>' will give you details about a commands paramter";
                return(consoleResponse);
            }

            FactionCommand factionCommand = ProcessCommand(recievedCommand);

            if (factionCommand.Arguments.Count > 0)
            {
                string           ParameterName = factionCommand.Arguments.Keys.Last().ToString();
                CommandParameter parameter;
                try
                {
                    parameter = _taskRepository.GetCommandParameter(factionCommand.Command, ParameterName);
                    if (String.IsNullOrEmpty(parameter.Help))
                    {
                        consoleResponse.Display = $"No help available for parameter: {parameter.Name} under command {factionCommand.Command}";
                    }
                    else
                    {
                        consoleResponse.Display = $"Name: {parameter.Name}\nRequired: {parameter.Required}\nAccepted Values: {parameter.Values}\n\n## Help\n{parameter.Help}";
                    }
                }
                catch
                {
                    consoleResponse.Display = $"No parameter named {ParameterName} found for command {factionCommand.Command}";
                }
            }
            else
            {
                try
                {
                    Command command = _taskRepository.GetCommand(factionCommand.Command);
                    if (String.IsNullOrEmpty(command.Help))
                    {
                        consoleResponse.Display = $"No help available for command {command.Name}";
                    }
                    else
                    {
                        consoleResponse.Display  = $"Name: {command.Name}";
                        consoleResponse.Display += $"\nDescription: {command.Description}";
                        consoleResponse.Display += $"\nMitre ATT&CK Reference: {command.MitreReference}";
                        consoleResponse.Display += $"\nOpsecSafe: {command.OpsecSafe}";
                        consoleResponse.Display += $"\nLoaded: {AgentDetails.IsCommandAvailable(command)}";
                        consoleResponse.Display += $"\n\nHelp:\n{command.Help}\n";
                        List <CommandParameter> parameters = _taskRepository.GetCommandParameters(command.Id);
                        if (parameters.Count() > 0)
                        {
                            string parameterText = "\nParameters:";
                            foreach (CommandParameter param in parameters)
                            {
                                parameterText += $"\nName: {param.Name}";
                                parameterText += $"\nRequired: {param.Required.ToString()}";
                                if (param.Position.HasValue)
                                {
                                    parameterText += $"\nPosition: {param.Position.Value.ToString()}";
                                }
                                else
                                {
                                    parameterText += $"\nPosition: N/A";
                                }
                                parameterText += $"\nHelp: {param.Help}\n";
                            }
                            consoleResponse.Display += parameterText;
                        }
                        if (!String.IsNullOrEmpty(command.Artifacts))
                        {
                            consoleResponse.Display += "\n\nArtifacts:";
                            string[] artifacts = command.Artifacts.Split(",");
                            foreach (string artifact in artifacts)
                            {
                                consoleResponse.Display += $"\n* {artifact}";
                            }
                        }
                        consoleResponse.Display += "\n";
                    }
                }
                catch
                {
                    consoleResponse.Display = $"No command found named {recievedCommand}";
                }
            }
            return(consoleResponse);
        }