public Commands() { IConfigurationRoot configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", false) .Build(); _botType = configuration.GetSection("BotType").Value; _db = new GameBotDbContext(); }
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())); }
public ReactionCommands(GameBotDbContext db) { _db = db; _perudoGameService = new PerudoGameService(_db); }
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(); }
public PerudoGameService(GameBotDbContext db) { _db = db; }
public Commands() { //TODO: Let DI handle instantiation _db = new GameBotDbContext(); _perudoGameService = new PerudoGameService(_db); }
public Commands() { _db = new GameBotDbContext(); _phraseService = new PhraseService(_db); }
public void Setup() { _factory = new GameBotDbContextFactory(); _context = _factory.CreateContext(); _service = new PerudoGameService(_context); }
public GamelogService(GameBotDbContext db) { _db = db; }
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($"========================================"); } }
public EloRatingService(GameBotDbContext db) { _db = db; }
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($"========================================"); }
public KarmaService(SocketCommandContext context, GameBotDbContext db) { _context = context; _db = db; }
public StatsService(GameBotDbContext db) { _db = db; }