Cleaned up alias permutations, fixed empty aliases
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user