@@ -71,7 +71,6 @@ namespace Discord.Commands
{
{
var parameter = parameters[i];
var parameter = parameters[i];
var type = parameter.ParameterType;
var type = parameter.ParameterType;
Type underlyingType = null;
if (i == 0)
if (i == 0)
{
{
@@ -81,20 +80,18 @@ namespace Discord.Commands
continue;
continue;
}
}
// TODO: is there a better way of detecting 'params'?
bool isParams = type.IsArray && i == parameters.Length - 1;
if (isParams)
underlyingType = type.GetElementType();
else
underlyingType = type;
//Detect 'params'
bool isMultiple = parameter.GetCustomAttribute<ParamArrayAttribute>() != null;
if (isMultiple)
type = type.GetElementType();
var reader = Module.Service.GetTypeReader(underlyingType);
var underlyingTypeInfo = underlyingType.GetTypeInfo();
var reader = Module.Service.GetTypeReader(type);
var typeInfo = type.GetTypeInfo();
var typeInfo = type.GetTypeInfo();
if (reader == null && underlyingTypeInfo.IsEnum)
//Detect enums
if (reader == null && typeInfo.IsEnum)
{
{
reader = EnumTypeReader.GetReader(underlyingT ype);
reader = EnumTypeReader.GetReader(t ype);
Module.Service.AddTypeReader(type, reader);
Module.Service.AddTypeReader(type, reader);
}
}
@@ -110,7 +107,7 @@ namespace Discord.Commands
bool isOptional = parameter.IsOptional;
bool isOptional = parameter.IsOptional;
object defaultValue = parameter.HasDefaultValue ? parameter.DefaultValue : null;
object defaultValue = parameter.HasDefaultValue ? parameter.DefaultValue : null;
paramBuilder.Add(new CommandParameter(name, description, type, underlyingType, reader, isOptional, isRemainder, isParams , defaultValue));
paramBuilder.Add(new CommandParameter(name, description, type, reader, isOptional, isRemainder, isMultiple , defaultValue));
}
}
return paramBuilder.ToImmutable();
return paramBuilder.ToImmutable();
}
}
@@ -118,8 +115,7 @@ namespace Discord.Commands
{
{
if (methodInfo.ReturnType != typeof(Task))
if (methodInfo.ReturnType != typeof(Task))
throw new InvalidOperationException("Commands must return a non-generic Task.");
throw new InvalidOperationException("Commands must return a non-generic Task.");
//TODO: Temporary reflection hack. Lets build an actual expression tree here.
return (msg, args) =>
return (msg, args) =>
{
{
object[] newArgs = new object[args.Count + 1];
object[] newArgs = new object[args.Count + 1];