Cleaned up alias generation
This commit is contained in:
@@ -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>();
|
var parent = builder;
|
||||||
builderStack.Push(builder);
|
while ((parent = parent.Parent) != null)
|
||||||
|
|
||||||
ModuleBuilder parent = builder.Parent;
|
|
||||||
while (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
|
var level = builderStack.Pop();
|
||||||
if (result == null)
|
result = result.Permutate(level.Aliases, (first, second) =>
|
||||||
{
|
{
|
||||||
if (level.Aliases.Count > 0)
|
if (first == "")
|
||||||
result = level.Aliases.ToList(); //create a shallow copy so we don't overwrite the builder unexpectedly
|
return second;
|
||||||
}
|
else if (second == "")
|
||||||
else if (result.Count() > level.Aliases.Count)
|
return first;
|
||||||
result = result.Permutate(level.Aliases, (first, second) => first + " " + second);
|
else
|
||||||
else
|
return first + service._separatorChar + second;
|
||||||
result = level.Aliases.Permutate(result, (second, first) => first + " " + 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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user