diff --git a/src/Discord.Net.Commands/Builders/ModuleBuilder.cs b/src/Discord.Net.Commands/Builders/ModuleBuilder.cs index 0ada5a9c2..6dc50db31 100644 --- a/src/Discord.Net.Commands/Builders/ModuleBuilder.cs +++ b/src/Discord.Net.Commands/Builders/ModuleBuilder.cs @@ -120,7 +120,7 @@ namespace Discord.Commands.Builders if (Name == null) Name = _aliases[0]; - if (TypeInfo != null) + if (TypeInfo != null && !TypeInfo.IsAbstract) { var moduleInstance = ReflectionUtils.CreateObject(TypeInfo, service, services); moduleInstance.OnModuleBuilding(service, this); diff --git a/src/Discord.Net.Commands/Builders/ParameterBuilder.cs b/src/Discord.Net.Commands/Builders/ParameterBuilder.cs index d1782d7ea..8a59c247c 100644 --- a/src/Discord.Net.Commands/Builders/ParameterBuilder.cs +++ b/src/Discord.Net.Commands/Builders/ParameterBuilder.cs @@ -45,14 +45,7 @@ namespace Discord.Commands.Builders internal void SetType(Type type) { - var readers = Command.Module.Service.GetTypeReaders(type); - if (readers != null) - TypeReader = readers.FirstOrDefault().Value; - else - TypeReader = Command.Module.Service.GetDefaultTypeReader(type); - - if (TypeReader == null) - throw new InvalidOperationException($"{type} does not have a TypeReader registered for it. Parameter: {Name} in {Command.PrimaryAlias}"); + TypeReader = GetReader(type); if (type.GetTypeInfo().IsValueType) DefaultValue = Activator.CreateInstance(type); @@ -60,7 +53,16 @@ namespace Discord.Commands.Builders type = ParameterType.GetElementType(); ParameterType = type; } - + + private TypeReader GetReader(Type type) + { + var readers = Command.Module.Service.GetTypeReaders(type); + if (readers != null) + return readers.FirstOrDefault().Value; + else + return Command.Module.Service.GetDefaultTypeReader(type); + } + public ParameterBuilder WithSummary(string summary) { Summary = summary; @@ -100,10 +102,10 @@ namespace Discord.Commands.Builders internal ParameterInfo Build(CommandInfo info) { - if (TypeReader == null) + if ((TypeReader ?? (TypeReader = GetReader(ParameterType))) == null) throw new InvalidOperationException($"No type reader found for type {ParameterType.Name}, one must be specified"); return new ParameterInfo(this, info, Command.Module.Service); } } -} \ No newline at end of file +}