80 lines
No EOL
2.7 KiB
C#
80 lines
No EOL
2.7 KiB
C#
using Discord;
|
|
using Discord.Interactions;
|
|
using Discord.WebSocket;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.Hosting;
|
|
using Microsoft.Extensions.Logging;
|
|
using System.Reflection;
|
|
using Flux_System_Assistant.Utility;
|
|
using ILogger = Serilog.ILogger;
|
|
|
|
namespace Flux_System_Assistant.Services
|
|
{
|
|
public class InteractionHandlingService : IHostedService
|
|
{
|
|
private readonly DiscordSocketClient _discord;
|
|
private readonly InteractionService _interactions;
|
|
private readonly IServiceProvider _services;
|
|
private readonly IConfiguration _config;
|
|
private readonly ILogger _logger;
|
|
|
|
public InteractionHandlingService(
|
|
DiscordSocketClient discord,
|
|
InteractionService interactions,
|
|
IServiceProvider services,
|
|
IConfiguration config,
|
|
ILogger logger)
|
|
{
|
|
_discord = discord;
|
|
_interactions = interactions;
|
|
_services = services;
|
|
_config = config;
|
|
_logger = logger;
|
|
|
|
_interactions.Log += msg => LoggerService.OnLogAsync(logger, msg);
|
|
}
|
|
|
|
public async Task StartAsync(CancellationToken cancellationToken)
|
|
{
|
|
_discord.Ready += () => _interactions.RegisterCommandsGloballyAsync(true);
|
|
_discord.InteractionCreated += OnInteractionAsync;
|
|
|
|
await _interactions.AddModulesAsync(Assembly.GetEntryAssembly(), _services);
|
|
}
|
|
|
|
public Task StopAsync(CancellationToken cancellationToken)
|
|
{
|
|
_interactions.Dispose();
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
private async Task OnInteractionAsync(SocketInteraction interaction)
|
|
{
|
|
try
|
|
{
|
|
var context = new SocketInteractionContext(_discord, interaction);
|
|
|
|
if (context.User is SocketGuildUser user && user.Roles.Select(x => x.Name).Any(x => x == "GM's" || x == "Flux Stellar Corporation"))
|
|
{
|
|
var result = await _interactions.ExecuteCommandAsync(context, _services);
|
|
|
|
if (!result.IsSuccess)
|
|
await context.Channel.SendMessageAsync(result.ToString());
|
|
}
|
|
else
|
|
{
|
|
await interaction.RespondAsync(ephemeral: true,
|
|
text: "This is currently a dev only bot. Please do not use it yet");
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
if (interaction.Type == InteractionType.ApplicationCommand)
|
|
{
|
|
await interaction.GetOriginalResponseAsync()
|
|
.ContinueWith(msg => msg.Result.DeleteAsync());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |