fix nullref in chatterbot and mapping issue in protectionservice

This commit is contained in:
Toastie 2025-03-14 16:02:05 +13:00
parent 8fa6b0c999
commit ba1f5afa01
Signed by: toastie_t0ast
GPG key ID: 0861BE54AD481DC7
2 changed files with 82 additions and 74 deletions
src/EllieBot/Modules
Administration/Protection
Games/ChatterBot

View file

@ -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()
{
@ -282,13 +283,15 @@ public class ProtectionService : IReadyExecutor, IEService
Seconds = seconds,
UserThreshold = userThreshold,
PunishDuration = minutesDuration
}, _ => new()
},
_ => new()
{
Action = action,
Seconds = seconds,
UserThreshold = userThreshold,
PunishDuration = minutesDuration
}, () => new()
},
() => new()
{
GuildId = guildId
});
@ -368,14 +371,16 @@ public class ProtectionService : IReadyExecutor, IEService
MessageThreshold = stats.AntiSpamSettings.MessageThreshold,
MuteTime = stats.AntiSpamSettings.MuteTime,
RoleId = stats.AntiSpamSettings.RoleId
}, (old) => new()
},
(old) => new()
{
GuildId = guildId,
Action = stats.AntiSpamSettings.Action,
MessageThreshold = stats.AntiSpamSettings.MessageThreshold,
MuteTime = stats.AntiSpamSettings.MuteTime,
RoleId = stats.AntiSpamSettings.RoleId
}, () => new()
},
() => new()
{
GuildId = guildId
});
@ -465,13 +470,15 @@ public class ProtectionService : IReadyExecutor, IEService
ActionDurationMinutes = actionDurationMinutes,
MinAge = TimeSpan.FromMinutes(minAgeMinutes),
RoleId = roleId
}, _ => new()
},
_ => new()
{
Action = action,
ActionDurationMinutes = actionDurationMinutes,
MinAge = TimeSpan.FromMinutes(minAgeMinutes),
RoleId = roleId
}, () => new()
},
() => new()
{
GuildId = guildId
});
@ -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)

View file

@ -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;
@ -235,12 +235,13 @@ public class ChatterBotService : IExecOnMessage, IReadyExecutor
public async Task OnReadyAsync()
{
await using var uow = _db.GetDbContext();
_chatterBotGuilds = uow.GuildConfigs
_chatterBotGuilds = await uow.GuildConfigs
.AsNoTracking()
.Where(gc => gc.CleverbotEnabled)
.AsEnumerable()
.ToListAsyncLinqToDB()
.Fmap(x => x
.ToDictionary(gc => gc.GuildId,
_ => new Lazy<IChatterBotSession>(() => CreateSession(), true))
.ToConcurrent();
.ToConcurrent());
}
}