| @@ -81,7 +81,7 @@ namespace Discord.Commands | |||||
| var reader = Module.Service.GetTypeReader(type); | var reader = Module.Service.GetTypeReader(type); | ||||
| if (reader == null) | if (reader == null) | ||||
| throw new InvalidOperationException($"This type ({type.FullName}) is not supported."); | |||||
| throw new InvalidOperationException($"{type.FullName} is not supported as a command parameter, are you missing a TypeReader?"); | |||||
| bool isUnparsed = parameter.GetCustomAttribute<UnparsedAttribute>() != null; | bool isUnparsed = parameter.GetCustomAttribute<UnparsedAttribute>() != null; | ||||
| if (isUnparsed) | if (isUnparsed) | ||||
| @@ -103,6 +103,9 @@ namespace Discord.Commands | |||||
| } | } | ||||
| private Func<IMessage, IReadOnlyList<object>, Task> BuildAction(MethodInfo methodInfo) | private Func<IMessage, IReadOnlyList<object>, Task> BuildAction(MethodInfo methodInfo) | ||||
| { | { | ||||
| if (methodInfo.ReturnType != typeof(Task)) | |||||
| throw new InvalidOperationException("Commands must return a non-generic Task."); | |||||
| //TODO: Temporary reflection hack. Lets build an actual expression tree here. | //TODO: Temporary reflection hack. Lets build an actual expression tree here. | ||||
| return (msg, args) => | return (msg, args) => | ||||
| { | { | ||||