Ajout command handler et premier module (ping)
This commit is contained in:
parent
0bce99f0c1
commit
94323b7f89
78
Sean/CommandHandler.cs
Normal file
78
Sean/CommandHandler.cs
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
using Discord.Commands;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Sean
|
||||||
|
{
|
||||||
|
public class CommandHandler
|
||||||
|
{
|
||||||
|
#region Fields
|
||||||
|
private readonly DiscordSocketClient _client;
|
||||||
|
private readonly CommandService _commands;
|
||||||
|
#endregion Fields
|
||||||
|
|
||||||
|
#region Constructors
|
||||||
|
public CommandHandler(DiscordSocketClient client, CommandService commands)
|
||||||
|
{
|
||||||
|
_commands = commands;
|
||||||
|
_client = client;
|
||||||
|
}
|
||||||
|
#endregion Constructors
|
||||||
|
|
||||||
|
#region Methods
|
||||||
|
public async Task InstallCommandsAsync()
|
||||||
|
{
|
||||||
|
// Hook the MessageReceived event into our command handler
|
||||||
|
_client.MessageReceived += HandleCommandAsync;
|
||||||
|
|
||||||
|
// Here we discover all of the command modules in the entry
|
||||||
|
// assembly and load them. Starting from Discord.NET 2.0, a
|
||||||
|
// service provider is required to be passed into the
|
||||||
|
// module registration method to inject the
|
||||||
|
// required dependencies.
|
||||||
|
//
|
||||||
|
// If you do not use Dependency Injection, pass null.
|
||||||
|
// See Dependency Injection guide for more information.
|
||||||
|
await _commands.AddModulesAsync(assembly: Assembly.GetEntryAssembly(),
|
||||||
|
services: null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task HandleCommandAsync(SocketMessage messageParam)
|
||||||
|
{
|
||||||
|
// Don't process the command if it was a system message
|
||||||
|
var message = messageParam as SocketUserMessage;
|
||||||
|
if (message == null) return;
|
||||||
|
|
||||||
|
// Create a number to track where the prefix ends and the command begins
|
||||||
|
int argPos = 0;
|
||||||
|
|
||||||
|
// Determine if the message is a command based on the prefix and make sure no bots trigger commands
|
||||||
|
if (!(message.HasCharPrefix('!', ref argPos) ||
|
||||||
|
message.HasMentionPrefix(_client.CurrentUser, ref argPos)) ||
|
||||||
|
message.Author.IsBot)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Create a WebSocket-based command context based on the message
|
||||||
|
var context = new SocketCommandContext(_client, message);
|
||||||
|
|
||||||
|
// Execute the command with the command context we just
|
||||||
|
// created, along with the service provider for precondition checks.
|
||||||
|
|
||||||
|
// Keep in mind that result does not indicate a return value
|
||||||
|
// rather an object stating if the command executed successfully.
|
||||||
|
var result = await _commands.ExecuteAsync(
|
||||||
|
context: context,
|
||||||
|
argPos: argPos,
|
||||||
|
services: null);
|
||||||
|
|
||||||
|
// Optionally, we may inform the user if the command fails
|
||||||
|
// to be executed; however, this may not always be desired,
|
||||||
|
// as it may clog up the request queue should a user spam a
|
||||||
|
// command.
|
||||||
|
// if (!result.IsSuccess)
|
||||||
|
// await context.Channel.SendMessageAsync(result.ErrorReason);
|
||||||
|
}
|
||||||
|
#endregion Methods
|
||||||
|
}
|
||||||
|
}
|
14
Sean/Modules/PingModule.cs
Normal file
14
Sean/Modules/PingModule.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using Discord.Commands;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Sean.Modules
|
||||||
|
{
|
||||||
|
public class PingModule : ModuleBase<SocketCommandContext>
|
||||||
|
{
|
||||||
|
#region Methods
|
||||||
|
[Command("ping")]
|
||||||
|
[Summary("Ping pong !")]
|
||||||
|
public Task PongAsync() => ReplyAsync("Pong !");
|
||||||
|
#endregion Methods
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,5 @@
|
|||||||
using Discord;
|
using Discord;
|
||||||
|
using Discord.Commands;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@ -8,20 +9,29 @@ namespace Sean
|
|||||||
internal class Program
|
internal class Program
|
||||||
{
|
{
|
||||||
#region Fields
|
#region Fields
|
||||||
private DiscordSocketClient _client;
|
private DiscordSocketClient client;
|
||||||
|
private CommandHandler commandHandler;
|
||||||
|
private CommandService commandService;
|
||||||
|
private CommandServiceConfig commandServiceConfig;
|
||||||
#endregion Fields
|
#endregion Fields
|
||||||
|
|
||||||
#region Methods
|
#region Methods
|
||||||
public async Task MainAsync()
|
public async Task MainAsync()
|
||||||
{
|
{
|
||||||
_client = new DiscordSocketClient();
|
commandServiceConfig = new CommandServiceConfig
|
||||||
|
{
|
||||||
|
CaseSensitiveCommands = false,
|
||||||
|
LogLevel = LogSeverity.Debug
|
||||||
|
};
|
||||||
|
|
||||||
_client.Log += Log;
|
commandService = new CommandService(commandServiceConfig);
|
||||||
|
client = new DiscordSocketClient();
|
||||||
|
client.Log += Log;
|
||||||
|
commandHandler = new CommandHandler(client, commandService);
|
||||||
|
await commandHandler.InstallCommandsAsync();
|
||||||
|
|
||||||
_client.MessageReceived += MessageReceived;
|
await client.LoginAsync(TokenType.Bot, Environment.GetEnvironmentVariable("DiscordToken_Sean"));
|
||||||
|
await client.StartAsync();
|
||||||
await _client.LoginAsync(TokenType.Bot, Environment.GetEnvironmentVariable("DiscordToken_Sean"));
|
|
||||||
await _client.StartAsync();
|
|
||||||
|
|
||||||
// Block this task until the program is closed.
|
// Block this task until the program is closed.
|
||||||
await Task.Delay(-1);
|
await Task.Delay(-1);
|
||||||
@ -33,13 +43,6 @@ namespace Sean
|
|||||||
Console.WriteLine(msg.ToString());
|
Console.WriteLine(msg.ToString());
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
private async Task MessageReceived(SocketMessage message)
|
|
||||||
{
|
|
||||||
if (message.Content == "!ping")
|
|
||||||
{
|
|
||||||
await message.Channel.SendMessageAsync("Pong!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endregion Methods
|
#endregion Methods
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user