Esempio n. 1
0
        public async Task Ranking(IUser user = null)
        {
            user ??= Context.User as IUser;
            var playerRanking = rankingService.SeriesPlayers.Select((x, i) => new KeyValuePair <int, SeriesPlayer>(i + 1, x)).ToDictionary(x => x.Key, x => x.Value);

            var embed = new EmbedBuilder()
                        .WithAuthor(user)
                        .WithColor(Color.Orange)
                        .WithTitle("Leaderboard")
                        .WithDescription(rankingService.PrintRankingList(playerRanking.Take(10)).JoinLines());

            if (playerRanking.Values.Any(x => x.Id == user.Id.ToString()))
            {
                IConvertible getWins(IEnumerable <Series> seriesSet, string playerId) => seriesSet.Sum(x => x.WinnerId == playerId ? x.Wins : x.Losses);

                var player             = playerRanking.First(x => x.Value.Id == user.Id.ToString());
                var playerId           = player.Value.Id;
                var seriesHistory      = seriesService.SeriesHistory.Where(x => x.WinnerId == playerId || x.LoserId == playerId);
                var gamesPlayed        = seriesHistory.Sum(x => x.Wins + x.Losses);
                var seriesHistoryLast3 = seriesHistory.Reverse().Take(3).Reverse();
                var totalWins          = getWins(seriesHistory, playerId);

                var playerRankoutput     = $"{Format.Bold("Position")}\n{rankingService.PrintRankingList(playerRanking.Skip(player.Key - 2).Take(3)).JoinLines()}";
                var gamesPlayedOutput    = $"`{gamesPlayed}` Games played";
                var winLossOutput        = $"`{totalWins}-{gamesPlayed - totalWins.ToInt32(default)}` Win loss";