diff --git a/src/EllieBot/Modules/Administration/Protection/ProtectionService.cs b/src/EllieBot/Modules/Administration/Protection/ProtectionService.cs index f83ba30..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,10 @@ public class ProtectionService : IReadyExecutor, IEService { await using var uow = _db.GetDbContext(); - var configs = await uow.GetTable<AntiAltSetting>() - .Where(x => Queries.GuildOnShard(x.GuildId, _shardData.TotalShards, _shardData.ShardId)) - .ToListAsyncLinqToDB(); + var configs = await uow.Set<AntiAltSetting>() + .AsNoTracking() + .Where(x => x.GuildId / 4194304 % (ulong)_shardData.TotalShards == (ulong)_shardData.ShardId) + .ToListAsyncEF(); foreach (var config in configs) _antiAltGuilds[config.GuildId] = new(config); @@ -522,8 +530,9 @@ public class ProtectionService : IReadyExecutor, IEService } var spamConfigs = await uow.GetTable<AntiSpamSetting>() + .AsNoTracking() .Where(x => Queries.GuildOnShard(x.GuildId, _shardData.TotalShards, _shardData.ShardId)) - .ToListAsyncLinqToDB(); + .ToListAsyncEF(); foreach (var config in spamConfigs) { diff --git a/src/EllieBot/Modules/Gambling/PlantPick/PlantPickService.cs b/src/EllieBot/Modules/Gambling/PlantPick/PlantPickService.cs index 08e4587..8ade01d 100644 --- a/src/EllieBot/Modules/Gambling/PlantPick/PlantPickService.cs +++ b/src/EllieBot/Modules/Gambling/PlantPick/PlantPickService.cs @@ -25,13 +25,11 @@ public class PlantPickService : IEService, IExecNoCommand, IReadyExecutor private readonly FontProvider _fonts; private readonly ICurrencyService _cs; private readonly CommandHandler _cmdHandler; - private readonly EllieRandom _rng; private readonly DiscordSocketClient _client; private readonly GamblingConfigService _gss; private readonly GamblingService _gs; - private ConcurrentHashSet<ulong> _generationChannels; - private readonly SemaphoreSlim _pickLock = new(1, 1); + private ConcurrentHashSet<ulong> _generationChannels = []; public PlantPickService( DbService db, @@ -50,13 +48,9 @@ public class PlantPickService : IEService, IExecNoCommand, IReadyExecutor _fonts = fonts; _cs = cs; _cmdHandler = cmdHandler; - _rng = new(); _client = client; _gss = gss; _gs = gs; - - using var uow = db.GetDbContext(); - var guildIds = client.Guilds.Select(x => x.Id).ToList(); } public Task ExecOnNoCommandAsync(IGuild guild, IUserMessage msg) @@ -416,7 +410,6 @@ public class PlantPickService : IEService, IExecNoCommand, IReadyExecutor public async Task OnReadyAsync() { - await using var uow = _db.GetDbContext(); _generationChannels = (await uow.GetTable<GCChannelId>() .Select(x => x.ChannelId) 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