diff --git a/KfChatDotNetBot/ChatBot.cs b/KfChatDotNetBot/ChatBot.cs index 0eb2c7c..475468d 100644 --- a/KfChatDotNetBot/ChatBot.cs +++ b/KfChatDotNetBot/ChatBot.cs @@ -39,7 +39,7 @@ public class ChatBot { _logger.Info("Bot starting!"); - var settings = Helpers.GetMultipleValues([ + var settings = SettingsProvider.GetMultipleValuesAsync([ BuiltIn.Keys.KiwiFarmsWsEndpoint, BuiltIn.Keys.KiwiFarmsDomain, BuiltIn.Keys.Proxy, BuiltIn.Keys.KiwiFarmsWsReconnectTimeout]).Result; @@ -86,7 +86,7 @@ public class ChatBot private void OnFailedToJoinRoom(object sender, string message) { - var failureLimit = Helpers.GetValue(BuiltIn.Keys.KiwiFarmsJoinFailLimit).Result.ToType(); + var failureLimit = SettingsProvider.GetValueAsync(BuiltIn.Keys.KiwiFarmsJoinFailLimit).Result.ToType(); _joinFailures++; _logger.Error($"Couldn't join the room, attempt {_joinFailures}. KF returned: {message}"); _logger.Error("This is likely due to the session cookie expiring. Retrieving a new one."); @@ -108,7 +108,7 @@ public class ChatBot private async Task KfPingTask() { - var interval = (await Helpers.GetValue(BuiltIn.Keys.KiwiFarmsPingInterval)).ToType(); + var interval = (await SettingsProvider.GetValueAsync(BuiltIn.Keys.KiwiFarmsPingInterval)).ToType(); using var timer = new PeriodicTimer(TimeSpan.FromSeconds(interval)); while (await timer.WaitForNextTickAsync(_cancellationToken)) { @@ -123,7 +123,7 @@ public class ChatBot } var inactivityTime = DateTime.UtcNow - KfClient.LastPacketReceived; _logger.Debug($"Last KF event was {inactivityTime:g} ago"); - var inactivityTimeout = (await Helpers.GetValue(BuiltIn.Keys.KiwiFarmsInactivityTimeout)).ToType(); + var inactivityTimeout = (await SettingsProvider.GetValueAsync(BuiltIn.Keys.KiwiFarmsInactivityTimeout)).ToType(); if (inactivityTime.TotalSeconds > inactivityTimeout) { // Yeah, super dodgy @@ -145,7 +145,7 @@ public class ChatBot } var settings = - await Helpers.GetMultipleValues([BuiltIn.Keys.KiwiFarmsUsername, BuiltIn.Keys.KiwiFarmsPassword]); + await SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.KiwiFarmsUsername, BuiltIn.Keys.KiwiFarmsPassword]); await _kfTokenService.PerformLogin(settings[BuiltIn.Keys.KiwiFarmsUsername].Value!, settings[BuiltIn.Keys.KiwiFarmsPassword].Value!); _logger.Info("Successfully logged in"); @@ -155,7 +155,7 @@ public class ChatBot { // Reset value to 0 as we've now successfully joined if (_joinFailures > 0) _joinFailures = 0; - var settings = Helpers.GetMultipleValues([BuiltIn.Keys.GambaSeshDetectEnabled, + var settings = SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.GambaSeshDetectEnabled, BuiltIn.Keys.GambaSeshUserId, BuiltIn.Keys.KiwiFarmsUsername, BuiltIn.Keys.BotDisconnectReplayLimit]) .Result; // Send messages if there are any to replay (Assuming we DC'd, and it's now the message flood) @@ -255,8 +255,8 @@ public class ChatBot // https://github.com/jaw-sh/ruforo/blob/master/src/web/chat/connection.rs#L226 public async Task SendChatMessageAsync(string message, bool bypassSeshDetect = false, LengthLimitBehavior lengthLimitBehavior = LengthLimitBehavior.TruncateNicely, int lengthLimit = 1023) { - var settings = await Helpers - .GetMultipleValues([ + var settings = await SettingsProvider + .GetMultipleValuesAsync([ BuiltIn.Keys.KiwiFarmsSuppressChatMessages, BuiltIn.Keys.GambaSeshDetectEnabled ]); var reference = Guid.NewGuid().ToString(); @@ -357,7 +357,7 @@ public class ChatBot private void OnUsersJoined(object sender, List users, UsersJsonModel jsonPayload) { - var settings = Helpers.GetMultipleValues([BuiltIn.Keys.GambaSeshUserId, BuiltIn.Keys.GambaSeshDetectEnabled, BuiltIn.Keys.BotKeesSeen]) + var settings = SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.GambaSeshUserId, BuiltIn.Keys.GambaSeshDetectEnabled, BuiltIn.Keys.BotKeesSeen]) .Result; _logger.Debug($"Received {users.Count} user join events"); using var db = new ApplicationDbContext(); @@ -373,7 +373,7 @@ public class ChatBot { _logger.Info("Kees has joined!"); SendChatMessage($":!: :!: {user.Username} has appeared! :!: :!:", true); - Helpers.SetValueAsBoolean(BuiltIn.Keys.BotKeesSeen, true).Wait(_cancellationToken); + SettingsProvider.SetValueAsBooleanAsync(BuiltIn.Keys.BotKeesSeen, true).Wait(_cancellationToken); } _logger.Info($"{user.Username} joined!"); @@ -402,7 +402,7 @@ public class ChatBot private void OnUsersParted(object sender, List userIds) { - var settings = Helpers.GetMultipleValues([BuiltIn.Keys.GambaSeshUserId, BuiltIn.Keys.GambaSeshDetectEnabled]) + var settings = SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.GambaSeshUserId, BuiltIn.Keys.GambaSeshDetectEnabled]) .Result; if (userIds.Contains(settings[BuiltIn.Keys.GambaSeshUserId].ToType()) && settings[BuiltIn.Keys.GambaSeshDetectEnabled].ToBoolean()) { @@ -453,7 +453,7 @@ public class ChatBot private void OnKfWsReconnected(object sender, ReconnectionInfo reconnectionInfo) { - var roomId = Helpers.GetValue(BuiltIn.Keys.KiwiFarmsRoomId).Result.ToType(); + var roomId = SettingsProvider.GetValueAsync(BuiltIn.Keys.KiwiFarmsRoomId).Result.ToType(); _logger.Error($"Sneedchat reconnected due to {reconnectionInfo.Type}"); _logger.Info("Resetting GambaSesh presence so it can resync if he crashed while the bot was DC'd"); GambaSeshPresent = false; diff --git a/KfChatDotNetBot/Commands/AdminCommands.cs b/KfChatDotNetBot/Commands/AdminCommands.cs index 9c597f3..e28d5cf 100644 --- a/KfChatDotNetBot/Commands/AdminCommands.cs +++ b/KfChatDotNetBot/Commands/AdminCommands.cs @@ -86,7 +86,7 @@ public class NewKickChannelCommand : ICommand public TimeSpan Timeout => TimeSpan.FromSeconds(10); public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { - var channels = (await Helpers.GetValue(BuiltIn.Keys.KickChannels)).JsonDeserialize>(); + var channels = (await SettingsProvider.GetValueAsync(BuiltIn.Keys.KickChannels)).JsonDeserialize>(); var channelId = Convert.ToInt32(arguments["channel_id"].Value); if (channels.Any(channel => channel.ChannelId == channelId)) { @@ -102,7 +102,7 @@ public class NewKickChannelCommand : ICommand ChannelSlug = arguments["slug"].Value }); - await Helpers.SetValueAsJsonObject(BuiltIn.Keys.KickChannels, channels); + await SettingsProvider.SetValueAsJsonObjectAsync(BuiltIn.Keys.KickChannels, channels); await botInstance.SendChatMessageAsync("Updated list of channels", true); } } @@ -118,7 +118,7 @@ public class RemoveKickChannelCommand : ICommand public TimeSpan Timeout => TimeSpan.FromSeconds(10); public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { - var channels = (await Helpers.GetValue(BuiltIn.Keys.KickChannels)).JsonDeserialize>(); + var channels = (await SettingsProvider.GetValueAsync(BuiltIn.Keys.KickChannels)).JsonDeserialize>(); var channelId = Convert.ToInt32(arguments["channel_id"].Value); var channel = channels.FirstOrDefault(ch => ch.ChannelId == channelId); if (channel == null) @@ -128,7 +128,7 @@ public class RemoveKickChannelCommand : ICommand } channels.Remove(channel); - await Helpers.SetValueAsJsonObject(BuiltIn.Keys.KickChannels, channels); + await SettingsProvider.SetValueAsJsonObjectAsync(BuiltIn.Keys.KickChannels, channels); await botInstance.SendChatMessageAsync("Updated list of channels", true); } } @@ -160,7 +160,7 @@ public class AddCourtHearingCommand : ICommand public TimeSpan Timeout => TimeSpan.FromSeconds(10); public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { - var hearings = (await Helpers.GetValue(BuiltIn.Keys.BotCourtCalendar)).JsonDeserialize>(); + var hearings = (await SettingsProvider.GetValueAsync(BuiltIn.Keys.BotCourtCalendar)).JsonDeserialize>(); if (hearings == null) { await botInstance.SendChatMessageAsync("Hearings list was null", true); @@ -174,7 +174,7 @@ public class AddCourtHearingCommand : ICommand } hearings.Add(new CourtHearingModel {CaseNumber = caseNumber, Description = arguments["description"].Value, Time = date}); - await Helpers.SetValueAsJsonObject(BuiltIn.Keys.BotCourtCalendar, hearings); + await SettingsProvider.SetValueAsJsonObjectAsync(BuiltIn.Keys.BotCourtCalendar, hearings); await botInstance.SendChatMessageAsync("Updated list of hearings", true); } } @@ -190,7 +190,7 @@ public class RemoveCourtHearingCommand : ICommand public TimeSpan Timeout => TimeSpan.FromSeconds(10); public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { - var hearings = (await Helpers.GetValue(BuiltIn.Keys.BotCourtCalendar)).JsonDeserialize>(); + var hearings = (await SettingsProvider.GetValueAsync(BuiltIn.Keys.BotCourtCalendar)).JsonDeserialize>(); if (hearings == null) { await botInstance.SendChatMessageAsync("Hearings list was null", true); @@ -205,7 +205,7 @@ public class RemoveCourtHearingCommand : ICommand } hearings.RemoveAt(hearingIndex - 1); - await Helpers.SetValueAsJsonObject(BuiltIn.Keys.BotCourtCalendar, hearings); + await SettingsProvider.SetValueAsJsonObjectAsync(BuiltIn.Keys.BotCourtCalendar, hearings); await botInstance.SendChatMessageAsync("Updated list of hearings", true); } } @@ -340,7 +340,7 @@ public class SetAlmanacTextCommand : ICommand public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { - await Helpers.SetValue(BuiltIn.Keys.BotAlmanacText, arguments["text"].Value); + await SettingsProvider.SetValueAsync(BuiltIn.Keys.BotAlmanacText, arguments["text"].Value); await botInstance.SendChatMessageAsync($"@{message.Author.Username}, updated text for the almanac shill", true); } } @@ -364,7 +364,7 @@ public class SetAlmanacIntervalCommand : ICommand await botInstance.SendChatMessageAsync("Not going to let you use an interval below 300 seconds", true); return; } - await Helpers.SetValue(BuiltIn.Keys.BotAlmanacInterval, arguments["interval"].Value); + await SettingsProvider.SetValueAsync(BuiltIn.Keys.BotAlmanacInterval, arguments["interval"].Value); await botInstance.BotServices.AlmanacShill.StopShillTaskAsync(); botInstance.BotServices.AlmanacShill.StartShillTask(); await botInstance.SendChatMessageAsync($"@{message.Author.Username}, updated interval and restarted the shill task", true); diff --git a/KfChatDotNetBot/Commands/HowlggCommands.cs b/KfChatDotNetBot/Commands/HowlggCommands.cs index 20a19d3..d9bfa7b 100644 --- a/KfChatDotNetBot/Commands/HowlggCommands.cs +++ b/KfChatDotNetBot/Commands/HowlggCommands.cs @@ -19,7 +19,7 @@ public class HowlggStatsCommand : ICommand { var window = Convert.ToInt32(arguments["window"].Value); var start = DateTimeOffset.UtcNow.AddHours(-window); - var division = (await Helpers.GetValue(BuiltIn.Keys.HowlggDivisionAmount)).ToType(); + var division = (await SettingsProvider.GetValueAsync(BuiltIn.Keys.HowlggDivisionAmount)).ToType(); await using var db = new ApplicationDbContext(); // EF SQLite doesn't support filtering on dates :( var bets = (await db.HowlggBets.ToListAsync(ctx)).Where(b => b.Date.UtcDateTime > start).ToList(); @@ -44,7 +44,7 @@ public class HowlggRecentBetCommand : ICommand public TimeSpan Timeout => TimeSpan.FromSeconds(10); public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { - var settings = await Helpers.GetMultipleValues([ + var settings = await SettingsProvider.GetMultipleValuesAsync([ BuiltIn.Keys.KiwiFarmsGreenColor, BuiltIn.Keys.KiwiFarmsRedColor, BuiltIn.Keys.HowlggDivisionAmount ]); var division = settings[BuiltIn.Keys.HowlggDivisionAmount].ToType(); diff --git a/KfChatDotNetBot/Commands/ImageCommands.cs b/KfChatDotNetBot/Commands/ImageCommands.cs index 8623c3c..3fdec73 100644 --- a/KfChatDotNetBot/Commands/ImageCommands.cs +++ b/KfChatDotNetBot/Commands/ImageCommands.cs @@ -25,7 +25,7 @@ public class AddImageCommand : ICommand CancellationToken ctx) { await using var db = new ApplicationDbContext(); - var imageKeys = (await Helpers.GetValue(BuiltIn.Keys.BotImageAcceptableKeys)).JsonDeserialize>(); + var imageKeys = (await SettingsProvider.GetValueAsync(BuiltIn.Keys.BotImageAcceptableKeys)).JsonDeserialize>(); if (imageKeys == null) throw new InvalidOperationException($"{BuiltIn.Keys.BotImageAcceptableKeys} was null"); var key = arguments["key"].Value; var url = arguments["url"].Value; @@ -65,7 +65,7 @@ public class RemoveImageCommand : ICommand CancellationToken ctx) { await using var db = new ApplicationDbContext(); - var imageKeys = (await Helpers.GetValue(BuiltIn.Keys.BotImageAcceptableKeys)).JsonDeserialize>(); + var imageKeys = (await SettingsProvider.GetValueAsync(BuiltIn.Keys.BotImageAcceptableKeys)).JsonDeserialize>(); if (imageKeys == null) throw new InvalidOperationException($"{BuiltIn.Keys.BotImageAcceptableKeys} was null"); var key = arguments["key"].Value; var url = arguments["url"].Value; @@ -103,7 +103,7 @@ public class ListImageCommand : ICommand CancellationToken ctx) { await using var db = new ApplicationDbContext(); - var imageKeys = (await Helpers.GetValue(BuiltIn.Keys.BotImageAcceptableKeys)).JsonDeserialize>(); + var imageKeys = (await SettingsProvider.GetValueAsync(BuiltIn.Keys.BotImageAcceptableKeys)).JsonDeserialize>(); if (imageKeys == null) throw new InvalidOperationException($"{BuiltIn.Keys.BotImageAcceptableKeys} was null"); var key = arguments["key"].Value; if (!imageKeys.Contains(key)) @@ -146,7 +146,7 @@ public class GetRandomImage : ICommand var key = arguments["key"].Value.ToLower(); var images = db.Images.Where(i => i.Key == key); if (!await images.AnyAsync(ctx)) return; - var settings = await Helpers.GetMultipleValues([ + var settings = await SettingsProvider.GetMultipleValuesAsync([ BuiltIn.Keys.BotImageRandomSliceDivideBy, BuiltIn.Keys.BotImagePigCubeSelfDestruct, BuiltIn.Keys.BotImageInvertedCubeUrl, BuiltIn.Keys.BotImagePigCubeSelfDestructMin, BuiltIn.Keys.BotImagePigCubeSelfDestructMax, BuiltIn.Keys.BotImageInvertedPigCubeSelfDestructDelay diff --git a/KfChatDotNetBot/Commands/JuiceCommand.cs b/KfChatDotNetBot/Commands/JuiceCommand.cs index b129a40..8488d4d 100644 --- a/KfChatDotNetBot/Commands/JuiceCommand.cs +++ b/KfChatDotNetBot/Commands/JuiceCommand.cs @@ -22,7 +22,7 @@ public class JuiceCommand : ICommand // Have to attach the entity because it is coming from another DB context // https://stackoverflow.com/questions/52718652/ef-core-sqlite-sqlite-error-19-unique-constraint-failed db.Users.Attach(user); - var juicerSettings = await Helpers.GetMultipleValues([ + var juicerSettings = await SettingsProvider.GetMultipleValuesAsync([ BuiltIn.Keys.JuiceAmount, BuiltIn.Keys.JuiceCooldown, BuiltIn.Keys.JuiceLoserDivision, BuiltIn.Keys.GambaSeshDetectEnabled, BuiltIn.Keys.JuiceAllowedWhileStreaming, BuiltIn.Keys.TwitchBossmanJackUsername, BuiltIn.Keys.JuiceAutoDeleteMsgDelay diff --git a/KfChatDotNetBot/Commands/MemeCommands.cs b/KfChatDotNetBot/Commands/MemeCommands.cs index 42abd4e..999ad69 100644 --- a/KfChatDotNetBot/Commands/MemeCommands.cs +++ b/KfChatDotNetBot/Commands/MemeCommands.cs @@ -49,7 +49,7 @@ public class CrackedCommand : ICommand { var logger = LogManager.GetCurrentClassLogger(); var msg = arguments["msg"].Value.TrimStart('/'); - var settings = await Helpers.GetMultipleValues([ + var settings = await SettingsProvider.GetMultipleValuesAsync([ BuiltIn.Keys.CrackedZalgoFuckUpMode, BuiltIn.Keys.CrackedZalgoFuckUpPosition ]); var zalgo = new ZalgoString(msg, (FuckUpMode)settings[BuiltIn.Keys.CrackedZalgoFuckUpMode].ToType(), @@ -70,7 +70,7 @@ public class CleanCommand : ICommand public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { var settings = - await Helpers.GetMultipleValues([BuiltIn.Keys.BotCleanStartTime, BuiltIn.Keys.TwitchBossmanJackUsername]); + await SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.BotCleanStartTime, BuiltIn.Keys.TwitchBossmanJackUsername]); var start = settings[BuiltIn.Keys.BotCleanStartTime]; if (start.Value == null) { @@ -93,7 +93,7 @@ public class RehabCommand : ICommand public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { var settings = - await Helpers.GetMultipleValues([BuiltIn.Keys.BotRehabEndTime, BuiltIn.Keys.TwitchBossmanJackUsername]); + await SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.BotRehabEndTime, BuiltIn.Keys.TwitchBossmanJackUsername]); var end = settings[BuiltIn.Keys.BotRehabEndTime]; if (end.Value == null) { @@ -123,7 +123,7 @@ public class NextPoVisitCommand : ICommand public TimeSpan Timeout => TimeSpan.FromSeconds(120); public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { - var time = await Helpers.GetValue(BuiltIn.Keys.BotPoNextVisit); + var time = await SettingsProvider.GetValueAsync(BuiltIn.Keys.BotPoNextVisit); if (time.Value == null) { await botInstance.SendChatMessageAsync("There is no next PO visit :(", true); @@ -162,7 +162,7 @@ public class NextCourtHearingCommand : ICommand public TimeSpan Timeout => TimeSpan.FromSeconds(120); public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { - var hearings = (await Helpers.GetValue(BuiltIn.Keys.BotCourtCalendar)).JsonDeserialize>(); + var hearings = (await SettingsProvider.GetValueAsync(BuiltIn.Keys.BotCourtCalendar)).JsonDeserialize>(); if (hearings == null) { await botInstance.SendChatMessageAsync("Caught a null when grabbing hearings", true); @@ -217,7 +217,7 @@ public class JailCommand : ICommand public TimeSpan Timeout => TimeSpan.FromSeconds(10); public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { - var settings = await Helpers.GetMultipleValues([BuiltIn.Keys.BotJailStartTime, BuiltIn.Keys.TwitchBossmanJackUsername]); + var settings = await SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.BotJailStartTime, BuiltIn.Keys.TwitchBossmanJackUsername]); var start = settings[BuiltIn.Keys.BotJailStartTime]; if (start.Value == null) { @@ -248,7 +248,7 @@ public class LastStreamCommand : ICommand var timespan = DateTimeOffset.UtcNow - latest.Time; var agt = TimeZoneInfo.ConvertTime(latest.Time, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")); // The table doesn't contain the name of the person so we'll just have to assume it's his Twitch username - var username = await Helpers.GetValue(BuiltIn.Keys.TwitchBossmanJackUsername); + var username = await SettingsProvider.GetValueAsync(BuiltIn.Keys.TwitchBossmanJackUsername); await botInstance.SendChatMessageAsync($"{username.Value} last streamed on Twitch approximately {timespan.Humanize(precision: 2, minUnit: TimeUnit.Minute, maxUnit: TimeUnit.Hour)} ago at {agt:dddd h:mm tt} AGT", true); } } @@ -263,7 +263,7 @@ public class AlmanacCommand : ICommand public TimeSpan Timeout => TimeSpan.FromSeconds(10); public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { - var text = await Helpers.GetValue(BuiltIn.Keys.BotAlmanacText); + var text = await SettingsProvider.GetValueAsync(BuiltIn.Keys.BotAlmanacText); if (message.MessageRaw.Contains("almanac plain")) { await botInstance.SendChatMessageAsync($"@{user.KfUsername}, [plain]{text.Value}", true); diff --git a/KfChatDotNetBot/Commands/RainbetCommands.cs b/KfChatDotNetBot/Commands/RainbetCommands.cs index 4e9d8b5..7ab8d80 100644 --- a/KfChatDotNetBot/Commands/RainbetCommands.cs +++ b/KfChatDotNetBot/Commands/RainbetCommands.cs @@ -43,7 +43,7 @@ public class RainbetRecentBetCommand : ICommand public TimeSpan Timeout => TimeSpan.FromSeconds(10); public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { - var settings = await Helpers.GetMultipleValues([ + var settings = await SettingsProvider.GetMultipleValuesAsync([ BuiltIn.Keys.KiwiFarmsGreenColor, BuiltIn.Keys.KiwiFarmsRedColor, BuiltIn.Keys.HowlggDivisionAmount ]); await using var db = new ApplicationDbContext(); diff --git a/KfChatDotNetBot/Commands/RestreamCommands.cs b/KfChatDotNetBot/Commands/RestreamCommands.cs index c18095d..a5354be 100644 --- a/KfChatDotNetBot/Commands/RestreamCommands.cs +++ b/KfChatDotNetBot/Commands/RestreamCommands.cs @@ -19,7 +19,7 @@ public class GetRestreamCommand : ICommand public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { - var url = await Helpers.GetValue(BuiltIn.Keys.RestreamUrl); + var url = await SettingsProvider.GetValueAsync(BuiltIn.Keys.RestreamUrl); await botInstance.SendChatMessageAsync($"@{message.Author.Username}, restream URL: {url.Value}", true); } } @@ -37,7 +37,7 @@ public class SetRestreamCommand : ICommand public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { - await Helpers.SetValue(BuiltIn.Keys.RestreamUrl, arguments["url"].Value); + await SettingsProvider.SetValueAsync(BuiltIn.Keys.RestreamUrl, arguments["url"].Value); await botInstance.SendChatMessageAsync($"@{message.Author.Username}, updated URL", true); } } @@ -55,7 +55,7 @@ public class SetShillRestreamCommand : ICommand public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { - await Helpers.SetValue(BuiltIn.Keys.TwitchCommercialRestreamShillMessage, arguments["url"].Value); + await SettingsProvider.SetValueAsync(BuiltIn.Keys.TwitchCommercialRestreamShillMessage, arguments["url"].Value); await botInstance.SendChatMessageAsync($"@{message.Author.Username}, updated URL for the commercial break restream shill", true); } } @@ -73,7 +73,7 @@ public class SelfPromoCommand : ICommand public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { - var channels = Helpers.GetValue(BuiltIn.Keys.KickChannels).Result.JsonDeserialize>(); + var channels = SettingsProvider.GetValueAsync(BuiltIn.Keys.KickChannels).Result.JsonDeserialize>(); var channel = channels.FirstOrDefault(ch => ch.ForumId == user.KfId); if (channel == null) { @@ -98,7 +98,7 @@ public class GetRestreamPlainCommand : ICommand public async Task RunCommand(ChatBot botInstance, MessageModel message, UserDbModel user, GroupCollection arguments, CancellationToken ctx) { - var url = await Helpers.GetValue(BuiltIn.Keys.RestreamUrl); + var url = await SettingsProvider.GetValueAsync(BuiltIn.Keys.RestreamUrl); await botInstance.SendChatMessageAsync($"@{message.Author.Username}, restream URL: [plain]{url.Value}", true); } } \ No newline at end of file diff --git a/KfChatDotNetBot/Services/AlmanacShill.cs b/KfChatDotNetBot/Services/AlmanacShill.cs index 0dbf4fc..55c6dab 100644 --- a/KfChatDotNetBot/Services/AlmanacShill.cs +++ b/KfChatDotNetBot/Services/AlmanacShill.cs @@ -11,12 +11,12 @@ public class AlmanacShill(ChatBot kfChatBot) : IDisposable private async Task AlmanacShillTask() { - var interval = await Helpers.GetValue(BuiltIn.Keys.BotAlmanacInterval); + var interval = await SettingsProvider.GetValueAsync(BuiltIn.Keys.BotAlmanacInterval); using var timer = new PeriodicTimer(TimeSpan.FromSeconds(Convert.ToInt32(interval.Value))); while (await timer.WaitForNextTickAsync(_almanacShillCts.Token)) { _logger.Info("Time to shill the almanac in chat"); - var text = await Helpers.GetValue(BuiltIn.Keys.BotAlmanacText); + var text = await SettingsProvider.GetValueAsync(BuiltIn.Keys.BotAlmanacText); await kfChatBot.SendChatMessageAsync($":!: {text.Value}", true); } } diff --git a/KfChatDotNetBot/Services/BotServices.cs b/KfChatDotNetBot/Services/BotServices.cs index 37d43b9..206d4b0 100644 --- a/KfChatDotNetBot/Services/BotServices.cs +++ b/KfChatDotNetBot/Services/BotServices.cs @@ -51,7 +51,7 @@ public class BotServices _chatBot = botInstance; _cancellationToken = ctx; TemporarilyBypassGambaSeshForDiscord = - Helpers.GetValue(BuiltIn.Keys.DiscordTemporarilyBypassGambaSeshInitialValue).Result.ToBoolean(); + SettingsProvider.GetValueAsync(BuiltIn.Keys.DiscordTemporarilyBypassGambaSeshInitialValue).Result.ToBoolean(); _logger.Info("Bot services ready to initialize!"); } @@ -98,14 +98,14 @@ public class BotServices private async Task BuildShuffle() { _logger.Debug("Building Shuffle"); - _shuffle = new Shuffle((await Helpers.GetValue(BuiltIn.Keys.Proxy)).Value, _cancellationToken); + _shuffle = new Shuffle((await SettingsProvider.GetValueAsync(BuiltIn.Keys.Proxy)).Value, _cancellationToken); _shuffle.OnLatestBetUpdated += ShuffleOnLatestBetUpdated; await _shuffle.StartWsClient(); } private async Task BuildDiscord() { - var settings = await Helpers.GetMultipleValues([BuiltIn.Keys.DiscordToken, BuiltIn.Keys.Proxy]); + var settings = await SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.DiscordToken, BuiltIn.Keys.Proxy]); _logger.Debug("Building Discord"); if (settings[BuiltIn.Keys.DiscordToken].Value == null) { @@ -131,7 +131,7 @@ public class BotServices private async Task BuildChipsgg() { - var settings = await Helpers.GetMultipleValues([BuiltIn.Keys.Proxy, BuiltIn.Keys.ChipsggEnabled]); + var settings = await SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.Proxy, BuiltIn.Keys.ChipsggEnabled]); if (!settings[BuiltIn.Keys.ChipsggEnabled].ToBoolean()) { _logger.Debug("Chips.gg is disabled"); @@ -145,7 +145,7 @@ public class BotServices private async Task BuildJackpot() { - var proxy = (await Helpers.GetValue(BuiltIn.Keys.Proxy)).Value; + var proxy = (await SettingsProvider.GetValueAsync(BuiltIn.Keys.Proxy)).Value; _jackpot = new Jackpot(proxy, _cancellationToken); _jackpot.OnJackpotBet += OnJackpotBet; await _jackpot.StartWsClient(); @@ -154,7 +154,7 @@ public class BotServices private async Task BuildBetBolt() { - var settings = await Helpers.GetMultipleValues([BuiltIn.Keys.Proxy, BuiltIn.Keys.BetBoltEnabled]); + var settings = await SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.Proxy, BuiltIn.Keys.BetBoltEnabled]); if (!settings[BuiltIn.Keys.BetBoltEnabled].ToBoolean()) { _logger.Debug("BetBolt is disabled"); @@ -168,7 +168,7 @@ public class BotServices private async Task BuildClashgg() { - var settings = await Helpers.GetMultipleValues([BuiltIn.Keys.Proxy, BuiltIn.Keys.ClashggEnabled]); + var settings = await SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.Proxy, BuiltIn.Keys.ClashggEnabled]); if (!settings[BuiltIn.Keys.ClashggEnabled].ToBoolean()) { _logger.Debug("Clash.gg is disabled"); @@ -182,7 +182,7 @@ public class BotServices private async Task BuildTwitch() { - var settings = await Helpers.GetMultipleValues([BuiltIn.Keys.TwitchBossmanJackId, BuiltIn.Keys.Proxy]); + var settings = await SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.TwitchBossmanJackId, BuiltIn.Keys.Proxy]); if (settings[BuiltIn.Keys.TwitchBossmanJackId].Value == null) { _twitchDisabled = true; @@ -199,7 +199,7 @@ public class BotServices private async Task BuildHowlgg() { - var settings = await Helpers.GetMultipleValues([BuiltIn.Keys.Proxy, BuiltIn.Keys.HowlggEnabled]); + var settings = await SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.Proxy, BuiltIn.Keys.HowlggEnabled]); if (!settings[BuiltIn.Keys.HowlggEnabled].ToBoolean()) { _logger.Debug("Howlgg is disabled"); @@ -213,9 +213,9 @@ public class BotServices private async Task BuildKick() { - var settings = await Helpers.GetMultipleValues([ - BuiltIn.Keys.PusherEndpoint, BuiltIn.Keys.Proxy, BuiltIn.Keys.PusherReconnectTimeout, BuiltIn.Keys.KickEnabled, - BuiltIn.Keys.PusherChannels, BuiltIn.Keys.KickChannels + var settings = await SettingsProvider.GetMultipleValuesAsync([ + BuiltIn.Keys.PusherEndpoint, BuiltIn.Keys.Proxy, BuiltIn.Keys.PusherReconnectTimeout, + BuiltIn.Keys.KickEnabled, BuiltIn.Keys.KickChannels ]); KickClient = new KickWsClient.KickWsClient(settings[BuiltIn.Keys.PusherEndpoint].Value!, settings[BuiltIn.Keys.Proxy].Value, settings[BuiltIn.Keys.PusherReconnectTimeout].ToType()); @@ -229,11 +229,6 @@ public class BotServices if (settings[BuiltIn.Keys.KickEnabled].ToBoolean()) { await KickClient.StartWsClient(); - // var pusherChannels = settings[BuiltIn.Keys.PusherChannels].ToList(); - // foreach (var channel in pusherChannels) - // { - // _kickClient.SendPusherSubscribe(channel); - // } var kickChannels = settings[BuiltIn.Keys.KickChannels].JsonDeserialize>(); if (kickChannels == null) return; foreach (var channel in kickChannels) @@ -245,7 +240,7 @@ public class BotServices private async Task BuildTwitchChat() { - var settings = await Helpers.GetMultipleValues([BuiltIn.Keys.TwitchBossmanJackUsername, BuiltIn.Keys.Proxy]); + var settings = await SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.TwitchBossmanJackUsername, BuiltIn.Keys.Proxy]); _logger.Debug("Building Twitch Chat"); if (settings[BuiltIn.Keys.TwitchBossmanJackUsername].Value == null) { @@ -263,7 +258,7 @@ public class BotServices private async Task BuildAlmanacShill() { AlmanacShill = new AlmanacShill(_chatBot); - var initialState = await Helpers.GetValue(BuiltIn.Keys.BotAlmanacInitialState); + var initialState = await SettingsProvider.GetValueAsync(BuiltIn.Keys.BotAlmanacInitialState); if (!initialState.ToBoolean()) { _logger.Info("Built the almanac service but not enabling as initial state is false"); @@ -279,7 +274,7 @@ public class BotServices while (await timer.WaitForNextTickAsync(_cancellationToken)) { if (_chatBot.InitialStartCooldown) continue; - var settings = await Helpers.GetMultipleValues([ + var settings = await SettingsProvider.GetMultipleValuesAsync([ BuiltIn.Keys.KickEnabled, BuiltIn.Keys.HowlggEnabled, BuiltIn.Keys.ChipsggEnabled, BuiltIn.Keys.ClashggEnabled, BuiltIn.Keys.BetBoltEnabled ]); @@ -379,15 +374,15 @@ public class BotServices while (await timer.WaitForNextTickAsync(_cancellationToken)) { if (_howlgg == null || !_howlgg.IsConnected()) continue; - var bmjUserId = await Helpers.GetValue(BuiltIn.Keys.HowlggBmjUserId); + var bmjUserId = await SettingsProvider.GetValueAsync(BuiltIn.Keys.HowlggBmjUserId); _howlgg.GetUserInfo(bmjUserId.Value!); } } private void OnRainbetBet(object sender, List bets) { - var settings = Helpers - .GetMultipleValues([ + var settings = SettingsProvider + .GetMultipleValuesAsync([ BuiltIn.Keys.RainbetBmjPublicIds, BuiltIn.Keys.TwitchBossmanJackUsername, BuiltIn.Keys.KiwiFarmsGreenColor, BuiltIn.Keys.KiwiFarmsRedColor ]).Result; @@ -448,8 +443,8 @@ public class BotServices private void OnJackpotBet(object sender, JackpotWsBetPayloadModel bet) { - var settings = Helpers - .GetMultipleValues([ + var settings = SettingsProvider + .GetMultipleValuesAsync([ BuiltIn.Keys.JackpotBmjUsernames, BuiltIn.Keys.TwitchBossmanJackUsername, BuiltIn.Keys.KiwiFarmsGreenColor, BuiltIn.Keys.KiwiFarmsRedColor ]).Result; @@ -470,8 +465,8 @@ public class BotServices private void OnClashggBet(object sender, ClashggBetModel bet, JsonElement jsonElement) { - var settings = Helpers - .GetMultipleValues([ + var settings = SettingsProvider + .GetMultipleValuesAsync([ BuiltIn.Keys.ClashggBmjIds, BuiltIn.Keys.TwitchBossmanJackUsername, BuiltIn.Keys.KiwiFarmsGreenColor, BuiltIn.Keys.KiwiFarmsRedColor ]).Result; @@ -506,8 +501,8 @@ public class BotServices private void OnBetBoltBet(object sender, BetBoltBetModel bet) { - var settings = Helpers - .GetMultipleValues([ + var settings = SettingsProvider + .GetMultipleValuesAsync([ BuiltIn.Keys.BetBoltBmjUsernames, BuiltIn.Keys.TwitchBossmanJackUsername, BuiltIn.Keys.KiwiFarmsGreenColor, BuiltIn.Keys.KiwiFarmsRedColor ]).Result; @@ -565,7 +560,7 @@ public class BotServices _logger.Info($"Received channel deletion event of type {channel.Type} with name {channel.Name}"); if (channel.Type != DiscordChannelType.GuildText && channel.Type != DiscordChannelType.GuildVoice && channel.Type != DiscordChannelType.GuildStageVoice) return; - var discordIcon = Helpers.GetValue(BuiltIn.Keys.DiscordIcon).Result; + var discordIcon = SettingsProvider.GetValueAsync(BuiltIn.Keys.DiscordIcon).Result; var channelName = channel.Name ?? "Unknown name"; _chatBot.SendChatMessage($"[img]{discordIcon.Value}[/img] Discord {channel.Type.Humanize()} channel '{channelName}' was deleted 🚨🚨", true); } @@ -575,7 +570,7 @@ public class BotServices _logger.Info($"Received channel creation event of type {channel.Type} with name {channel.Name}"); if (channel.Type != DiscordChannelType.GuildText && channel.Type != DiscordChannelType.GuildVoice && channel.Type != DiscordChannelType.GuildStageVoice) return; - var discordIcon = Helpers.GetValue(BuiltIn.Keys.DiscordIcon).Result; + var discordIcon = SettingsProvider.GetValueAsync(BuiltIn.Keys.DiscordIcon).Result; var channelName = channel.Name ?? "Unknown name"; _chatBot.SendChatMessage($"[img]{discordIcon.Value}[/img] New Discord {channel.Type.Humanize()} channel created: {channelName} 🚨🚨", true); } @@ -587,13 +582,13 @@ public class BotServices return; } // Not caching this value as it won't harm it to have to look this up in even the worst spergout sesh - var twitchIcon = Helpers.GetValue(BuiltIn.Keys.TwitchIcon).Result.Value; + var twitchIcon = SettingsProvider.GetValueAsync(BuiltIn.Keys.TwitchIcon).Result.Value; _chatBot.SendChatMessage($"[img]{twitchIcon}[/img] {nick}: {message.TrimEnd('\r')}", true); } private void DiscordOnPresenceUpdated(object sender, DiscordPresenceUpdateModel presence) { - var settings = Helpers.GetMultipleValues([BuiltIn.Keys.DiscordBmjId, BuiltIn.Keys.DiscordIcon]).Result; + var settings = SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.DiscordBmjId, BuiltIn.Keys.DiscordIcon]).Result; if (presence.User.Id != settings[BuiltIn.Keys.DiscordBmjId].Value) { return; @@ -610,7 +605,7 @@ public class BotServices private void DiscordOnMessageReceived(object sender, DiscordMessageModel message) { - var settings = Helpers.GetMultipleValues([BuiltIn.Keys.DiscordBmjId, BuiltIn.Keys.DiscordIcon]).Result; + var settings = SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.DiscordBmjId, BuiltIn.Keys.DiscordIcon]).Result; if (message.Author.Id != settings[BuiltIn.Keys.DiscordBmjId].Value) { return; @@ -646,8 +641,8 @@ public class BotServices private void ShuffleOnLatestBetUpdated(object sender, ShuffleLatestBetModel bet) { - var settings = Helpers - .GetMultipleValues([ + var settings = SettingsProvider + .GetMultipleValuesAsync([ BuiltIn.Keys.ShuffleBmjUsername, BuiltIn.Keys.TwitchBossmanJackUsername, BuiltIn.Keys.KiwiFarmsGreenColor, BuiltIn.Keys.KiwiFarmsRedColor ]).Result; @@ -668,7 +663,7 @@ public class BotServices private void OnTwitchStreamStateUpdated(object sender, int channelId, bool isLive) { _logger.Info($"BossmanJack stream event came in. isLive => {isLive}"); - var settings = Helpers.GetMultipleValues([BuiltIn.Keys.RestreamUrl, BuiltIn.Keys.TwitchBossmanJackUsername, BuiltIn.Keys.BotToyStoryImage]).Result; + var settings = SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.RestreamUrl, BuiltIn.Keys.TwitchBossmanJackUsername, BuiltIn.Keys.BotToyStoryImage]).Result; if (isLive) { @@ -687,8 +682,8 @@ public class BotServices private void OnTwitchStreamCommercial(object sender, int channelId, int length, bool scheduled) { - var settings = Helpers - .GetMultipleValues([BuiltIn.Keys.TwitchShillRestreamOnCommercial, BuiltIn.Keys.TwitchCommercialRestreamShillMessage, BuiltIn.Keys.TwitchBossmanJackUsername]).Result; + var settings = SettingsProvider + .GetMultipleValuesAsync([BuiltIn.Keys.TwitchShillRestreamOnCommercial, BuiltIn.Keys.TwitchCommercialRestreamShillMessage, BuiltIn.Keys.TwitchBossmanJackUsername]).Result; if (!settings[BuiltIn.Keys.TwitchShillRestreamOnCommercial].ToBoolean()) { _logger.Debug("Not shilling as it's disabled"); @@ -703,19 +698,19 @@ public class BotServices private void OnTwitchStreamTosStrike(object sender, int channelId) { - var username = Helpers.GetValue(BuiltIn.Keys.TwitchBossmanJackUsername).Result; + var username = SettingsProvider.GetValueAsync(BuiltIn.Keys.TwitchBossmanJackUsername).Result; _chatBot.SendChatMessage($":!::!: {username.Value} was just banned from Twitch! :!::!:", true); } private void OnChipsggRecentBet(object sender, ChipsggBetModel bet) { - var settings = Helpers - .GetMultipleValues([ + var settings = SettingsProvider + .GetMultipleValuesAsync([ BuiltIn.Keys.ChipsggBmjUserIds, BuiltIn.Keys.TwitchBossmanJackUsername, BuiltIn.Keys.KiwiFarmsGreenColor, BuiltIn.Keys.KiwiFarmsRedColor ]).Result; _logger.Trace("Chips.gg bet has arrived"); - if (!settings[BuiltIn.Keys.ChipsggBmjUserIds].ToList().Contains(bet.UserId)) + if (!settings[BuiltIn.Keys.ChipsggBmjUserIds].JsonDeserialize>()!.Contains(bet.UserId)) { return; } @@ -742,7 +737,7 @@ public class BotServices private void OnPusherWsReconnected(object sender, ReconnectionInfo reconnectionInfo) { _logger.Error($"Pusher reconnected due to {reconnectionInfo.Type}"); - var kickChannels = Helpers.GetValue(BuiltIn.Keys.KickChannels).Result.JsonDeserialize>(); + var kickChannels = SettingsProvider.GetValueAsync(BuiltIn.Keys.KickChannels).Result.JsonDeserialize>(); if (kickChannels == null) return; foreach (var channel in kickChannels) { @@ -761,7 +756,7 @@ public class BotServices _logger.Debug($"BB Code Translation: {e.Content.TranslateKickEmotes()}"); if (e.Sender.Slug != "bossmanjack") return; - var kickIcon = Helpers.GetValue(BuiltIn.Keys.KickIcon).Result; + var kickIcon = SettingsProvider.GetValueAsync(BuiltIn.Keys.KickIcon).Result; _logger.Debug("Message from BossmanJack"); _chatBot.SendChatMessage($"[img]{kickIcon.Value}[/img] BossmanJack: {e.Content.TranslateKickEmotes()}"); @@ -770,7 +765,7 @@ public class BotServices private void OnStreamerIsLive(object sender, KickModels.StreamerIsLiveEventModel? e) { if (e == null) return; - var settings = Helpers.GetMultipleValues([BuiltIn.Keys.KickChannels, BuiltIn.Keys.BotChrisDjLiveImage]).Result; + var settings = SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.KickChannels, BuiltIn.Keys.BotChrisDjLiveImage]).Result; var channels = settings[BuiltIn.Keys.KickChannels].JsonDeserialize>(); if (channels == null) { @@ -806,7 +801,7 @@ public class BotServices private void OnStopStreamBroadcast(object sender, KickModels.StopStreamBroadcastEventModel? e) { if (e == null) return; - var channels = Helpers.GetValue(BuiltIn.Keys.KickChannels).Result.JsonDeserialize>(); + var channels = SettingsProvider.GetValueAsync(BuiltIn.Keys.KickChannels).Result.JsonDeserialize>(); if (channels == null) { _logger.Error("Caught null when grabbing Kick channels"); diff --git a/KfChatDotNetBot/Services/KfTokenService.cs b/KfChatDotNetBot/Services/KfTokenService.cs index a8fb8c6..0070bde 100644 --- a/KfChatDotNetBot/Services/KfTokenService.cs +++ b/KfChatDotNetBot/Services/KfTokenService.cs @@ -21,7 +21,7 @@ public class KfTokenService _kiwiFlare = new KiwiFlare(kfDomain, proxy, cancellationToken); _proxy = proxy; _kfDomain = kfDomain; - var cachedCookies = Helpers.GetValue(BuiltIn.Keys.KiwiFarmsCookies).Result + var cachedCookies = SettingsProvider.GetValueAsync(BuiltIn.Keys.KiwiFarmsCookies).Result .JsonDeserialize>(); // This shouldn't happen as the setting's default value is {}, but I'm just doing it to shut the IDE up if (cachedCookies == null) return; @@ -161,7 +161,7 @@ public class KfTokenService { _logger.Debug("Saving cookies"); var cookiesToSave = _cookies.GetAllCookies().ToDictionary(cookie => cookie.Name, cookie => cookie.Value); - await Helpers.SetValueAsJsonObject(BuiltIn.Keys.KiwiFarmsCookies, cookiesToSave); + await SettingsProvider.SetValueAsJsonObjectAsync(BuiltIn.Keys.KiwiFarmsCookies, cookiesToSave); } public void WipeCookies() diff --git a/KfChatDotNetBot/Services/Rainbet.cs b/KfChatDotNetBot/Services/Rainbet.cs index 6eb7e75..1f8269e 100644 --- a/KfChatDotNetBot/Services/Rainbet.cs +++ b/KfChatDotNetBot/Services/Rainbet.cs @@ -36,7 +36,7 @@ public class Rainbet : IDisposable using var timer = new PeriodicTimer(_gameHistoryInterval); while (await timer.WaitForNextTickAsync(_gameHistoryCts.Token)) { - var enabled = await Helpers.GetValue(BuiltIn.Keys.RainbetEnabled); + var enabled = await SettingsProvider.GetValueAsync(BuiltIn.Keys.RainbetEnabled); if (!enabled.ToBoolean()) { _logger.Debug("Rainbet is disabled"); @@ -60,7 +60,7 @@ public class Rainbet : IDisposable private async Task RefreshCookies() { var settings = - await Helpers.GetMultipleValues([BuiltIn.Keys.FlareSolverrApiUrl, BuiltIn.Keys.FlareSolverrProxy]); + await SettingsProvider.GetMultipleValuesAsync([BuiltIn.Keys.FlareSolverrApiUrl, BuiltIn.Keys.FlareSolverrProxy]); var flareSolverrUrl = settings[BuiltIn.Keys.FlareSolverrApiUrl]; var flareSolverrProxy = settings[BuiltIn.Keys.FlareSolverrProxy]; var handler = new ClearanceHandler(flareSolverrUrl.Value) @@ -95,7 +95,7 @@ public class Rainbet : IDisposable _logger.Info("Retrieving cookies for Rainbet as they have not been retrieved yet"); await RefreshCookies(); } - var flareSolverrProxy = await Helpers.GetValue(BuiltIn.Keys.FlareSolverrProxy); + var flareSolverrProxy = await SettingsProvider.GetValueAsync(BuiltIn.Keys.FlareSolverrProxy); var gameHistoryUrl = "https://services.rainbet.com/v1/game-history"; var jsonBody = new Dictionary { {"take", take} }; var postData = JsonContent.Create(jsonBody); diff --git a/KfChatDotNetBot/Settings/BuiltIn.cs b/KfChatDotNetBot/Settings/BuiltIn.cs index 8be676c..5a1c29a 100644 --- a/KfChatDotNetBot/Settings/BuiltIn.cs +++ b/KfChatDotNetBot/Settings/BuiltIn.cs @@ -69,33 +69,47 @@ public static class BuiltIn return; } - await Helpers.SetValue(Keys.PusherEndpoint, oldConfig.PusherEndpoint.ToString()); - await Helpers.SetValue(Keys.KiwiFarmsWsEndpoint, oldConfig.KfWsEndpoint.ToString()); - await Helpers.SetValueAsList(Keys.PusherChannels, oldConfig.PusherChannels); - await Helpers.SetValue(Keys.KiwiFarmsRoomId, oldConfig.KfChatRoomId); - await Helpers.SetValue(Keys.Proxy, oldConfig.Proxy); - await Helpers.SetValue(Keys.KiwiFarmsWsReconnectTimeout, oldConfig.KfReconnectTimeout); - await Helpers.SetValue(Keys.PusherReconnectTimeout, oldConfig.PusherReconnectTimeout); - await Helpers.SetValueAsBoolean(Keys.GambaSeshDetectEnabled, oldConfig.EnableGambaSeshDetect); - await Helpers.SetValue(Keys.GambaSeshUserId, oldConfig.GambaSeshUserId); - await Helpers.SetValue(Keys.KickIcon, oldConfig.KickIcon); - await Helpers.SetValue(Keys.KiwiFarmsDomain, oldConfig.KfDomain); - await Helpers.SetValue(Keys.KiwiFarmsUsername, oldConfig.KfUsername); - await Helpers.SetValue(Keys.KiwiFarmsPassword, oldConfig.KfPassword); - await Helpers.SetValue(Keys.TwitchBossmanJackId, oldConfig.BossmanJackTwitchId); - await Helpers.SetValue(Keys.TwitchBossmanJackUsername, oldConfig.BossmanJackTwitchUsername); - await Helpers.SetValueAsBoolean(Keys.KiwiFarmsSuppressChatMessages, oldConfig.SuppressChatMessages); - await Helpers.SetValue(Keys.DiscordToken, oldConfig.DiscordToken); - await Helpers.SetValue(Keys.DiscordBmjId, oldConfig.DiscordBmjId); + await SettingsProvider.SetValueAsync(Keys.PusherEndpoint, oldConfig.PusherEndpoint.ToString()); + await SettingsProvider.SetValueAsync(Keys.KiwiFarmsWsEndpoint, oldConfig.KfWsEndpoint.ToString()); + await SettingsProvider.SetValueAsync(Keys.KiwiFarmsRoomId, oldConfig.KfChatRoomId); + await SettingsProvider.SetValueAsync(Keys.Proxy, oldConfig.Proxy); + await SettingsProvider.SetValueAsync(Keys.KiwiFarmsWsReconnectTimeout, oldConfig.KfReconnectTimeout); + await SettingsProvider.SetValueAsync(Keys.PusherReconnectTimeout, oldConfig.PusherReconnectTimeout); + await SettingsProvider.SetValueAsBooleanAsync(Keys.GambaSeshDetectEnabled, oldConfig.EnableGambaSeshDetect); + await SettingsProvider.SetValueAsync(Keys.GambaSeshUserId, oldConfig.GambaSeshUserId); + await SettingsProvider.SetValueAsync(Keys.KickIcon, oldConfig.KickIcon); + await SettingsProvider.SetValueAsync(Keys.KiwiFarmsDomain, oldConfig.KfDomain); + await SettingsProvider.SetValueAsync(Keys.KiwiFarmsUsername, oldConfig.KfUsername); + await SettingsProvider.SetValueAsync(Keys.KiwiFarmsPassword, oldConfig.KfPassword); + await SettingsProvider.SetValueAsync(Keys.TwitchBossmanJackId, oldConfig.BossmanJackTwitchId); + await SettingsProvider.SetValueAsync(Keys.TwitchBossmanJackUsername, oldConfig.BossmanJackTwitchUsername); + await SettingsProvider.SetValueAsBooleanAsync(Keys.KiwiFarmsSuppressChatMessages, oldConfig.SuppressChatMessages); + await SettingsProvider.SetValueAsync(Keys.DiscordToken, oldConfig.DiscordToken); + await SettingsProvider.SetValueAsync(Keys.DiscordBmjId, oldConfig.DiscordBmjId); logger.Info($"{oldConfigPath} migration done."); logger.Info("Renaming files no longer in use"); // Utils.SafelyRenameFile will attempt to rename and swallow any exception (with logging) if it fails - Utils.SafelyRenameFile(oldConfigPath, $"{oldConfigPath}.migrated"); + SafelyRenameFile(oldConfigPath, $"{oldConfigPath}.migrated"); logger.Info("File renamed"); } + private static void SafelyRenameFile(string oldName, string newName) + { + var logger = LogManager.GetCurrentClassLogger(); + logger.Debug($"Renaming {oldName} to {newName}"); + try + { + File.Move(oldName, newName); + } + catch (Exception e) + { + logger.Error($"Failed to rename {oldName} to {newName}"); + logger.Error(e); + } + } + public static List BuiltInSettings = [ new BuiltInSettingsModel @@ -121,17 +135,6 @@ public static class BuiltIn ValueType = SettingValueType.Text }, new BuiltInSettingsModel - { - Key = Keys.PusherChannels, - Regex = @".+", - Description = - "List of Pusher channels to subscribe to", - Default = null, - IsSecret = false, - CacheDuration = TimeSpan.FromHours(1), - ValueType = SettingValueType.Array - }, - new BuiltInSettingsModel { Key = Keys.KiwiFarmsRoomId, Regex = @"\d+", @@ -861,7 +864,6 @@ public static class BuiltIn { public static string PusherEndpoint = "Pusher.Endpoint"; public static string KiwiFarmsWsEndpoint = "KiwiFarms.WsEndpoint"; - public static string PusherChannels = "Pusher.Channels"; public static string KiwiFarmsRoomId = "KiwiFarms.RoomId"; public static string Proxy = "Proxy"; public static string KiwiFarmsWsReconnectTimeout = "KiwiFarms.WsReconnectTimeout"; diff --git a/KfChatDotNetBot/Settings/Setting.cs b/KfChatDotNetBot/Settings/Setting.cs new file mode 100644 index 0000000..ad0a5d5 --- /dev/null +++ b/KfChatDotNetBot/Settings/Setting.cs @@ -0,0 +1,31 @@ +using System.Text.Json; +using KfChatDotNetBot.Models.DbModels; + +namespace KfChatDotNetBot.Settings; + +public class Setting(string? value, SettingDbModel dbEntry, bool cached) +{ + public string? Value { get; set; } = value; + public SettingDbModel DbEntry { get; set; } = dbEntry; + public bool Cached { get; set; } = cached; + + public T? JsonDeserialize() + { + if (Value == null) + { + return default; + } + + return JsonSerializer.Deserialize(Value) ?? default(T); + } + + public bool ToBoolean() + { + return Value is not (null or "null") && Value.Equals("true", StringComparison.CurrentCultureIgnoreCase); + } + + public T ToType() + { + return (T)Convert.ChangeType(Value, typeof(T))!; + } +} \ No newline at end of file diff --git a/KfChatDotNetBot/Settings/SettingValue.cs b/KfChatDotNetBot/Settings/SettingValue.cs deleted file mode 100644 index badfd72..0000000 --- a/KfChatDotNetBot/Settings/SettingValue.cs +++ /dev/null @@ -1,10 +0,0 @@ -using KfChatDotNetBot.Models.DbModels; - -namespace KfChatDotNetBot.Settings; - -public class SettingValue(string? value, SettingDbModel dbEntry, bool cached) -{ - public string? Value { get; set; } = value; - public SettingDbModel DbEntry { get; set; } = dbEntry; - public bool Cached { get; set; } = cached; -} \ No newline at end of file diff --git a/KfChatDotNetBot/Settings/Helpers.cs b/KfChatDotNetBot/Settings/SettingsProvider.cs similarity index 72% rename from KfChatDotNetBot/Settings/Helpers.cs rename to KfChatDotNetBot/Settings/SettingsProvider.cs index 90eb4af..c756985 100644 --- a/KfChatDotNetBot/Settings/Helpers.cs +++ b/KfChatDotNetBot/Settings/SettingsProvider.cs @@ -6,9 +6,9 @@ using NLog; namespace KfChatDotNetBot.Settings; -public static class Helpers +public static class SettingsProvider { - public static async Task GetValue(string key, bool caseInsensitive = false, bool bypassCache = false) + public static async Task GetValueAsync(string key, bool caseInsensitive = false, bool bypassCache = false) { var logger = LogManager.GetCurrentClassLogger(); var cache = MemoryCache.Default; @@ -17,7 +17,7 @@ public static class Helpers var cachedSetting = cache.Get(key) as SettingDbModel; var value = cachedSetting.Value; if (cachedSetting.Value == "null") value = null; - return new SettingValue(value, cachedSetting, true); + return new Setting(value, cachedSetting, true); } await using var db = new ApplicationDbContext(); logger.Trace($"Retrieving value for {key}"); @@ -45,7 +45,7 @@ public static class Helpers if (setting.Value == "null") { logger.Debug($"{key}'s value is null so returning SettingValue(null)"); - return new SettingValue(null, setting, false); + return new Setting(null, setting, false); } if (setting.IsSecret) @@ -58,24 +58,24 @@ public static class Helpers logger.Info($"Cache Miss! Returning '{setting.Value}' for {key}"); } - return new SettingValue(setting.Value, setting, false); + return new Setting(setting.Value, setting, false); } - public static async Task> GetMultipleValues(string[] keys, bool caseInsensitive = false, bool bypassCache = false) + public static async Task> GetMultipleValuesAsync(string[] keys, bool caseInsensitive = false, bool bypassCache = false) { var logger = LogManager.GetCurrentClassLogger(); logger.Trace($"Getting values for keys {string.Join(", ", keys)}"); - Dictionary values = new Dictionary(); + var values = new Dictionary(); foreach (var key in keys) { - values.Add(key, await GetValue(key, caseInsensitive, bypassCache)); + values.Add(key, await GetValueAsync(key, caseInsensitive, bypassCache)); } return values; } - public static async Task SetValue(string key, object? value) + public static async Task SetValueAsync(string key, object? value) { var logger = LogManager.GetCurrentClassLogger(); await using var db = new ApplicationDbContext(); @@ -107,28 +107,7 @@ public static class Helpers if (cache.Contains(key)) cache.Remove(key); } - public static async Task SetValueAsList(string key, List values, char separator = ',') - { - var logger = LogManager.GetCurrentClassLogger(); - await using var db = new ApplicationDbContext(); - List stringValues = values.Select(val => (string)Convert.ChangeType(val, TypeCode.String)).ToList(); - string joinedValue = string.Join(separator, stringValues); - logger.Debug($"Setting {key} to {joinedValue}"); - - var setting = await db.Settings.FirstOrDefaultAsync(s => s.Key == key); - if (setting == null) - { - logger.Debug($"{key} does not exist, throwing KeyNotFoundException()"); - throw new KeyNotFoundException(); - } - - setting.Value = joinedValue; - await db.SaveChangesAsync(); - var cache = MemoryCache.Default; - if (cache.Contains(key)) cache.Remove(key); - } - - public static async Task SetValueAsJsonObject(string key, T data) + public static async Task SetValueAsJsonObjectAsync(string key, T data) { var logger = LogManager.GetCurrentClassLogger(); await using var db = new ApplicationDbContext(); @@ -150,7 +129,7 @@ public static class Helpers if (cache.Contains(key)) cache.Remove(key); } - public static async Task SetValueAsBoolean(string key, bool value) + public static async Task SetValueAsBooleanAsync(string key, bool value) { var logger = LogManager.GetCurrentClassLogger(); await using var db = new ApplicationDbContext(); diff --git a/KfChatDotNetBot/Settings/Utils.cs b/KfChatDotNetBot/Settings/Utils.cs deleted file mode 100644 index f32cdce..0000000 --- a/KfChatDotNetBot/Settings/Utils.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System.Text.Json; -using NLog; - -namespace KfChatDotNetBot.Settings; - -public static class Utils -{ - public static List ToList(this SettingValue settingValue, char separator = ',') - { - if (settingValue.Value == null) return new List(); - return settingValue.Value.Split(separator).ToList(); - } - - public static T? JsonDeserialize(this SettingValue settingValue) - { - if (settingValue.Value == null) - { - return default; - } - - return JsonSerializer.Deserialize(settingValue.Value) ?? default(T); - } - - public static bool ToBoolean(this SettingValue settingValue) - { - var logger = LogManager.GetCurrentClassLogger(); - if (settingValue.Value is null or "null") - { - return default; - } - - return settingValue.Value.Equals("true", StringComparison.CurrentCultureIgnoreCase); - } - - public static T ValueToType(string value) - { - return (T)Convert.ChangeType(value, typeof(T)); - } - - public static T ToType(this SettingValue settingValue) - { - return (T)Convert.ChangeType(settingValue.Value, typeof(T)); - } - - public static void SafelyRenameFile(string oldName, string newName) - { - var logger = LogManager.GetCurrentClassLogger(); - logger.Debug($"Renaming {oldName} to {newName}"); - try - { - File.Move(oldName, newName); - } - catch (Exception e) - { - logger.Error($"Failed to rename {oldName} to {newName}"); - logger.Error(e); - } - } -} \ No newline at end of file