Example #1
0
        public Commands()
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
                                               .SetBasePath(Directory.GetCurrentDirectory())
                                               .AddJsonFile("appsettings.json", false)
                                               .Build();

            _botType = configuration.GetSection("BotType").Value;

            _db = new GameBotDbContext();
        }
Example #2
0
        public GameBotDbContext CreateContext()
        {
            if (_connection == null)
            {
                _connection = new SqliteConnection("DataSource=:memory:");
                _connection.Open();

                var options = CreateOptions();
                using (var context = new GameBotDbContext(options))
                {
                    context.Database.EnsureCreated();
                }
            }

            return(new GameBotDbContext(CreateOptions()));
        }
Example #3
0
 public ReactionCommands(GameBotDbContext db)
 {
     _db = db;
     _perudoGameService = new PerudoGameService(_db);
 }
Example #4
0
        private static void SeedDatabase()
        {
            var db = new GameBotDbContext();

            db.Database.EnsureCreated();

            var keyPhrases = new List <KeyPhrase>
            {
                new KeyPhrase {
                    Text    = Enums.KeyPhrases.SlowDown,
                    Phrases = new List <Phrase> {
                        new Phrase {
                            Text = "Slow down, buddy."
                        }
                    }
                },
                new KeyPhrase {
                    Text    = Enums.KeyPhrases.ThankYouFromBot,
                    Phrases = new List <Phrase> {
                        new Phrase {
                            Text = "Awe thanks."
                        },
                        new Phrase {
                            Text = ":)"
                        },
                    }
                },
                new KeyPhrase {
                    Text    = Enums.KeyPhrases.GetCurrentKarma,
                    Phrases = new List <Phrase> {
                        new Phrase {
                            Text = "<thing> has <totalkarma> karma"
                        }
                    }
                },
                new KeyPhrase {
                    Text    = Enums.KeyPhrases.KarmaIncreased,
                    Phrases = new List <Phrase> {
                        new Phrase {
                            Text = "<thing>'s karma has increased to <totalkarma>"
                        }
                    }
                },
                new KeyPhrase {
                    Text    = Enums.KeyPhrases.KarmaDecreased,
                    Phrases = new List <Phrase> {
                        new Phrase {
                            Text = "<thing>'s karma has decreased to <totalkarma>"
                        }
                    }
                },
                new KeyPhrase {
                    Text    = Enums.KeyPhrases.HoldUp,
                    Phrases = new List <Phrase> {
                        new Phrase {
                            Text = "Hold up... I see what you did there."
                        }
                    }
                },
                new KeyPhrase {
                    Text    = Enums.KeyPhrases.BotIsHurt,
                    Phrases = new List <Phrase> {
                        new Phrase {
                            Text = "I thought we were friends."
                        }
                    }
                },
                new KeyPhrase {
                    Text    = Enums.KeyPhrases.RightBackAtYou,
                    Phrases = new List <Phrase> {
                        new Phrase {
                            Text = "Right back at you!"
                        }
                    }
                },
                new KeyPhrase {
                    Text    = Enums.KeyPhrases.HeckleCoffeeBot,
                    Phrases = new List <Phrase> {
                        new Phrase {
                            Text = "Hey <coffeebot>, I hope Andrey's paying you!"
                        }
                    }
                },
            };

            foreach (var keyPhrase in keyPhrases)
            {
                if (db.KeyPhrase.SingleOrDefault(x => x.Text == keyPhrase.Text) == null)
                {
                    db.KeyPhrase.Add(keyPhrase);
                }
            }

            db.SaveChanges();
        }
Example #5
0
 public PerudoGameService(GameBotDbContext db)
 {
     _db = db;
 }
Example #6
0
 public Commands()
 {
     //TODO: Let DI handle instantiation
     _db = new GameBotDbContext();
     _perudoGameService = new PerudoGameService(_db);
 }
Example #7
0
 public Commands()
 {
     _db            = new GameBotDbContext();
     _phraseService = new PhraseService(_db);
 }
Example #8
0
 public void Setup()
 {
     _factory = new GameBotDbContextFactory();
     _context = _factory.CreateContext();
     _service = new PerudoGameService(_context);
 }
Example #9
0
 public GamelogService(GameBotDbContext db)
 {
     _db = db;
 }
Example #10
0
        public async Task GenerateEloRatingsForAllGamesAsync(ulong guildId, bool erasePreviousRatings = false)
        {
            // todo: call into GenerateEloRatingsForGameAsync rather than duplicating all the logic
            var db = new GameBotDbContext();

            var gameModes = new List <GameMode> {
                GameMode.Variable, GameMode.SuddenDeath, GameMode.Standard
            };

            foreach (var gameMode in gameModes)
            {
                var games = await db.Games.AsQueryable()
                            .Include(g => g.GamePlayers)
                            .ThenInclude(gp => gp.Player)
                            .ThenInclude(p => p.EloRatings)
                            .Where(g => g.GuildId == guildId)
                            .Where(g => g.IsRanked && g.State == 3)
                            .Where(g => g.Penalty == (int)(object)gameMode)
                            .Where(g => g.GamePlayers.Count() >= 4)
                            .Where(g => !g.GamePlayers.Any(gp => gp.Rank == null))
                            .OrderBy(g => g.Id)
                            .ToListAsync();

                var ratings = new Dictionary <string, int>();

                games.ForEach(game =>
                {
                    Console.WriteLine($"========================================");
                    Console.WriteLine($"Calculating Elo for game {game.Id}");
                    var match = new EloMatch();

                    foreach (var gamePlayer in game.GamePlayers.OrderBy(gp => gp.Rank))
                    {
                        var nickname = gamePlayer.Player.Nickname;
                        if (!ratings.ContainsKey(nickname))
                        {
                            var currentEloRating = gamePlayer.Player.EloRatings
                                                   .FirstOrDefault(er => er.GameMode == gameMode.ToString());

                            if (erasePreviousRatings)
                            {
                                ratings.Add(nickname, 1500);
                            }
                            else
                            {
                                ratings.Add(nickname, currentEloRating?.Rating ?? 1500);
                            }
                        }
                        gamePlayer.PreGameEloRating = ratings[nickname];
                        //Console.WriteLine($"Adding {nickname} with {ratings[nickname]} rating and rank of {gamePlayer.Rank}");
                        match.AddPlayer(nickname, gamePlayer.Rank.Value, ratings[nickname]);
                    }

                    match.CalculateElos();

                    foreach (var gamePlayer in game.GamePlayers.OrderBy(gp => gp.Rank))
                    {
                        var nickname      = gamePlayer.Player.Nickname;
                        ratings[nickname] = match.GetElo(nickname);

                        gamePlayer.PostGameEloRating = ratings[nickname];
                        gamePlayer.EloChange         = match.GetEloChange(nickname);

                        var currentEloRating = gamePlayer.Player.EloRatings
                                               .FirstOrDefault(er => er.GameMode == gameMode.ToString());

                        if (currentEloRating != null)
                        {
                            currentEloRating.Rating = match.GetElo(nickname);
                        }
                        else
                        {
                            gamePlayer.Player.EloRatings.Add(new EloRating
                            {
                                GameMode = gameMode.ToString(),
                                Rating   = match.GetElo(nickname)
                            });
                        }

                        Console.WriteLine($"{nickname} has new rating of {ratings[nickname]} ({match.GetEloChange(nickname)})");
                    }
                });

                var changes = db.SaveChanges();

                Console.WriteLine($"========================================");
                Console.WriteLine($"Final {gameMode} ratings:");

                var i = 1;
                foreach (var rating in ratings.OrderByDescending(x => x.Value))
                {
                    Console.WriteLine($"{i}: {rating.Key}: {rating.Value}");
                    i++;
                }
                Console.WriteLine($"========================================");
            }
        }
Example #11
0
 public EloRatingService(GameBotDbContext db)
 {
     _db = db;
 }
Example #12
0
        public async Task GenerateEloRatingsForGameAsync(int gameId)
        {
            var db = new GameBotDbContext();

            var game = await db.Games.AsQueryable()
                       .Include(g => g.GamePlayers)
                       .ThenInclude(gp => gp.Player)
                       .ThenInclude(p => p.EloRatings)
                       .Where(g => g.IsRanked && g.State == 3)
                       .Where(g => g.GamePlayers.Count() >= 4)
                       .Where(g => !g.GamePlayers.Any(gp => gp.Rank == null))
                       .Where(g => g.Id == gameId)
                       .SingleOrDefaultAsync();

            var ratings  = new Dictionary <string, int>();
            var gameMode = (GameMode)game.Penalty;

            Console.WriteLine($"========================================");
            Console.WriteLine($"Calculating Elo for game {game.Id}");

            var match = new EloMatch();

            foreach (var gamePlayer in game.GamePlayers.OrderBy(gp => gp.Rank))
            {
                var nickname = gamePlayer.Player.Nickname;
                if (!ratings.ContainsKey(nickname))
                {
                    var currentEloRating = gamePlayer.Player.EloRatings
                                           .FirstOrDefault(er => er.GameMode == gameMode.ToString());

                    ratings.Add(nickname, currentEloRating?.Rating ?? 1500);
                }

                gamePlayer.PreGameEloRating = ratings[nickname];
                Console.WriteLine($"Adding {nickname} with {ratings[nickname]} rating and rank of {gamePlayer.Rank}");
                match.AddPlayer(nickname, gamePlayer.Rank.Value, ratings[nickname]);
            }

            match.CalculateElos();

            foreach (var gamePlayer in game.GamePlayers.OrderBy(gp => gp.Rank))
            {
                var nickname = gamePlayer.Player.Nickname;
                ratings[nickname] = match.GetElo(nickname);

                gamePlayer.PostGameEloRating = ratings[nickname];
                gamePlayer.EloChange         = match.GetEloChange(nickname);

                var currentEloRating = gamePlayer.Player.EloRatings
                                       .FirstOrDefault(er => er.GameMode == gameMode.ToString());

                if (currentEloRating != null)
                {
                    currentEloRating.Rating = match.GetElo(nickname);
                }
                else
                {
                    gamePlayer.Player.EloRatings.Add(new EloRating
                    {
                        GameMode = gameMode.ToString(),
                        Rating   = match.GetElo(nickname)
                    });
                }

                Console.WriteLine($"{nickname} has new rating of {ratings[nickname]} ({match.GetEloChange(nickname)})");
            }

            var changes = db.SaveChanges();

            Console.WriteLine($"{changes} changes written");

            Console.WriteLine($"========================================");
        }
Example #13
0
 public KarmaService(SocketCommandContext context, GameBotDbContext db)
 {
     _context = context;
     _db      = db;
 }
Example #14
0
 public StatsService(GameBotDbContext db)
 {
     _db = db;
 }