|
|
@@ -30,44 +30,36 @@ namespace Discord.Commands |
|
|
|
Remarks = builder.Remarks; |
|
|
|
Parent = parent; |
|
|
|
|
|
|
|
Aliases = BuildAliases(builder).ToImmutableArray(); |
|
|
|
Aliases = BuildAliases(builder, service).ToImmutableArray(); |
|
|
|
Commands = builder.Commands.Select(x => x.Build(this, service)).ToImmutableArray(); |
|
|
|
Preconditions = BuildPreconditions(builder).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); |
|
|
|
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; |
|
|
|
} |
|
|
|
|
|
|
@@ -76,9 +68,7 @@ namespace Discord.Commands |
|
|
|
var result = new List<ModuleInfo>(); |
|
|
|
|
|
|
|
foreach (var submodule in parent.Modules) |
|
|
|
{ |
|
|
|
result.Add(submodule.Build(service, this)); |
|
|
|
} |
|
|
|
|
|
|
|
return result; |
|
|
|
} |
|
|
|