diff --git a/src/Discord.Net.Commands/CommandMap.cs b/src/Discord.Net.Commands/CommandMap.cs index 504479400..c147d47ff 100644 --- a/src/Discord.Net.Commands/CommandMap.cs +++ b/src/Discord.Net.Commands/CommandMap.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; namespace Discord.Commands { @@ -9,19 +10,29 @@ namespace Discord.Commands private Command _command; private readonly Dictionary _subCommands; + public Command Command => _command; + public IEnumerable SubCommands => _subCommands.Select(x => x.Value.Command).Where(x => x != null); + public CommandMap(CommandMap parent) { _parent = parent; _subCommands = new Dictionary(); } - + public CommandMap GetMap(string text) { - CommandMap map; - if (_subCommands.TryGetValue(text, out map)) - return map; - else - return null; + return GetMap(0, text.Split(' ')); + } + public CommandMap GetMap(int index, string[] parts) + { + if (index != parts.Length) + { + string nextPart = parts[index]; + CommandMap nextGroup; + if (_subCommands.TryGetValue(nextPart, out nextGroup)) + return nextGroup.GetMap(index + 1, parts); + } + return this; } public Command GetCommand()