2023-07-25 01:16:16 +09:00

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);
}
}
}