Add callback method for when a module class has been added (#934)
commit 5b047bf02b4299f34172cac05dc7e4a84ecc108c Author: Joe4evr <jii.geugten@gmail.com> Date: Fri Feb 2 22:22:00 2018 +0100 [feature/OnModuleAdded] Quickstart fixes (#946) * Quickstart: fix minor derp * Other overdue fixes commit bd3e9eee943b9092cc45217b19ff95bae359f888 Author: Christopher F <computerizedtaco@gmail.com> Date: Sat Jan 27 16:51:18 2018 -0500 Resort usings in ModuleBase commit 8042767579b337fdae7fe48e0a6ea2f007aef440 Author: Christopher F <computerizedtaco@gmail.com> Date: Sat Jan 27 16:41:39 2018 -0500 Clean up removed owned IServiceProvider commit 30066cb102ffbd65906ead72a377811aa501abba Author: Christopher F <computerizedtaco@gmail.com> Date: Sat Jan 27 16:37:22 2018 -0500 Remove redundant try-catch around OnModuleBuilding invocation If this exception is going to be rethrown, there's no reason to include a try-catch. commit 60c7c31d4476c498a97ae0536ec5792f08efb89b Author: Christopher F <computerizedtaco@gmail.com> Date: Sat Jan 27 16:36:27 2018 -0500 Include the ModuleBuilder in OnModuleBuilding This allows modules hooking into OnModuleBuilding method to mutate theirselves at runtime. commit b6a9ff57860ff3bddbad7ca850fd331529cb8e6e Author: Joe4evr <jii.geugten@gmail.com> Date: Mon Jan 22 13:17:14 2018 +0100 #DERP commit f623d19c68c5642a44898a561f77ed82d53fd103 Author: Joe4evr <jii.geugten@gmail.com> Date: Mon Jan 22 13:15:31 2018 +0100 Resolution for #937 because it's literally 4 lines of code commit 8272c9675b0d63b4100aaf57f5067d635b68f5e6 Author: Joe4evr <jii.geugten@gmail.com> Date: Mon Jan 22 11:39:28 2018 +0100 Re-adjust quickstart commit e30b9071351b69baa30a93a4851516dca9ea43cf Author: Joe4evr <jii.geugten@gmail.com> Date: Mon Jan 22 11:35:08 2018 +0100 Undo experimental changes, request IServiceProvider instance everywhere instead commit ad7e0a46c8709e845dfacdc298a893e22dc11567 Author: Joe4evr <jii.geugten@gmail.com> Date: Fri Jan 19 03:40:27 2018 +0100 Fix quickstart leftover from previous draft commit e3349ef3d400bb3ad8cb28dd4234d5316a80bcc4 Author: Joe4evr <jii.geugten@gmail.com> Date: Fri Jan 19 03:33:46 2018 +0100 Doc comment on items commit 81bd9111faaf98a52679daae863ab04dce96e63e Author: Joe4evr <jii.geugten@gmail.com> Date: Fri Jan 19 03:16:44 2018 +0100 Add comment about the ServiceProviderFactory in the quickstart commit 72b5e6c8a149d8e989b46351965daa14f8ca318c Author: Joe4evr <jii.geugten@gmail.com> Date: Fri Jan 19 03:10:40 2018 +0100 Remove superfluous comments, provide simpler alternative for setting the ServiceProvider. commit 74b17b0e04e2c413397a2e1b66ff814615326205 Author: Joe4evr <jii.geugten@gmail.com> Date: Tue Jan 16 18:06:28 2018 +0100 Experimental change for feedback commit 7b100e99bb119be190006d1cd8e403776930e401 Author: Joe4evr <jii.geugten@gmail.com> Date: Mon Jan 15 23:34:06 2018 +0100 * Make the service provider parameters required * Adjust quickstart guide to reflect changes commit 7f1b792946ac6b950922b06178aa5cc37d9f4144 Author: Joe4evr <jii.geugten@gmail.com> Date: Mon Jan 15 20:04:37 2018 +0100 I..... missed one. commit 031b289d80604666dde62619e521af303203d48d Author: Joe4evr <jii.geugten@gmail.com> Date: Mon Jan 15 20:02:20 2018 +0100 Rename method to more intuitive 'OnModuleBuilding' commit 9a166ef1d0baecd21e4e5b965e2ac364feddbe2e Author: Joe4evr <jii.geugten@gmail.com> Date: Mon Jan 15 19:09:10 2018 +0100 Add callback method for when a module class has been added to the CommandService.
This commit is contained in:
@@ -19,10 +19,10 @@ class Program
|
||||
|
||||
private readonly DiscordSocketClient _client;
|
||||
|
||||
// Keep the CommandService and IServiceCollection around for use with commands.
|
||||
// Keep the CommandService and DI container around for use with commands.
|
||||
// These two types require you install the Discord.Net.Commands package.
|
||||
private readonly IServiceCollection _map = new ServiceCollection();
|
||||
private readonly CommandService _commands = new CommandService();
|
||||
private readonly CommandService _commands;
|
||||
private readonly IServiceProvider _services;
|
||||
|
||||
private Program()
|
||||
{
|
||||
@@ -41,14 +41,45 @@ class Program
|
||||
// add the `using` at the top, and uncomment this line:
|
||||
//WebSocketProvider = WS4NetProvider.Instance
|
||||
});
|
||||
|
||||
_commands = new CommandService(new CommandServiceConfig
|
||||
{
|
||||
// Again, log level:
|
||||
LogLevel = LogSeverity.Info,
|
||||
|
||||
// There's a few more properties you can set,
|
||||
// for example, case-insensitive commands.
|
||||
CaseSensitiveCommands = false,
|
||||
});
|
||||
|
||||
// Subscribe the logging handler to both the client and the CommandService.
|
||||
_client.Log += Logger;
|
||||
_commands.Log += Logger;
|
||||
_client.Log += Log;
|
||||
_commands.Log += Log;
|
||||
|
||||
// Setup your DI container.
|
||||
_services = ConfigureServices(),
|
||||
|
||||
}
|
||||
|
||||
// If any services require the client, or the CommandService, or something else you keep on hand,
|
||||
// pass them as parameters into this method as needed.
|
||||
// If this method is getting pretty long, you can seperate it out into another file using partials.
|
||||
private static IServiceProvider ConfigureServices()
|
||||
{
|
||||
var map = new ServiceCollection()
|
||||
// Repeat this for all the service classes
|
||||
// and other dependencies that your commands might need.
|
||||
.AddSingleton(new SomeServiceClass());
|
||||
|
||||
// When all your required services are in the collection, build the container.
|
||||
// Tip: There's an overload taking in a 'validateScopes' bool to make sure
|
||||
// you haven't made any mistakes in your dependency graph.
|
||||
return map.BuildServiceProvider();
|
||||
}
|
||||
|
||||
// Example of a logging handler. This can be re-used by addons
|
||||
// that ask for a Func<LogMessage, Task>.
|
||||
private static Task Logger(LogMessage message)
|
||||
private static Task Log(LogMessage message)
|
||||
{
|
||||
switch (message.Severity)
|
||||
{
|
||||
@@ -92,24 +123,15 @@ class Program
|
||||
await Task.Delay(Timeout.Infinite);
|
||||
}
|
||||
|
||||
private IServiceProvider _services;
|
||||
|
||||
private async Task InitCommands()
|
||||
{
|
||||
// Repeat this for all the service classes
|
||||
// and other dependencies that your commands might need.
|
||||
_map.AddSingleton(new SomeServiceClass());
|
||||
|
||||
// When all your required services are in the collection, build the container.
|
||||
// Tip: There's an overload taking in a 'validateScopes' bool to make sure
|
||||
// you haven't made any mistakes in your dependency graph.
|
||||
_services = _map.BuildServiceProvider();
|
||||
|
||||
// Either search the program and add all Module classes that can be found.
|
||||
// Module classes MUST be marked 'public' or they will be ignored.
|
||||
await _commands.AddModulesAsync(Assembly.GetEntryAssembly());
|
||||
// You also need to pass your 'IServiceProvider' instance now,
|
||||
// so make sure that's done before you get here.
|
||||
await _commands.AddModulesAsync(Assembly.GetEntryAssembly(), _services);
|
||||
// Or add Modules manually if you prefer to be a little more explicit:
|
||||
await _commands.AddModuleAsync<SomeModule>();
|
||||
await _commands.AddModuleAsync<SomeModule>(_services);
|
||||
// Note that the first one is 'Modules' (plural) and the second is 'Module' (singular).
|
||||
|
||||
// Subscribe a handler to see if a message invokes a command.
|
||||
@@ -123,8 +145,6 @@ class Program
|
||||
if (msg == null) return;
|
||||
|
||||
// We don't want the bot to respond to itself or other bots.
|
||||
// NOTE: Selfbots should invert this first check and remove the second
|
||||
// as they should ONLY be allowed to respond to messages from the same account.
|
||||
if (msg.Author.Id == _client.CurrentUser.Id || msg.Author.IsBot) return;
|
||||
|
||||
// Create a number to track where the prefix ends and the command begins
|
||||
@@ -140,10 +160,12 @@ class Program
|
||||
|
||||
// Execute the command. (result does not indicate a return value,
|
||||
// rather an object stating if the command executed successfully).
|
||||
var result = await _commands.ExecuteAsync(context, pos, _services);
|
||||
var result = await _commands.ExecuteAsync(context, pos);
|
||||
|
||||
// Uncomment the following lines if you want the bot
|
||||
// to send a message if it failed (not advised for most situations).
|
||||
// to send a message if it failed.
|
||||
// This does not catch errors from commands with 'RunMode.Async',
|
||||
// subscribe a handler for '_commands.CommandExecuted' to see those.
|
||||
//if (!result.IsSuccess && result.Error != CommandError.UnknownCommand)
|
||||
// await msg.Channel.SendMessageAsync(result.ErrorReason);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user