Added non-generic Modules.Add method
This commit is contained in:
@@ -8,15 +8,19 @@
|
|||||||
return client;
|
return client;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void AddModule<T>(this DiscordClient client, T instance, string name = null, ModuleFilter filter = ModuleFilter.None)
|
public static void AddModule(this DiscordClient client, IModule instance, string name = null, ModuleFilter filter = ModuleFilter.None)
|
||||||
where T : class, IModule
|
|
||||||
{
|
{
|
||||||
client.GetService<ModuleService>().Add(instance, name ?? nameof(T), filter);
|
client.GetService<ModuleService>().Add(instance, name, filter);
|
||||||
}
|
}
|
||||||
public static void AddModule<T>(this DiscordClient client, string name = null, ModuleFilter filter = ModuleFilter.None)
|
public static void AddModule<T>(this DiscordClient client, string name = null, ModuleFilter filter = ModuleFilter.None)
|
||||||
where T : class, IModule, new()
|
where T : class, IModule, new()
|
||||||
{
|
{
|
||||||
client.GetService<ModuleService>().Add(new T(), name ?? nameof(T), filter);
|
client.GetService<ModuleService>().Add<T>(name, filter);
|
||||||
|
}
|
||||||
|
public static void AddModule<T>(this DiscordClient client, T instance, string name = null, ModuleFilter filter = ModuleFilter.None)
|
||||||
|
where T : class, IModule
|
||||||
|
{
|
||||||
|
client.GetService<ModuleService>().Add(instance, name, filter);
|
||||||
}
|
}
|
||||||
public static ModuleManager<T> GetModule<T>(this DiscordClient client)
|
public static ModuleManager<T> GetModule<T>(this DiscordClient client)
|
||||||
where T : class, IModule
|
where T : class, IModule
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
namespace Discord.Modules
|
namespace Discord.Modules
|
||||||
{
|
{
|
||||||
@@ -7,10 +9,13 @@ namespace Discord.Modules
|
|||||||
{
|
{
|
||||||
public DiscordClient Client { get; private set; }
|
public DiscordClient Client { get; private set; }
|
||||||
|
|
||||||
public IEnumerable<ModuleManager> Modules => _modules.Values;
|
private static readonly MethodInfo addMethod = typeof(ModuleService).GetTypeInfo().GetDeclaredMethods(nameof(Add))
|
||||||
|
.Single(x => x.IsGenericMethodDefinition && x.GetParameters().Length == 3);
|
||||||
|
|
||||||
|
public IEnumerable<ModuleManager> Modules => _modules.Values;
|
||||||
private readonly Dictionary<Type, ModuleManager> _modules;
|
private readonly Dictionary<Type, ModuleManager> _modules;
|
||||||
|
|
||||||
public ModuleService()
|
public ModuleService()
|
||||||
{
|
{
|
||||||
_modules = new Dictionary<Type, ModuleManager>();
|
_modules = new Dictionary<Type, ModuleManager>();
|
||||||
}
|
}
|
||||||
@@ -20,22 +25,29 @@ namespace Discord.Modules
|
|||||||
Client = client;
|
Client = client;
|
||||||
}
|
}
|
||||||
|
|
||||||
public T Add<T>(T module, string name, ModuleFilter filterType)
|
public void Add(IModule instance, string name, ModuleFilter filter)
|
||||||
|
{
|
||||||
|
Type type = instance.GetType();
|
||||||
|
addMethod.MakeGenericMethod(type).Invoke(this, new object[] { instance, name, filter });
|
||||||
|
}
|
||||||
|
public void Add<T>(string name, ModuleFilter filter)
|
||||||
|
where T : class, IModule, new()
|
||||||
|
=> Add(new T(), name, filter);
|
||||||
|
public void Add<T>(T instance, string name, ModuleFilter filter)
|
||||||
where T : class, IModule
|
where T : class, IModule
|
||||||
{
|
{
|
||||||
if (module == null) throw new ArgumentNullException(nameof(module));
|
if (instance == null) throw new ArgumentNullException(nameof(instance));
|
||||||
if (name == null) throw new ArgumentNullException(nameof(name));
|
|
||||||
if (Client == null)
|
if (Client == null)
|
||||||
throw new InvalidOperationException("Service needs to be added to a DiscordClient before modules can be installed.");
|
throw new InvalidOperationException("Service needs to be added to a DiscordClient before modules can be installed.");
|
||||||
|
|
||||||
Type type = typeof(T);
|
Type type = typeof(T);
|
||||||
|
if (name == null) name = type.Name;
|
||||||
if (_modules.ContainsKey(type))
|
if (_modules.ContainsKey(type))
|
||||||
throw new InvalidOperationException("This module has already been added.");
|
throw new InvalidOperationException("This module has already been added.");
|
||||||
|
|
||||||
var manager = new ModuleManager<T>(Client, module, name, filterType);
|
var manager = new ModuleManager<T>(Client, instance, name, filter);
|
||||||
_modules.Add(type, manager);
|
_modules.Add(type, manager);
|
||||||
module.Install(manager);
|
instance.Install(manager);
|
||||||
return module;
|
|
||||||
}
|
}
|
||||||
public ModuleManager<T> Get<T>()
|
public ModuleManager<T> Get<T>()
|
||||||
where T : class, IModule
|
where T : class, IModule
|
||||||
|
|||||||
Reference in New Issue
Block a user