|
|
@@ -8,7 +8,6 @@ using System.Linq; |
|
|
|
using System.Reflection; |
|
|
|
using System.Threading; |
|
|
|
using System.Threading.Tasks; |
|
|
|
using Microsoft.Extensions.DependencyInjection; |
|
|
|
|
|
|
|
namespace Discord.Commands |
|
|
|
{ |
|
|
@@ -57,7 +56,10 @@ namespace Discord.Commands |
|
|
|
|
|
|
|
_defaultTypeReaders = new ConcurrentDictionary<Type, TypeReader>(); |
|
|
|
foreach (var type in PrimitiveParsers.SupportedTypes) |
|
|
|
{ |
|
|
|
_defaultTypeReaders[type] = PrimitiveTypeReader.Create(type); |
|
|
|
_defaultTypeReaders[typeof(Nullable<>).MakeGenericType(type)] = NullableTypeReader.Create(type, _defaultTypeReaders[type]); |
|
|
|
} |
|
|
|
|
|
|
|
_defaultTypeReaders[typeof(string)] = |
|
|
|
new PrimitiveTypeReader<string>((string x, out string y) => { y = x; return true; }, 0); |
|
|
@@ -190,17 +192,23 @@ namespace Discord.Commands |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
//Type Readers |
|
|
|
//Type Readers |
|
|
|
public void AddTypeReader<T>(TypeReader reader) |
|
|
|
{ |
|
|
|
var readers = _typeReaders.GetOrAdd(typeof(T), x => new ConcurrentDictionary<Type, TypeReader>()); |
|
|
|
readers[reader.GetType()] = reader; |
|
|
|
} |
|
|
|
=> AddTypeReader(typeof(T), reader); |
|
|
|
public void AddTypeReader(Type type, TypeReader reader) |
|
|
|
{ |
|
|
|
var readers = _typeReaders.GetOrAdd(type, x => new ConcurrentDictionary<Type, TypeReader>()); |
|
|
|
readers[reader.GetType()] = reader; |
|
|
|
|
|
|
|
if (type.GetTypeInfo().IsValueType) |
|
|
|
AddNullableTypeReader(type, reader); |
|
|
|
} |
|
|
|
internal void AddNullableTypeReader(Type valueType, TypeReader valueTypeReader) |
|
|
|
{ |
|
|
|
var readers = _typeReaders.GetOrAdd(typeof(Nullable<>).MakeGenericType(valueType), x => new ConcurrentDictionary<Type, TypeReader>()); |
|
|
|
var nullableReader = NullableTypeReader.Create(valueType, valueTypeReader); |
|
|
|
readers[nullableReader.GetType()] = nullableReader; |
|
|
|
} |
|
|
|
internal IDictionary<Type, TypeReader> GetTypeReaders(Type type) |
|
|
|
{ |
|
|
|
if (_typeReaders.TryGetValue(type, out var definedTypeReaders)) |
|
|
@@ -233,7 +241,6 @@ namespace Discord.Commands |
|
|
|
} |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
//Execution |
|
|
|
public SearchResult Search(ICommandContext context, int argPos) |
|
|
|
=> Search(context, context.Message.Content.Substring(argPos)); |
|
|
|