diff --git a/src/Discord.Net.Commands/CommandService.cs b/src/Discord.Net.Commands/CommandService.cs
index 8e5297e49..6fd5d38ad 100644
--- a/src/Discord.Net.Commands/CommandService.cs
+++ b/src/Discord.Net.Commands/CommandService.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.Immutable;
@@ -262,7 +262,7 @@ namespace Discord.Commands
/// If should replace the default for if one exists.
public void AddTypeReader(Type type, TypeReader reader, bool replaceDefault)
{
- if (replaceDefault && _defaultTypeReaders.ContainsKey(type))
+ if (replaceDefault && HasDefaultTypeReader(type))
{
_defaultTypeReaders.AddOrUpdate(type, reader, (k, v) => reader);
if (type.GetTypeInfo().IsValueType)
@@ -281,6 +281,16 @@ namespace Discord.Commands
AddNullableTypeReader(type, reader);
}
}
+ internal bool HasDefaultTypeReader(Type type)
+ {
+ if (_defaultTypeReaders.ContainsKey(type))
+ return true;
+
+ var typeInfo = type.GetTypeInfo();
+ if (typeInfo.IsEnum)
+ return true;
+ return _entityTypeReaders.Any(x => type == x.Item1 || typeInfo.ImplementedInterfaces.Contains(x.Item2));
+ }
internal void AddNullableTypeReader(Type valueType, TypeReader valueTypeReader)
{
var readers = _typeReaders.GetOrAdd(typeof(Nullable<>).MakeGenericType(valueType), x => new ConcurrentDictionary());