public CmdResult ExecuteRequestTree(CmdRequest args) { BotClient Client = TheBotClient; bool showPLVersionOfHelp = false; if (args.Length == 1) { if (args[0] == "prolog") { showPLVersionOfHelp = true; args = args.AdvanceArgs(1); } if (showPLVersionOfHelp) { foreach (var s in Client.AllCommands().Values) { WriteLine(s.ToPrologString() + "."); } return(Success("showPLVersion(done).")); } } if (args.Length > 0) { int found = 0; foreach (var s in Client.AllCommands().Values) { if (s.Matches(args[0])) { found++; WriteLine(s.Name + ": " + s.Description); } } if (found == 0) { return(Failure("Command " + args[0] + " Does not exist. \"help\" to display all available commands.")); } return(Success("found=" + found)); } StringBuilder result = new StringBuilder(); var CommandTree = new SortedDictionary <string, List <CommandInfo> >(); string cc; foreach (CommandInfo c in TheBotClient.AllCommands().Values) { if (c.Category.Equals(null)) { cc = "Unknown"; } else { cc = c.Category; } if (CommandTree.ContainsKey(cc)) { CommandTree[cc].Add(c); } else { var l = new List <CommandInfo>(); l.Add(c); CommandTree.Add(cc, l); } } foreach (var kvp in CommandTree) { result.AppendFormat(Environment.NewLine + "* {0} Related Commands:" + Environment.NewLine, kvp.Key.ToString()); int colMax = 0; for (int i = 0; i < kvp.Value.Count; i++) { if (colMax >= 120) { result.AppendLine(); colMax = 0; } result.AppendFormat(" {0,-15}", kvp.Value[i].Name); colMax += 15; } result.AppendLine(); } result.AppendLine(Environment.NewLine + "Help [command] for usage/information"); return(Success(result.ToString())); ; }