public MagicService(SlackService slackService, TrueSkillService trueSkillService, MagicContext context, ILogger <MagicService> logger) { this.slackService = slackService; this.trueSkillService = trueSkillService; this.context = context; this.logger = logger; }
private void handlePlayers(Command command, String channel) { StringBuilder sb = new StringBuilder(); // List players if nothing else is supplied with the players command if (command.Parameters.Count == 0) { var players = context.Players.ToList(); sb.Append("*List of players:*\n"); foreach (var player in players) { sb.Append($"> {player.Name}\n"); } slackService.SendMessage(sb.ToString(), channel); return; } // Add player(s) else if (command.Parameters[0].ToLower().Equals("add")) { command.Parameters.Remove(command.Parameters.FirstOrDefault(x => x.ToLower().Equals("add"))); if (command.Parameters.Count == 0) { slackService.SendMessage("I need one or more people to add.", channel); } else { var defaultRating = TrueSkillService.GetDefaultRating(); sb.Append($"*Adding players:*\n"); foreach (var playerName in command.Parameters) { if (context.Players.Where(x => x.Name.ToLower().Equals(playerName.ToLower())).FirstOrDefault() == null) { Player player = new Player() { Name = playerName }; context.Players.Add(player); context.SaveChanges(); sb.Append($"> ..adding {playerName}.\n"); } else { sb.Append($"> ..skipping {playerName} since I already know him.\n"); } } slackService.SendMessage(sb.ToString(), channel); } } else if (command.Parameters[0].ToLower().Equals("stats")) { GameMode gameMode = command.GameMode; if (gameMode == null) { gameMode = context.GameModes.Where(x => x.ShortName.Equals("ffa")).First(); } var rankings = context.Ratings.Where(x => x.GameMode.Equals(gameMode)).Include(x => x.Player).Include(x => x.Deck).OrderByDescending(x => x.ConservativeRating)?.ToList(); if (rankings == null || rankings.Count == 0) { slackService.SendMessage($"No ratings found for {gameMode.Name}.", channel); return; } sb.Append($"*{gameMode.Name} rankings:*\n"); int i = 1; foreach (var ranking in rankings) { sb.Append($"> {i++}: {ranking.Player.Name}'s {ranking.Deck.DeckName} (R={ranking.ConservativeRating.ToString("#.#")} | μ={ranking.Mean.ToString("#.#")} | σ={ranking.StandardDeviation.ToString("#.#")})\n"); } slackService.SendMessage(sb.ToString(), channel); } else { slackService.SendMessage("This doesn't make a lot of sense to me.", channel); } }