@@ -110,32 +110,35 @@ namespace Discord.Commands
{
{
builder.AddCommand((command) =>
builder.AddCommand((command) =>
{
{
string firstName = null;
foreach (var method in overloads)
foreach (var method in overloads)
{
{
if (firstName == null)
firstName = method.Name;
command.AddOverload((overload) =>
command.AddOverload((overload) =>
{
{
BuildOverload(overload, typeInfo, method, service);
BuildOverload(overload, typeInfo, method, service);
});
});
}
}
var defaultOverload = overloads.OrderByDescending(x => x.GetCustomAttribute<PriorityAttribute>()?.Priority ?? 0).First();
BuildCommand(command, defaultOverload, service);
var allAttributes = overloads.SelectMany(x => x.GetCustomAttributes());
BuildCommand(command, firstName, allAttributes, service);
});
});
}
}
}
}
private static void BuildCommand(CommandBuilder builder, MethodInfo method, CommandService service)
{
var attributes = method.GetCustomAttributes();
private static void BuildCommand(CommandBuilder builder, string defaultName, IEnumerable<Attribute> attributes, CommandService service)
{
foreach (var attribute in attributes)
foreach (var attribute in attributes)
{
{
// TODO: C#7 type switch
// TODO: C#7 type switch
if (attribute is CommandAttribute)
if (attribute is CommandAttribute)
{
{
var cmdAttr = attribute as CommandAttribute;
var cmdAttr = attribute as CommandAttribute;
builder.AddAliases(cmdAttr.Text);
if (!builder.Aliases.Contains(cmdAttr.Text))
builder.AddAliases(cmdAttr.Text);
builder.Name = builder.Name ?? cmdAttr.Text;
builder.Name = builder.Name ?? cmdAttr.Text;
}
}
else if (attribute is NameAttribute)
else if (attribute is NameAttribute)
@@ -149,7 +152,7 @@ namespace Discord.Commands
}
}
if (builder.Name == null)
if (builder.Name == null)
builder.Name = method. Name;
builder.Name = default Name;
}
}
private static void BuildOverload(OverloadBuilder builder, TypeInfo typeInfo, MethodInfo method, CommandService service)
private static void BuildOverload(OverloadBuilder builder, TypeInfo typeInfo, MethodInfo method, CommandService service)