private async Task AddQuoteAsync(OnChatCommandReceivedArgs e) { if (e.Command.ArgumentsAsString.Length > 280) { _client.SendMessage(e, $"@{e.Command.ChatMessage.Username}: Quote is too long, not added."); return; } var quoteRecord = new T { Quote = e.Command.ArgumentsAsString.Trim('"'), AddedBy = e.Command.ChatMessage.Username, AddedAt = DateTime.UtcNow }; _quotes.Add(quoteRecord); using (var db = new VbContext()) { db.Set <T>().Add(quoteRecord); await db.SaveChangesAsync(); } _client.SendMessage(e, $"@{e.Command.ChatMessage.Username}: {_name} quote added."); }
public async Task InitializeAsync() { using var db = new VbContext(); _quotes = await db.Set <T>() .OrderBy(x => x.Id) .ToListAsync(); }
public async Task InitializeAsync() { using (var db = new VbContext()) { _streamers = await db.MultiStreamers.ToListAsync(); } }
private void InitializeCache(KeyValueService kvSvc, VbContext vbContext, IMemoryCache cache) { var winKv = kvSvc.GetByKeyAsync(CacheKeys.FitzyWins).GetAwaiter().GetResult(); var lossKv = kvSvc.GetByKeyAsync(CacheKeys.FitzyLosses).GetAwaiter().GetResult(); var drawKv = kvSvc.GetByKeyAsync(CacheKeys.FitzyDraws).GetAwaiter().GetResult(); int.TryParse(winKv?.Value ?? "0", out var winCount); int.TryParse(lossKv?.Value ?? "0", out var lossCount); int.TryParse(drawKv?.Value ?? "0", out var drawCount); cache.Set(CacheKeys.FitzyWins, winCount, CacheHelpers.EntryOptions); cache.Set(CacheKeys.FitzyLosses, lossCount, CacheHelpers.EntryOptions); cache.Set(CacheKeys.FitzyDraws, drawCount, CacheHelpers.EntryOptions); var crendorPointsKv = kvSvc.GetByKeyAsync(CacheKeys.CrendorSubPoints).GetAwaiter().GetResult(); int.TryParse(crendorPointsKv?.Value ?? "-1", out var crendorPoints); cache.Set(CacheKeys.CrendorSubPoints, crendorPoints, CacheHelpers.EntryOptions); foreach (var notification in vbContext.TwitchWebhookNotifications.ToListAsync().GetAwaiter().GetResult()) { var expiresAt = notification.ReceivedAt + TimeSpan.FromDays(3); if (DateTimeOffset.UtcNow < expiresAt) { cache.Set(notification.Id, "", expiresAt); } } }
public static async Task <KeyValue> GetByKeyAsync(string key) { using var db = new VbContext(); // returning a ValueTask without awaiting it in this function causes an Npgsql exception, // so it's done this way even though it's less optimal return(await db.KeyValues.FindAsync(key)); }
private async Task ClearMultitwitchAsync(OnChatCommandReceivedArgs e) { using (var db = new VbContext()) { db.MultiStreamers.RemoveRange(_streamers); await db.SaveChangesAsync(); } _streamers.Clear(); GetMultitwitch(e); }
public static async Task DeleteByKeyAsync(string key) { using var db = new VbContext(); var kv = await db.KeyValues.FindAsync(key); if (kv != null) { db.KeyValues.Remove(kv); await db.SaveChangesAsync(); } }
public async Task InitializeAsync() { try { using var db = new VbContext(); _betRecords = await db.SlothyBetRecords.ToListAsync(); } catch (Exception ex) { Utils.LogToConsole($"Error getting all slothy bet records from DB: {ex.Message}"); } }
private async Task UpdateMultitwitchAsync(OnChatCommandReceivedArgs e) { var streamers = e.Command.ArgumentsAsList .Select(s => s.ToLower()) .Select(s => s.TrimStart('@')) .Distinct() .ToList(); var crendorRemoved = streamers.Remove("crendor"); if (streamers.Count == 0) { var msg = "You didn't specify any users, you nerd."; if (crendorRemoved) { msg += " Crendor is automatically added, so he doesn't count."; } _client.SendMessage(e, msg); return; } var validUsernames = await _api.Helix.Users.GetUsersAsync(logins : streamers); if (validUsernames.Users.Length != streamers.Count) { _client.SendMessage(e, $"At least one of those isn't a valid user, you nerd."); return; } using (var db = new VbContext()) { db.MultiStreamers.RemoveRange(_streamers); await db.SaveChangesAsync(); } _streamers.Clear(); foreach (var s in streamers) { _streamers.Add(new MultiStreamer(s)); } using (var db = new VbContext()) { db.MultiStreamers.AddRange(_streamers); await db.SaveChangesAsync(); } GetMultitwitch(e); }
public async Task <decimal> AddSlothiesAsync(string userId, decimal count) { var isNew = false; var record = _slothyRecords.Find(x => x.UserId == userId); if (record != null) { try { record.Count += count; } catch (OverflowException) { if (count > 0) { record.Count = decimal.MaxValue; } else { record.Count = decimal.MinValue; } } } else { isNew = true; record = new SlothyRecord { UserId = userId, Count = count + 10 }; _slothyRecords.Add(record); } using (var db = new VbContext()) { if (isNew) { db.Slothies.Add(record); } else { db.Slothies.Update(record); } await db.SaveChangesAsync(); } return(record.Count); }
public TwitchWebhooksController( TwitchWebSocketManager wsMgr, TwitchActionsWebSocketManager fitzyWsMgr, IOptions <TwitchConfig> twitchOptions, VbContext context, IMemoryCache cache, ILogger <TwitchWebhooksController> logger) { _wsMgr = wsMgr; _fitzyWsMgr = fitzyWsMgr; _twitchConfig = twitchOptions.Value; _context = context; _cache = cache; _logger = logger; }
public static async Task CreateOrUpdateAsync(string key, string value) { using var db = new VbContext(); var kv = await db.KeyValues.FindAsync(key); if (kv == null) { db.KeyValues.Add(new KeyValue(key, value)); } else { kv.Value = value; } await db.SaveChangesAsync(); }
public async Task <bool> ClearBetsAsync() { _betRecords.Clear(); try { using var db = new VbContext(); db.SlothyBetRecords.RemoveRange(db.SlothyBetRecords); await db.SaveChangesAsync(); return(true); } catch (Exception ex) { Utils.LogToConsole($"Error truncating slothy bets: {ex.Message}"); return(false); } }
public async Task <bool> AddOrUpdateBetAsync(SlothyBetRecord record) { var update = false; var existing = _betRecords.Find(x => x.UserId == record.UserId); if (existing != null) { _betRecords.Remove(existing); update = true; } _betRecords.Add(record); try { using var db = new VbContext(); if (!update) { db.SlothyBetRecords.Add(record); } else { db.SlothyBetRecords.Update(record); } await db.SaveChangesAsync(); return(true); } catch (Exception ex) { Utils.LogToConsole($"Error saving slothy bet record to DB: {ex.Message}"); return(false); } }
public void Configure(IApplicationBuilder app, IMemoryCache cache, KeyValueService kvSvc, VbContext vbContext) { InitializeCache(kvSvc, vbContext, cache); app.UseForwardedHeaders(); app.UseSecurityHeaders(new HeaderPolicyCollection() .AddDefaultSecurityHeaders() .RemoveServerHeader()); app.UseCors(builder => builder .AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMethod()); app.UseWebSockets(new WebSocketOptions { KeepAliveInterval = TimeSpan.FromSeconds(20) }); app.UseMiddleware <FitzyWebSocketMiddleware>(); app.UseMiddleware <TwitchActionsWebSocketMiddleware>(); app.UseMiddleware <TwitchWebSocketMiddleware>(); app.UseMiddleware <CrendorWebSocketMiddleware>(); app.UseRouting(); app.UseEndpoints(endpoints => endpoints.MapControllers()); }
public KeyValueService(VbContext context) { _context = context; }
public async Task InitializeAsync() { using var db = new VbContext(); _slothyRecords = await db.Slothies.ToListAsync(); }