diff --git a/src/EllieBot/Modules/Administration/Protection/ProtectionService.cs b/src/EllieBot/Modules/Administration/Protection/ProtectionService.cs index ef83a63..2773ec7 100644 --- a/src/EllieBot/Modules/Administration/Protection/ProtectionService.cs +++ b/src/EllieBot/Modules/Administration/Protection/ProtectionService.cs @@ -27,6 +27,7 @@ public class ProtectionService : IReadyExecutor, IEService private readonly UserPunishService _punishService; private readonly INotifySubscriber _notifySub; private readonly ShardData _shardData; + private readonly Channel<PunishQueueItem> _punishUserQueue = Channel.CreateUnbounded<PunishQueueItem>(new() { @@ -275,23 +276,25 @@ public class ProtectionService : IReadyExecutor, IEService await using var uow = _db.GetDbContext(); await uow.GetTable<AntiRaidSetting>() - .InsertOrUpdateAsync(() => new() - { - GuildId = guildId, - Action = action, - Seconds = seconds, - UserThreshold = userThreshold, - PunishDuration = minutesDuration - }, _ => new() - { - Action = action, - Seconds = seconds, - UserThreshold = userThreshold, - PunishDuration = minutesDuration - }, () => new() - { - GuildId = guildId - }); + .InsertOrUpdateAsync(() => new() + { + GuildId = guildId, + Action = action, + Seconds = seconds, + UserThreshold = userThreshold, + PunishDuration = minutesDuration + }, + _ => new() + { + Action = action, + Seconds = seconds, + UserThreshold = userThreshold, + PunishDuration = minutesDuration + }, + () => new() + { + GuildId = guildId + }); return stats; @@ -362,23 +365,25 @@ public class ProtectionService : IReadyExecutor, IEService await using var uow = _db.GetDbContext(); await uow.GetTable<AntiSpamSetting>() .InsertOrUpdateAsync(() => new() - { - GuildId = guildId, - Action = stats.AntiSpamSettings.Action, - MessageThreshold = stats.AntiSpamSettings.MessageThreshold, - MuteTime = stats.AntiSpamSettings.MuteTime, - RoleId = stats.AntiSpamSettings.RoleId - }, (old) => new() - { - GuildId = guildId, - Action = stats.AntiSpamSettings.Action, - MessageThreshold = stats.AntiSpamSettings.MessageThreshold, - MuteTime = stats.AntiSpamSettings.MuteTime, - RoleId = stats.AntiSpamSettings.RoleId - }, () => new() - { - GuildId = guildId - }); + { + GuildId = guildId, + Action = stats.AntiSpamSettings.Action, + MessageThreshold = stats.AntiSpamSettings.MessageThreshold, + MuteTime = stats.AntiSpamSettings.MuteTime, + RoleId = stats.AntiSpamSettings.RoleId + }, + (old) => new() + { + GuildId = guildId, + Action = stats.AntiSpamSettings.Action, + MessageThreshold = stats.AntiSpamSettings.MessageThreshold, + MuteTime = stats.AntiSpamSettings.MuteTime, + RoleId = stats.AntiSpamSettings.RoleId + }, + () => new() + { + GuildId = guildId + }); return stats; } @@ -459,22 +464,24 @@ public class ProtectionService : IReadyExecutor, IEService await uow.GetTable<AntiAltSetting>() .InsertOrUpdateAsync(() => new() - { - GuildId = guildId, - Action = action, - ActionDurationMinutes = actionDurationMinutes, - MinAge = TimeSpan.FromMinutes(minAgeMinutes), - RoleId = roleId - }, _ => new() - { - Action = action, - ActionDurationMinutes = actionDurationMinutes, - MinAge = TimeSpan.FromMinutes(minAgeMinutes), - RoleId = roleId - }, () => new() - { - GuildId = guildId - }); + { + GuildId = guildId, + Action = action, + ActionDurationMinutes = actionDurationMinutes, + MinAge = TimeSpan.FromMinutes(minAgeMinutes), + RoleId = roleId + }, + _ => new() + { + Action = action, + ActionDurationMinutes = actionDurationMinutes, + MinAge = TimeSpan.FromMinutes(minAgeMinutes), + RoleId = roleId + }, + () => new() + { + GuildId = guildId + }); _antiAltGuilds[guildId] = new(new() { @@ -502,9 +509,9 @@ public class ProtectionService : IReadyExecutor, IEService { await using var uow = _db.GetDbContext(); - var configs = await uow.GetTable<AntiAltSetting>() + var configs = await uow.Set<AntiAltSetting>() .AsNoTracking() - .Where(x => Queries.GuildOnShard(x.GuildId, _shardData.TotalShards, _shardData.ShardId)) + .Where(x => x.GuildId / 4194304 % (ulong)_shardData.TotalShards == (ulong)_shardData.ShardId) .ToListAsyncEF(); foreach (var config in configs) diff --git a/src/EllieBot/Modules/Games/ChatterBot/ChatterBotService.cs b/src/EllieBot/Modules/Games/ChatterBot/ChatterBotService.cs index 4c444a8..e37046c 100644 --- a/src/EllieBot/Modules/Games/ChatterBot/ChatterBotService.cs +++ b/src/EllieBot/Modules/Games/ChatterBot/ChatterBotService.cs @@ -13,7 +13,7 @@ namespace EllieBot.Modules.Games.Services; public class ChatterBotService : IExecOnMessage, IReadyExecutor { - private ConcurrentDictionary<ulong, Lazy<IChatterBotSession>> _chatterBotGuilds; + private ConcurrentDictionary<ulong, Lazy<IChatterBotSession>> _chatterBotGuilds = []; public int Priority => 1; @@ -165,8 +165,8 @@ public class ChatterBotService : IExecOnMessage, IReadyExecutor (inTokens) + (result.TokensOut / 2 * 3)); await _sender.Response(channel) - .Confirm(result.Text) - .SendAsync(); + .Confirm(result.Text) + .SendAsync(); } else { @@ -204,12 +204,12 @@ public class ChatterBotService : IExecOnMessage, IReadyExecutor { await using var uow = _db.GetDbContext(); await uow.Set<GuildConfig>() - .ToLinqToDBTable() - .Where(x => x.GuildId == guildId) - .UpdateAsync((gc) => new GuildConfig() - { - CleverbotEnabled = false - }); + .ToLinqToDBTable() + .Where(x => x.GuildId == guildId) + .UpdateAsync((gc) => new GuildConfig() + { + CleverbotEnabled = false + }); await uow.SaveChangesAsync(); return false; } @@ -219,12 +219,12 @@ public class ChatterBotService : IExecOnMessage, IReadyExecutor await using (var uow = _db.GetDbContext()) { await uow.Set<GuildConfig>() - .ToLinqToDBTable() - .Where(x => x.GuildId == guildId) - .UpdateAsync((gc) => new GuildConfig() - { - CleverbotEnabled = true - }); + .ToLinqToDBTable() + .Where(x => x.GuildId == guildId) + .UpdateAsync((gc) => new GuildConfig() + { + CleverbotEnabled = true + }); await uow.SaveChangesAsync(); } @@ -235,12 +235,13 @@ public class ChatterBotService : IExecOnMessage, IReadyExecutor public async Task OnReadyAsync() { await using var uow = _db.GetDbContext(); - _chatterBotGuilds = uow.GuildConfigs - .AsNoTracking() - .Where(gc => gc.CleverbotEnabled) - .AsEnumerable() - .ToDictionary(gc => gc.GuildId, - _ => new Lazy<IChatterBotSession>(() => CreateSession(), true)) - .ToConcurrent(); + _chatterBotGuilds = await uow.GuildConfigs + .AsNoTracking() + .Where(gc => gc.CleverbotEnabled) + .ToListAsyncLinqToDB() + .Fmap(x => x + .ToDictionary(gc => gc.GuildId, + _ => new Lazy<IChatterBotSession>(() => CreateSession(), true)) + .ToConcurrent()); } } \ No newline at end of file