| @@ -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 | |||||
| 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(); | 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(); | ||||