You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

Program.cs 2.2 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using Discord;
  2. using Discord.Interactions;
  3. using Discord.WebSocket;
  4. using MediatR;
  5. using Microsoft.Extensions.DependencyInjection;
  6. using Serilog;
  7. using Serilog.Events;
  8. namespace MediatRSample;
  9. public class Bot
  10. {
  11. private static ServiceProvider ConfigureServices()
  12. {
  13. return new ServiceCollection()
  14. .AddMediatR(typeof(Bot))
  15. .AddSingleton(new DiscordSocketClient(new DiscordSocketConfig
  16. {
  17. AlwaysDownloadUsers = true,
  18. MessageCacheSize = 100,
  19. GatewayIntents = GatewayIntents.AllUnprivileged,
  20. LogLevel = LogSeverity.Info
  21. }))
  22. .AddSingleton<DiscordEventListener>()
  23. .AddSingleton(x => new InteractionService(x.GetRequiredService<DiscordSocketClient>()))
  24. .BuildServiceProvider();
  25. }
  26. public static async Task Main()
  27. {
  28. await new Bot().RunAsync();
  29. }
  30. private async Task RunAsync()
  31. {
  32. Log.Logger = new LoggerConfiguration()
  33. .MinimumLevel.Verbose()
  34. .Enrich.FromLogContext()
  35. .WriteTo.Console()
  36. .CreateLogger();
  37. await using var services = ConfigureServices();
  38. var client = services.GetRequiredService<DiscordSocketClient>();
  39. client.Log += LogAsync;
  40. var listener = services.GetRequiredService<DiscordEventListener>();
  41. await listener.StartAsync();
  42. await client.LoginAsync(TokenType.Bot, "YOUR_TOKEN_HERE");
  43. await client.StartAsync();
  44. await Task.Delay(Timeout.Infinite);
  45. }
  46. private static Task LogAsync(LogMessage message)
  47. {
  48. var severity = message.Severity switch
  49. {
  50. LogSeverity.Critical => LogEventLevel.Fatal,
  51. LogSeverity.Error => LogEventLevel.Error,
  52. LogSeverity.Warning => LogEventLevel.Warning,
  53. LogSeverity.Info => LogEventLevel.Information,
  54. LogSeverity.Verbose => LogEventLevel.Verbose,
  55. LogSeverity.Debug => LogEventLevel.Debug,
  56. _ => LogEventLevel.Information
  57. };
  58. Log.Write(severity, message.Exception, "[{Source}] {Message}", message.Source, message.Message);
  59. return Task.CompletedTask;
  60. }
  61. }