From fd5e237b41427ba530bfbddd6b422deb183dde66 Mon Sep 17 00:00:00 2001 From: FiniteReality Date: Sun, 20 Nov 2016 13:40:40 +0000 Subject: [PATCH] Fix commands from being created with invalid aliases --- .../Builders/ModuleClassBuilder.cs | 8 +++++++- src/Discord.Net.Commands/Info/CommandInfo.cs | 14 +++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs b/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs index 9884f18db..31694d1d1 100644 --- a/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs +++ b/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs @@ -116,6 +116,9 @@ namespace Discord.Commands { var attributes = method.GetCustomAttributes(); + builder.Name = method.Name; + + var setName = false; foreach (var attribute in attributes) { // TODO: C#7 type switch @@ -124,10 +127,13 @@ namespace Discord.Commands var cmdAttr = attribute as CommandAttribute; builder.AddAliases(cmdAttr.Text); builder.RunMode = cmdAttr.RunMode; - builder.Name = builder.Name ?? cmdAttr.Text; + builder.Name = setName ? builder.Name ?? cmdAttr.Text : cmdAttr.Text ?? builder.Name; } else if (attribute is NameAttribute) + { builder.Name = (attribute as NameAttribute).Text; + setName = true; + } else if (attribute is PriorityAttribute) builder.Priority = (attribute as PriorityAttribute).Priority; else if (attribute is SummaryAttribute) diff --git a/src/Discord.Net.Commands/Info/CommandInfo.cs b/src/Discord.Net.Commands/Info/CommandInfo.cs index 4d546b6fa..06b0f25a3 100644 --- a/src/Discord.Net.Commands/Info/CommandInfo.cs +++ b/src/Discord.Net.Commands/Info/CommandInfo.cs @@ -39,11 +39,19 @@ namespace Discord.Commands RunMode = builder.RunMode; Priority = builder.Priority; - - if (module.Aliases.Count != 0) + + // both command and module provide aliases + if (module.Aliases.Count > 0 && builder.Aliases.Count > 0) Aliases = module.Aliases.Permutate(builder.Aliases, (first, second) => first + " " + second).ToImmutableArray(); - else + // only module provides aliases + else if (module.Aliases.Count > 0) + Aliases = module.Aliases.ToImmutableArray(); + // only command provides aliases + else if (builder.Aliases.Count > 0) Aliases = builder.Aliases.ToImmutableArray(); + // neither provide aliases + else + throw new InvalidOperationException("Cannot build a command without any aliases"); Preconditions = builder.Preconditions.ToImmutableArray();