Ejemplo n.º 1
0
        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.");
        }
Ejemplo n.º 2
0
 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();
     }
 }
Ejemplo n.º 4
0
        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);
                }
            }
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 7
0
        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();
            }
        }
Ejemplo n.º 8
0
 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);
        }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
 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;
 }
Ejemplo n.º 12
0
        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();
        }
Ejemplo n.º 13
0
        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);
            }
        }
Ejemplo n.º 14
0
        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);
            }
        }
Ejemplo n.º 15
0
        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());
        }
Ejemplo n.º 16
0
 public KeyValueService(VbContext context)
 {
     _context = context;
 }
Ejemplo n.º 17
0
        public async Task InitializeAsync()
        {
            using var db = new VbContext();

            _slothyRecords = await db.Slothies.ToListAsync();
        }