Cleaned up alias permutations, fixed empty aliases

This commit is contained in:
RogueException
2016-12-18 18:14:39 -04:00
parent 5663e47db6
commit c1a9bdc142
4 changed files with 26 additions and 23 deletions

View File

@@ -72,7 +72,11 @@ namespace Discord.Commands.Builders
public CommandBuilder AddAliases(params string[] aliases) public CommandBuilder AddAliases(params string[] aliases)
{ {
_aliases.AddRange(aliases); for (int i = 0; i < aliases.Length; i++)
{
if (!_aliases.Contains(aliases[i]))
_aliases.Add(aliases[i]);
}
return this; return this;
} }
public CommandBuilder AddPrecondition(PreconditionAttribute precondition) public CommandBuilder AddPrecondition(PreconditionAttribute precondition)

View File

@@ -58,9 +58,13 @@ namespace Discord.Commands.Builders
return this; return this;
} }
public ModuleBuilder AddAlias(params string[] newAliases) public ModuleBuilder AddAlias(params string[] aliases)
{ {
_aliases.AddRange(newAliases); for (int i = 0; i < aliases.Length; i++)
{
if (!_aliases.Contains(aliases[i]))
_aliases.Add(aliases[i]);
}
return this; return this;
} }
public ModuleBuilder AddPrecondition(PreconditionAttribute precondition) public ModuleBuilder AddPrecondition(PreconditionAttribute precondition)

View File

@@ -42,23 +42,18 @@ namespace Discord.Commands
RunMode = (builder.RunMode == RunMode.Default ? service._defaultRunMode : builder.RunMode); RunMode = (builder.RunMode == RunMode.Default ? service._defaultRunMode : builder.RunMode);
Priority = builder.Priority; Priority = builder.Priority;
// both command and module provide aliases
if (module.Aliases.Count > 0 && builder.Aliases.Count > 0)
{
Aliases = module.Aliases Aliases = module.Aliases
.Permutate(builder.Aliases, (first, second) => second != null ? first + service._separatorChar + second : first) .Permutate(builder.Aliases, (first, second) =>
{
if (first == "")
return second;
else if (second == "")
return first;
else
return first + service._separatorChar + second;
})
.Select(x => service._caseSensitive ? x : x.ToLowerInvariant()) .Select(x => service._caseSensitive ? x : x.ToLowerInvariant())
.ToImmutableArray(); .ToImmutableArray();
}
// only module provides aliases
else if (module.Aliases.Count > 0)
Aliases = module.Aliases.Select(x => service._caseSensitive ? x : x.ToLowerInvariant()).ToImmutableArray();
// only command provides aliases
else if (builder.Aliases.Count > 0)
Aliases = builder.Aliases.Select(x => service._caseSensitive ? x : x.ToLowerInvariant()).ToImmutableArray();
// neither provide aliases
else
throw new InvalidOperationException("Cannot build a command without any aliases");
Preconditions = builder.Preconditions.ToImmutableArray(); Preconditions = builder.Preconditions.ToImmutableArray();

View File

@@ -15,7 +15,7 @@ namespace Discord.Commands
public string Remarks { get; } public string Remarks { get; }
public IReadOnlyList<string> Aliases { get; } public IReadOnlyList<string> Aliases { get; }
public IEnumerable<CommandInfo> Commands { get; } public IReadOnlyList<CommandInfo> Commands { get; }
public IReadOnlyList<PreconditionAttribute> Preconditions { get; } public IReadOnlyList<PreconditionAttribute> Preconditions { get; }
public IReadOnlyList<ModuleInfo> Submodules { get; } public IReadOnlyList<ModuleInfo> Submodules { get; }
public ModuleInfo Parent { get; } public ModuleInfo Parent { get; }
@@ -31,7 +31,7 @@ namespace Discord.Commands
Parent = parent; Parent = parent;
Aliases = BuildAliases(builder).ToImmutableArray(); Aliases = BuildAliases(builder).ToImmutableArray();
Commands = builder.Commands.Select(x => x.Build(this, service)); 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();