59 lines
1.7 KiB
C#
59 lines
1.7 KiB
C#
using System.Reflection;
|
|
using Discord.Audio;
|
|
using Discord.Commands;
|
|
using Discord.WebSocket;
|
|
using Elementary.Audio;
|
|
|
|
namespace Elementary.Commands;
|
|
|
|
public class Handler
|
|
{
|
|
private readonly DiscordSocketClient _client;
|
|
private readonly CommandService _commands;
|
|
private readonly IServiceProvider _services;
|
|
private readonly AudioManager _audioManager;
|
|
private readonly MessageHandler _messageHandler;
|
|
|
|
// Retrieve client and CommandService instance via ctor
|
|
public Handler(DiscordSocketClient client, CommandService commands, IServiceProvider services,
|
|
AudioManager audioManager, MessageHandler messageHandler)
|
|
{
|
|
_commands = commands;
|
|
_client = client;
|
|
_services = services;
|
|
_audioManager = audioManager;
|
|
_messageHandler = messageHandler;
|
|
}
|
|
|
|
public async Task Setup()
|
|
{
|
|
await _commands.AddModulesAsync(Assembly.GetEntryAssembly(), _services);
|
|
|
|
_client.MessageReceived += HandleMessage;
|
|
}
|
|
|
|
private async Task HandleMessage(SocketMessage messageParam)
|
|
{
|
|
var message = messageParam as SocketUserMessage;
|
|
if (message == null || message.Author.IsBot) return;
|
|
|
|
var argPos = 0;
|
|
|
|
if (message.HasCharPrefix('!', ref argPos) ||
|
|
message.HasMentionPrefix(_client.CurrentUser, ref argPos))
|
|
{
|
|
SocketCommandContext context = new(_client, message);
|
|
|
|
await _commands.ExecuteAsync(
|
|
context,
|
|
argPos,
|
|
_services);
|
|
}
|
|
|
|
if (_audioManager.isConnected)
|
|
{
|
|
Console.WriteLine("Handling message");
|
|
await _messageHandler.HandleMessage(message);
|
|
}
|
|
}
|
|
} |