|
|
@@ -0,0 +1,73 @@ |
|
|
|
using Discord; |
|
|
|
using Discord.Interactions; |
|
|
|
using Discord.WebSocket; |
|
|
|
using MediatR; |
|
|
|
using Microsoft.Extensions.DependencyInjection; |
|
|
|
using Serilog; |
|
|
|
using Serilog.Events; |
|
|
|
|
|
|
|
namespace MediatRSample; |
|
|
|
|
|
|
|
public class Bot |
|
|
|
{ |
|
|
|
private static ServiceProvider ConfigureServices() |
|
|
|
{ |
|
|
|
return new ServiceCollection() |
|
|
|
.AddMediatR(typeof(Bot)) |
|
|
|
.AddSingleton(new DiscordSocketClient(new DiscordSocketConfig |
|
|
|
{ |
|
|
|
AlwaysDownloadUsers = true, |
|
|
|
MessageCacheSize = 100, |
|
|
|
GatewayIntents = GatewayIntents.AllUnprivileged, |
|
|
|
LogLevel = LogSeverity.Info |
|
|
|
})) |
|
|
|
.AddSingleton<DiscordEventListener>() |
|
|
|
.AddSingleton(x => new InteractionService(x.GetRequiredService<DiscordSocketClient>())) |
|
|
|
.BuildServiceProvider(); |
|
|
|
} |
|
|
|
|
|
|
|
public static async Task Main() |
|
|
|
{ |
|
|
|
await new Bot().RunAsync(); |
|
|
|
} |
|
|
|
|
|
|
|
private async Task RunAsync() |
|
|
|
{ |
|
|
|
Log.Logger = new LoggerConfiguration() |
|
|
|
.MinimumLevel.Verbose() |
|
|
|
.Enrich.FromLogContext() |
|
|
|
.WriteTo.Console() |
|
|
|
.CreateLogger(); |
|
|
|
|
|
|
|
await using var services = ConfigureServices(); |
|
|
|
|
|
|
|
var client = services.GetRequiredService<DiscordSocketClient>(); |
|
|
|
client.Log += LogAsync; |
|
|
|
|
|
|
|
var listener = services.GetRequiredService<DiscordEventListener>(); |
|
|
|
await listener.StartAsync(); |
|
|
|
|
|
|
|
await client.LoginAsync(TokenType.Bot, "OTI1ODAxMDI1OTcyMDgwNzMx.YcyZZQ.qDD8EHfF9ZMefjT-qVcwAEpDXvg"); |
|
|
|
await client.StartAsync(); |
|
|
|
|
|
|
|
await Task.Delay(Timeout.Infinite); |
|
|
|
} |
|
|
|
|
|
|
|
private static Task LogAsync(LogMessage message) |
|
|
|
{ |
|
|
|
var severity = message.Severity switch |
|
|
|
{ |
|
|
|
LogSeverity.Critical => LogEventLevel.Fatal, |
|
|
|
LogSeverity.Error => LogEventLevel.Error, |
|
|
|
LogSeverity.Warning => LogEventLevel.Warning, |
|
|
|
LogSeverity.Info => LogEventLevel.Information, |
|
|
|
LogSeverity.Verbose => LogEventLevel.Verbose, |
|
|
|
LogSeverity.Debug => LogEventLevel.Debug, |
|
|
|
_ => LogEventLevel.Information |
|
|
|
}; |
|
|
|
|
|
|
|
Log.Write(severity, message.Exception, "[{Source}] {Message}", message.Source, message.Message); |
|
|
|
|
|
|
|
return Task.CompletedTask; |
|
|
|
} |
|
|
|
} |