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

@@ -41,24 +41,19 @@ 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 Aliases = module.Aliases
if (module.Aliases.Count > 0 && builder.Aliases.Count > 0) .Permutate(builder.Aliases, (first, second) =>
{ {
Aliases = module.Aliases if (first == "")
.Permutate(builder.Aliases, (first, second) => second != null ? first + service._separatorChar + second : first) return second;
.Select(x => service._caseSensitive ? x : x.ToLowerInvariant()) else if (second == "")
.ToImmutableArray(); return first;
} else
// only module provides aliases return first + service._separatorChar + second;
else if (module.Aliases.Count > 0) })
Aliases = module.Aliases.Select(x => service._caseSensitive ? x : x.ToLowerInvariant()).ToImmutableArray(); .Select(x => service._caseSensitive ? x : x.ToLowerInvariant())
// only command provides aliases .ToImmutableArray();
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();