using Microsoft.Extensions.DependencyInjection; using NetCord.Gateway; using NetCord.Hosting.Gateway; using StreakBot.Services; namespace StreakBot.Handlers; public class MessageCreateHandler : IMessageCreateGatewayHandler { private readonly IServiceScopeFactory _scopeFactory; public MessageCreateHandler(IServiceScopeFactory scopeFactory) { _scopeFactory = scopeFactory; } public async ValueTask HandleAsync(Message message) { if (message.Author.IsBot) return; using var scope = _scopeFactory.CreateScope(); var streakService = scope.ServiceProvider.GetRequiredService(); if (message.GuildId is null) { // DM message - process for DM streaks await streakService.ProcessDmMessageAsync(message.Author.Id, message.ChannelId); } else { // Server message - process for server streaks await streakService.ProcessMessageAsync(message.Author.Id, message.GuildId.Value); } } }