Update the quickstart structure to rc3.

This commit is contained in:
Joe4evr
2017-05-13 03:15:55 +02:00
parent c01769ef4a
commit af5fdec486

View File

@@ -1,6 +1,7 @@
using System; using System;
using System.Reflection; using System.Reflection;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Discord; using Discord;
using Discord.Commands; using Discord.Commands;
using Discord.WebSocket; using Discord.WebSocket;
@@ -9,8 +10,8 @@ class Program
{ {
private readonly DiscordSocketClient _client; private readonly DiscordSocketClient _client;
// Keep the CommandService and IDependencyMap around for use with commands. // Keep the CommandService and IServiceCollection around for use with commands.
private readonly IDependencyMap _map = new DependencyMap(); private readonly IServiceCollection _map = new ServiceCollection();
private readonly CommandService _commands = new CommandService(); private readonly CommandService _commands = new CommandService();
// Program entry point // Program entry point
@@ -78,22 +79,29 @@ class Program
// Login and connect. // Login and connect.
await _client.LoginAsync(TokenType.Bot, /* <DON'T HARDCODE YOUR TOKEN> */); await _client.LoginAsync(TokenType.Bot, /* <DON'T HARDCODE YOUR TOKEN> */);
await _client.StartAsync(); await _client.StartAsync();
// Wait infinitely so your bot actually stays connected. // Wait infinitely so your bot actually stays connected.
await Task.Delay(-1); await Task.Delay(-1);
} }
private IServiceProvider _services;
private async Task InitCommands() private async Task InitCommands()
{ {
// Repeat this for all the service classes // Repeat this for all the service classes
// and other dependencies that your commands might need. // and other dependencies that your commands might need.
_map.Add(new SomeServiceClass()); _map.AddSingleton(new SomeServiceClass());
// Either search the program and add all Module classes that can be found: // Either search the program and add all Module classes that can be found:
await _commands.AddModulesAsync(Assembly.GetEntryAssembly()); await _commands.AddModulesAsync(Assembly.GetEntryAssembly());
// Or add Modules manually if you prefer to be a little more explicit: // Or add Modules manually if you prefer to be a little more explicit:
await _commands.AddModuleAsync<SomeModule>(); await _commands.AddModuleAsync<SomeModule>();
// 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();
// Subscribe a handler to see if a message invokes a command. // Subscribe a handler to see if a message invokes a command.
_client.MessageReceived += HandleCommandAsync; _client.MessageReceived += HandleCommandAsync;
} }
@@ -110,14 +118,14 @@ class Program
// you want to prefix your commands with. // you want to prefix your commands with.
// Uncomment the second half if you also want // Uncomment the second half if you also want
// commands to be invoked by mentioning the bot instead. // commands to be invoked by mentioning the bot instead.
if (msg.HasCharPrefix('!', ref pos) /* || msg.HasMentionPrefix(msg.Discord.CurrentUser, ref pos) */) if (msg.HasCharPrefix('!', ref pos) /* || msg.HasMentionPrefix(_client.CurrentUser, ref pos) */)
{ {
// Create a Command Context // Create a Command Context
var context = new SocketCommandContext(msg.Discord, msg); var context = new SocketCommandContext(_client, msg);
// Execute the command. (result does not indicate a return value, // Execute the command. (result does not indicate a return value,
// rather an object stating if the command executed succesfully). // rather an object stating if the command executed succesfully).
var result = await _commands.ExecuteAsync(context, pos, _map); var result = await _commands.ExecuteAsync(context, pos, _services);
// Uncomment the following lines if you want the bot // 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 (not advised for most situations).