diff --git a/src/EllieBot/Db/Extensions/GuildConfigExtensions.cs b/src/EllieBot/Db/Extensions/GuildConfigExtensions.cs index 7d16127..842fe4e 100644 --- a/src/EllieBot/Db/Extensions/GuildConfigExtensions.cs +++ b/src/EllieBot/Db/Extensions/GuildConfigExtensions.cs @@ -182,16 +182,6 @@ public static class GuildConfigExtensions .SelectMany(gc => gc.FollowedStreams) .ToList(); - public static void SetCleverbotEnabled(this DbSet configs, ulong id, bool cleverbotEnabled) - { - var conf = configs.FirstOrDefault(gc => gc.GuildId == id); - - if (conf is null) - return; - - conf.CleverbotEnabled = cleverbotEnabled; - } - public static XpSettings XpSettingsFor(this DbContext ctx, ulong guildId) { var gc = ctx.GuildConfigsForId(guildId, diff --git a/src/EllieBot/Modules/Games/ChatterBot/ChatterBotCommands.cs b/src/EllieBot/Modules/Games/ChatterBot/ChatterBotCommands.cs index 371c958..7f7f2cb 100644 --- a/src/EllieBot/Modules/Games/ChatterBot/ChatterBotCommands.cs +++ b/src/EllieBot/Modules/Games/ChatterBot/ChatterBotCommands.cs @@ -18,31 +18,18 @@ public partial class Games [Cmd] [RequireContext(ContextType.Guild)] [UserPerm(GuildPerm.ManageMessages)] - [NoPublicBot] public async Task CleverBot() { var channel = (ITextChannel)ctx.Channel; - if (_service.ChatterBotGuilds.TryRemove(channel.Guild.Id, out _)) - { - await using (var uow = _db.GetDbContext()) - { - uow.Set().SetCleverbotEnabled(ctx.Guild.Id, false); - await uow.SaveChangesAsync(); - } + var newState = await _service.ToggleChatterBotAsync(ctx.Guild.Id); + if (!newState) + { await Response().Confirm(strs.chatbot_disabled).SendAsync(); return; } - _service.ChatterBotGuilds.TryAdd(channel.Guild.Id, new(() => _service.CreateSession(), true)); - - await using (var uow = _db.GetDbContext()) - { - uow.Set().SetCleverbotEnabled(ctx.Guild.Id, true); - await uow.SaveChangesAsync(); - } - await Response().Confirm(strs.chatbot_enabled).SendAsync(); } } diff --git a/src/EllieBot/Modules/Games/ChatterBot/ChatterbotService.cs b/src/EllieBot/Modules/Games/ChatterBot/ChatterbotService.cs index 66decdc..e088319 100644 --- a/src/EllieBot/Modules/Games/ChatterBot/ChatterbotService.cs +++ b/src/EllieBot/Modules/Games/ChatterBot/ChatterbotService.cs @@ -1,5 +1,8 @@ #nullable disable +using LinqToDB; +using LinqToDB.EntityFrameworkCore; using EllieBot.Common.ModuleBehaviors; +using EllieBot.Db.Models; using EllieBot.Modules.Games.Common; using EllieBot.Modules.Games.Common.ChatterBot; using EllieBot.Modules.Patronage; @@ -9,7 +12,7 @@ namespace EllieBot.Modules.Games.Services; public class ChatterBotService : IExecOnMessage { - public ConcurrentDictionary> ChatterBotGuilds { get; } + private ConcurrentDictionary> ChatterBotGuilds { get; } public int Priority => 1; @@ -20,6 +23,7 @@ public class ChatterBotService : IExecOnMessage private readonly IHttpClientFactory _httpFactory; private readonly GamesConfigService _gcs; private readonly IMessageSenderService _sender; + private readonly DbService _db; public readonly IPatronageService _ps; public ChatterBotService( @@ -30,12 +34,14 @@ public class ChatterBotService : IExecOnMessage IHttpClientFactory factory, IBotCredentials creds, GamesConfigService gcs, - IMessageSenderService sender) + IMessageSenderService sender, + DbService db) { _client = client; _perms = perms; _creds = creds; _sender = sender; + _db = db; _httpFactory = factory; _perms = perms; _gcs = gcs; @@ -196,4 +202,38 @@ public class ChatterBotService : IExecOnMessage return false; } + + public async Task ToggleChatterBotAsync(ulong guildId) + { + if (ChatterBotGuilds.TryRemove(guildId, out _)) + { + await using var uow = _db.GetDbContext(); + await uow.Set() + .ToLinqToDBTable() + .Where(x => x.GuildId == guildId) + .UpdateAsync((gc) => new GuildConfig() + { + CleverbotEnabled = false + }); + await uow.SaveChangesAsync(); + return false; + } + + ChatterBotGuilds.TryAdd(guildId, new(() => CreateSession(), true)); + + await using (var uow = _db.GetDbContext()) + { + await uow.Set() + .ToLinqToDBTable() + .Where(x => x.GuildId == guildId) + .UpdateAsync((gc) => new GuildConfig() + { + CleverbotEnabled = true + }); + + await uow.SaveChangesAsync(); + } + + return true; + } } \ No newline at end of file diff --git a/src/EllieBot/data/strings/commands/commands.en-US.yml b/src/EllieBot/data/strings/commands/commands.en-US.yml index 2ce37fb..7ad0299 100644 --- a/src/EllieBot/data/strings/commands/commands.en-US.yml +++ b/src/EllieBot/data/strings/commands/commands.en-US.yml @@ -1361,10 +1361,10 @@ flip: desc: "The number of times the coin is flipped." betflip: desc: |- - Bet to guess will the result be heads or tails. - Guessing awards you 1.95x the currency you've bet (rounded up). + Bet on the coin flip. + The result can be heads or tails. + Guessing correctly rewards you with 1.95x of the currency you've bet (rounded up). Multiplier can be changed by the bot owner. - ex: - 5 heads - 3 t