| @@ -30,44 +30,36 @@ namespace Discord.Commands | |||||
| Remarks = builder.Remarks; | Remarks = builder.Remarks; | ||||
| Parent = parent; | Parent = parent; | ||||
| Aliases = BuildAliases(builder).ToImmutableArray(); | |||||
| Aliases = BuildAliases(builder, service).ToImmutableArray(); | |||||
| Commands = builder.Commands.Select(x => x.Build(this, service)).ToImmutableArray(); | Commands = builder.Commands.Select(x => x.Build(this, service)).ToImmutableArray(); | ||||
| Preconditions = BuildPreconditions(builder).ToImmutableArray(); | Preconditions = BuildPreconditions(builder).ToImmutableArray(); | ||||
| Submodules = BuildSubmodules(builder, service).ToImmutableArray(); | Submodules = BuildSubmodules(builder, service).ToImmutableArray(); | ||||
| } | } | ||||
| private static IEnumerable<string> BuildAliases(ModuleBuilder builder) | |||||
| private static IEnumerable<string> BuildAliases(ModuleBuilder builder, CommandService service) | |||||
| { | { | ||||
| IEnumerable<string> result = null; | |||||
| var result = builder.Aliases.ToList(); | |||||
| var builderStack = new Stack<ModuleBuilder>(); | |||||
| Stack<ModuleBuilder> builderStack = new Stack<ModuleBuilder>(); | |||||
| builderStack.Push(builder); | |||||
| ModuleBuilder parent = builder.Parent; | |||||
| while (parent != null) | |||||
| { | |||||
| var parent = builder; | |||||
| while ((parent = parent.Parent) != null) | |||||
| builderStack.Push(parent); | builderStack.Push(parent); | ||||
| parent = parent.Parent; | |||||
| } | |||||
| while (builderStack.Count() > 0) | |||||
| while (builderStack.Count > 0) | |||||
| { | { | ||||
| ModuleBuilder level = builderStack.Pop(); //get the topmost builder | |||||
| if (result == null) | |||||
| var level = builderStack.Pop(); | |||||
| result = result.Permutate(level.Aliases, (first, second) => | |||||
| { | { | ||||
| if (level.Aliases.Count > 0) | |||||
| result = level.Aliases.ToList(); //create a shallow copy so we don't overwrite the builder unexpectedly | |||||
| } | |||||
| else if (result.Count() > level.Aliases.Count) | |||||
| result = result.Permutate(level.Aliases, (first, second) => first + " " + second); | |||||
| else | |||||
| result = level.Aliases.Permutate(result, (second, first) => first + " " + second); | |||||
| if (first == "") | |||||
| return second; | |||||
| else if (second == "") | |||||
| return first; | |||||
| else | |||||
| return first + service._separatorChar + second; | |||||
| }).ToList(); | |||||
| } | } | ||||
| if (result == null) //there were no aliases; default to an empty string alias | |||||
| result = new List<string> { "" }; | |||||
| return result; | return result; | ||||
| } | } | ||||
| @@ -76,9 +68,7 @@ namespace Discord.Commands | |||||
| var result = new List<ModuleInfo>(); | var result = new List<ModuleInfo>(); | ||||
| foreach (var submodule in parent.Modules) | foreach (var submodule in parent.Modules) | ||||
| { | |||||
| result.Add(submodule.Build(service, this)); | result.Add(submodule.Build(service, this)); | ||||
| } | |||||
| return result; | return result; | ||||
| } | } | ||||