From c1a9bdc142bc216490b5c00cb87c8b973f4ebaeb Mon Sep 17 00:00:00 2001 From: RogueException Date: Sun, 18 Dec 2016 18:14:39 -0400 Subject: [PATCH] Cleaned up alias permutations, fixed empty aliases --- .../Builders/CommandBuilder.cs | 6 +++- .../Builders/ModuleBuilder.cs | 8 +++-- src/Discord.Net.Commands/Info/CommandInfo.cs | 31 ++++++++----------- src/Discord.Net.Commands/Info/ModuleInfo.cs | 4 +-- 4 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/Discord.Net.Commands/Builders/CommandBuilder.cs b/src/Discord.Net.Commands/Builders/CommandBuilder.cs index a3f2fee78..3b14da263 100644 --- a/src/Discord.Net.Commands/Builders/CommandBuilder.cs +++ b/src/Discord.Net.Commands/Builders/CommandBuilder.cs @@ -72,7 +72,11 @@ namespace Discord.Commands.Builders 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; } public CommandBuilder AddPrecondition(PreconditionAttribute precondition) diff --git a/src/Discord.Net.Commands/Builders/ModuleBuilder.cs b/src/Discord.Net.Commands/Builders/ModuleBuilder.cs index 4a4b83497..1075825f8 100644 --- a/src/Discord.Net.Commands/Builders/ModuleBuilder.cs +++ b/src/Discord.Net.Commands/Builders/ModuleBuilder.cs @@ -58,9 +58,13 @@ namespace Discord.Commands.Builders 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; } public ModuleBuilder AddPrecondition(PreconditionAttribute precondition) diff --git a/src/Discord.Net.Commands/Info/CommandInfo.cs b/src/Discord.Net.Commands/Info/CommandInfo.cs index 8920b25da..abe802d53 100644 --- a/src/Discord.Net.Commands/Info/CommandInfo.cs +++ b/src/Discord.Net.Commands/Info/CommandInfo.cs @@ -41,24 +41,19 @@ namespace Discord.Commands RunMode = (builder.RunMode == RunMode.Default ? service._defaultRunMode : builder.RunMode); Priority = builder.Priority; - - // both command and module provide aliases - if (module.Aliases.Count > 0 && builder.Aliases.Count > 0) - { - Aliases = module.Aliases - .Permutate(builder.Aliases, (first, second) => second != null ? first + service._separatorChar + second : first) - .Select(x => service._caseSensitive ? x : x.ToLowerInvariant()) - .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"); + + Aliases = module.Aliases + .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()) + .ToImmutableArray(); Preconditions = builder.Preconditions.ToImmutableArray(); diff --git a/src/Discord.Net.Commands/Info/ModuleInfo.cs b/src/Discord.Net.Commands/Info/ModuleInfo.cs index ab4f65713..2a6439c02 100644 --- a/src/Discord.Net.Commands/Info/ModuleInfo.cs +++ b/src/Discord.Net.Commands/Info/ModuleInfo.cs @@ -15,7 +15,7 @@ namespace Discord.Commands public string Remarks { get; } public IReadOnlyList Aliases { get; } - public IEnumerable Commands { get; } + public IReadOnlyList Commands { get; } public IReadOnlyList Preconditions { get; } public IReadOnlyList Submodules { get; } public ModuleInfo Parent { get; } @@ -31,7 +31,7 @@ namespace Discord.Commands Parent = parent; 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(); Submodules = BuildSubmodules(builder, service).ToImmutableArray();