| @@ -1,5 +1,6 @@ | |||||
| using System; | using System; | ||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.Linq; | |||||
| namespace Discord.Commands | namespace Discord.Commands | ||||
| { | { | ||||
| @@ -9,19 +10,29 @@ namespace Discord.Commands | |||||
| private Command _command; | private Command _command; | ||||
| private readonly Dictionary<string, CommandMap> _subCommands; | private readonly Dictionary<string, CommandMap> _subCommands; | ||||
| public Command Command => _command; | |||||
| public IEnumerable<Command> SubCommands => _subCommands.Select(x => x.Value.Command).Where(x => x != null); | |||||
| public CommandMap(CommandMap parent) | public CommandMap(CommandMap parent) | ||||
| { | { | ||||
| _parent = parent; | _parent = parent; | ||||
| _subCommands = new Dictionary<string, CommandMap>(); | _subCommands = new Dictionary<string, CommandMap>(); | ||||
| } | } | ||||
| public CommandMap GetMap(string text) | 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() | public Command GetCommand() | ||||