コード例 #1
0
        /// <summary>
        /// Matches played
        /// </summary>
        /// <param name="playerId">Steam32 account ID</param>
        /// <param name="parameters">Query parameters</param>
        /// <returns></returns>
        public async Task <List <PlayerMatch> > GetPlayerMatchesAsync(long playerId, PlayerEndpointParameters parameters = null)
        {
            var addedArguments = CreateArgumentListForPlayerEndpointRequest(parameters);
            var response       = await _request.GetRequestResponseMessageAsync(string.Format(PlayerMatches, playerId), addedArguments);

            response.EnsureSuccessStatusCode();
            // test
            var playerMatches = JsonConvert.DeserializeObject <List <PlayerMatch> >(await response.Content.ReadAsStringAsync());

            return(playerMatches);
        }
コード例 #2
0
        private async Task <Embed> BuildUserStatsEmbedAsync(long playerID_32)
        {
            var playerInfo = await _openDota.Player.GetPlayerByIdAsync(playerID_32);

            EmbedBuilder embedBuilder = new EmbedBuilder();

            embedBuilder.Color = Color.Green;

            embedBuilder.AddField("Имя в Стиме:", $"**{playerInfo.Profile.Personaname}**", true);
            embedBuilder.AddField("Последний раз в сети:", playerInfo.Profile.LastLogin.HasValue ? playerInfo.Profile.LastLogin?.ToString("dd.mm.yyyy, HH:mm", CultureInfo.InvariantCulture) : "неизвестно", true);
            embedBuilder.AddField("Ссылка на профиль", playerInfo.Profile.Profileurl);
            embedBuilder.AddField("Ссылка на OpenDota: ", $"https://www.opendota.com/players/{playerID_32}");
            embedBuilder.AddField("MMR:", playerInfo.MmrEstimate.Estimate.HasValue ? playerInfo.MmrEstimate.Estimate.ToString() : "нет", true);
            //MMR может быть не актуален: add MMR to your profile card.
            embedBuilder.AddField("Ранг: ", playerInfo.LeaderboardRank.HasValue ? playerInfo.LeaderboardRank.ToString() : "нет", true);
            embedBuilder.AddField("Страна: ", playerInfo.Profile.Loccountrycode != null ? GetFlag(playerInfo.Profile.Loccountrycode) : "неизвестно");

            embedBuilder.WithTimestamp(DateTimeOffset.Now);

            var playerWinLoss = await _openDota.Player.GetPlayerWinLossByIdAsync(playerID_32);

            int matches = playerWinLoss.Wins + playerWinLoss.Losses;

            embedBuilder.AddField("Всего игр сыграно:", matches);

            embedBuilder.AddField("Побед:", playerWinLoss.Wins, true);
            embedBuilder.AddField("Поражений:", playerWinLoss.Losses, true);
            embedBuilder.AddField("Винрейт:", matches != 0 ? ((double)playerWinLoss.Wins / matches).ToString("0.##") : "неизвестно", true);
            embedBuilder.WithThumbnailUrl(playerInfo.Profile.Avatarfull.ToString());
            var playerQueryParameters = new PlayerEndpointParameters
            {
                Limit = 20
            };
            var playerHeroes = await _openDota.Player.GetPlayerHeroesAsync(playerID_32, playerQueryParameters);

            var playerMostPlayedHeroLast20 = playerHeroes.FirstOrDefault();
            var hero = heroes[playerMostPlayedHeroLast20.HeroId];

            embedBuilder.AddField("Самый популярный герой за последние 20 матчей:", playerMostPlayedHeroLast20 != null ? $"{hero.LocalizedName} (*{string.Join("; ", hero.Roles)}*) с {playerMostPlayedHeroLast20.Win} победами" : "нет информации");
            embedBuilder.WithFooter(new EmbedFooterBuilder().WithText("Чтобы получить больше информации, воспользуйтесь командой !get_stats_extra или !check_steam_extra"));

            return(embedBuilder.Build());
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: rist0/OpenDota.NET
        static async Task Main(string[] args)
        {
            const long playerId = 375507918;
            const long matchId  = 5063190379;

            var playerInfo = await OpenDota.Player.GetPlayerByIdAsync(playerId);

            Console.WriteLine($@"Basic details of player with id {playerId}.");
            Console.WriteLine($@"Steam name: {playerInfo.Profile.Personaname}");
            Console.WriteLine($@"Steam ID: {playerInfo.Profile.Steamid}");
            Console.WriteLine($@"Steam profile direct link: {playerInfo.Profile.Profileurl}");

            if (playerInfo.MmrEstimate.Estimate.HasValue)
            {
                Console.WriteLine($@"Estimated MMR: {playerInfo.MmrEstimate.Estimate}");
            }

            Console.WriteLine();

            Console.WriteLine("Win loss ratio");
            var playerWinLoss = await OpenDota.Player.GetPlayerWinLossByIdAsync(playerId);

            Console.WriteLine($@"Total games played: {playerWinLoss.Wins + playerWinLoss.Losses}.");
            Console.WriteLine($@"Total wins: {playerWinLoss.Wins}.");
            Console.WriteLine($@"Total losses: {playerWinLoss.Losses}.");

            Console.WriteLine();

            Console.WriteLine("Player heroes");
            var playerQueryParameters = new PlayerEndpointParameters
            {
                Limit = 20
            };
            var playerHeroes = await OpenDota.Player.GetPlayerHeroesAsync(playerId, playerQueryParameters);

            var playerMostPlayedHeroLast20 = playerHeroes.FirstOrDefault();

            if (playerMostPlayedHeroLast20 != null)
            {
                Console.WriteLine(
                    $@"Most played hero in the last 20 matches is hero ID: {playerMostPlayedHeroLast20.HeroId} with {playerMostPlayedHeroLast20.Win} wins.");
            }

            Console.WriteLine();

            Console.WriteLine("Player heroes");
            var matchDetails = await OpenDota.Matches.GetMatchByIdAsync(matchId);

            Console.WriteLine($@"Details about match id {matchId}.");
            Console.WriteLine($@"Duration of game: {TimeSpan.FromSeconds(matchDetails.Duration):mm\:ss}.");
            Console.WriteLine($@"Radiant Score: {matchDetails.RadiantScore}. Dire Score: {matchDetails.DireScore}.");

            Console.WriteLine($@"Nickname of players in the game:");
            foreach (var player in matchDetails.Players)
            {
                Console.WriteLine(string.IsNullOrEmpty(player.Personaname) ? "Anonymous" : $@"{player.Personaname}");
            }

            Console.WriteLine("Example finished. Press esc key to exit...");

            Console.ReadKey();
        }
コード例 #4
0
        private async Task <Embed> BuildUserStatsExtraEmbedAsync(long playerID_32)
        {
            var playerInfo = await _openDota.Player.GetPlayerByIdAsync(playerID_32);

            EmbedBuilder embedBuilder = new EmbedBuilder();

            embedBuilder.Color = Color.Green;

            embedBuilder.AddField("Имя в Стиме:", $"**{playerInfo.Profile.Personaname}**", true);
            embedBuilder.AddField("Последний раз в сети:", playerInfo.Profile.LastLogin.HasValue ? playerInfo.Profile.LastLogin?.ToString("dd.mm.yyyy, HH:mm", CultureInfo.InvariantCulture) : "неизвестно", true);
            embedBuilder.AddField("Ссылка на профиль", playerInfo.Profile.Profileurl);

            var param = new PlayerEndpointParameters();

            var playerTotals = await _openDota.Player.GetPlayerTotalsAsync(playerID_32);

            for (int i = 0; i < playerTotals.Count; i++)
            {
                OpenDotaDotNet.Models.Players.PlayerTotal playerTotal = playerTotals[i];
                switch (playerTotal.Field)
                {
                case "kills":
                    embedBuilder.AddField("Убийств:", playerTotal.Sum.ToString(), true);
                    break;

                case "deaths":
                    embedBuilder.AddField("Смертей:", playerTotal.Sum.ToString(), true);
                    break;

                case "assists":
                    embedBuilder.AddField("Помощи:", playerTotal.Sum.ToString(), true);
                    break;

                case "duration":
                    var    duration = TimeSpan.FromSeconds(playerTotal.Sum);
                    string output   = $"{duration.Days}д {duration.Hours}ч {duration.Minutes}м {duration.Seconds}с";
                    embedBuilder.AddField("Играет уже:",
                                          output);
                    break;

                case "last_hits":
                    embedBuilder.AddField("Добито крипов:", playerTotal.Sum.ToString(), true);
                    break;

                case "denies":
                    embedBuilder.AddField("Добито своих крипов:", playerTotal.Sum.ToString(), true);
                    break;

                case "level":
                    embedBuilder.AddField("Уровней взято:", playerTotal.Sum.ToString());
                    break;

                case "hero_damage":
                    embedBuilder.AddField("Урон по героям:", playerTotal.Sum.ToString(), true);
                    break;

                case "tower_damage":
                    embedBuilder.AddField("Урон по строениям:", playerTotal.Sum.ToString(), true);
                    break;

                case "hero_healing":
                    embedBuilder.AddField("Здоровья исцелено:", playerTotal.Sum.ToString(), true);
                    break;
                }
            }

            embedBuilder.WithTimestamp(DateTimeOffset.Now);

            embedBuilder.WithThumbnailUrl(playerInfo.Profile.Avatarfull.ToString());

            embedBuilder.WithFooter(new EmbedFooterBuilder().WithText("Чтобы получить основную информацию, воспользуйтесь командой !get_stats или !check_steam"));

            return(embedBuilder.Build());
        }
コード例 #5
0
 /// <inheritdoc />
 public async Task <PlayerWordcloud> GetPlayerWordCloudAsync(long playerId, PlayerEndpointParameters parameters) =>
 await this.requester.GetResponseAsync <PlayerWordcloud>(
     $"players/{playerId}/wordcloud",
     this.GetArguments(parameters));
コード例 #6
0
 /// <inheritdoc />
 public async Task <PlayerWardmap> GetPlayerWardMapAsync(long playerId, PlayerEndpointParameters parameters) =>
 await this.requester.GetResponseAsync <PlayerWardmap>(
     $"players/{playerId}/wardmap",
     this.GetArguments(parameters));
コード例 #7
0
 /// <inheritdoc />
 public async Task <IEnumerable <PlayerHistogram> > GetPlayerHistogramsAsync(long playerId, string field, PlayerEndpointParameters parameters) =>
 await this.requester.GetResponseAsync <IEnumerable <PlayerHistogram> >(
     $"players/{playerId}/histograms/{field}",
     this.GetArguments(parameters));
コード例 #8
0
 /// <inheritdoc />
 public async Task <PlayerCount> GetPlayerCountsAsync(long playerId, PlayerEndpointParameters parameters) =>
 await this.requester.GetResponseAsync <PlayerCount>(
     $"players/{playerId}/counts",
     this.GetArguments(parameters));
コード例 #9
0
 /// <inheritdoc />
 public async Task <IEnumerable <PlayerTotal> > GetPlayerTotalsAsync(long playerId, PlayerEndpointParameters parameters) =>
 await this.requester.GetResponseAsync <IEnumerable <PlayerTotal> >(
     $"players/{playerId}/totals",
     this.GetArguments(parameters));
コード例 #10
0
 GetPlayerHeroesAsync(long playerId, PlayerEndpointParameters parameters = null) =>
 await this.requester.GetResponseAsync <IEnumerable <PlayerHero> >(
     $"players/{playerId}/heroes",
     this.GetArguments(parameters));
コード例 #11
0
 /// <inheritdoc />
 public async Task <IEnumerable <PlayerMatch> > GetPlayerMatchesAsync(
     long playerId,
     PlayerEndpointParameters parameters = null) =>
 await this.requester.GetResponseAsync <IEnumerable <PlayerMatch> >(
     $"players/{playerId}/matches",
     this.GetArguments(parameters));
コード例 #12
0
 /// <inheritdoc />
 public async Task <PlayerWinLoss> GetPlayerWinLossByIdAsync(
     long playerId,
     PlayerEndpointParameters parameters = null) =>
 await this.requester.GetResponseAsync <PlayerWinLoss>(
     $"players/{playerId}/wl",
     this.GetArguments(parameters));
コード例 #13
0
        private IEnumerable <string> GetArguments(PlayerEndpointParameters parameters)
        {
            var addedArguments = new List <string>();

            if (parameters == null)
            {
                return(addedArguments);
            }

            if (parameters.Limit != null)
            {
                addedArguments.Add($@"limit={parameters.Limit}");
            }

            if (parameters.Offset != null)
            {
                addedArguments.Add($@"offset={parameters.Offset}");
            }

            if (parameters.Win != null)
            {
                addedArguments.Add($@"win={parameters.Win}");
            }

            if (parameters.Patch != null)
            {
                addedArguments.Add($@"patch={parameters.Patch}");
            }

            if (parameters.GameMode != null)
            {
                addedArguments.Add($@"game_mode={parameters.GameMode}");
            }

            if (parameters.LobbyType != null)
            {
                addedArguments.Add($@"lobby_type={parameters.LobbyType}");
            }

            if (parameters.Region != null)
            {
                addedArguments.Add($@"region={parameters.Region}");
            }

            if (parameters.Date != null)
            {
                addedArguments.Add($@"date={parameters.Date}");
            }

            if (parameters.LaneRole != null)
            {
                addedArguments.Add($@"lane_role={parameters.LaneRole}");
            }

            if (parameters.HeroId != null)
            {
                addedArguments.Add($@"hero_id={parameters.HeroId}");
            }

            if (parameters.IsRadiant != null)
            {
                addedArguments.Add($@"is_radiant={parameters.IsRadiant}");
            }

            if (parameters.IncludedAccountIds != null)
            {
                addedArguments.AddRange(
                    parameters.IncludedAccountIds.Select(
                        includedAccountId => $@"included_account_id={includedAccountId}"));
            }

            if (parameters.ExcludedAccountIds != null)
            {
                addedArguments.AddRange(
                    parameters.ExcludedAccountIds.Select(
                        excludedAccountId => $@"excluded_account_id={excludedAccountId}"));
            }

            if (parameters.WithHeroIds != null)
            {
                addedArguments.AddRange(parameters.WithHeroIds.Select(withHeroId => $@"with_hero_id={withHeroId}"));
            }

            if (parameters.AgainstHeroIds != null)
            {
                addedArguments.AddRange(parameters.AgainstHeroIds.Select(againstHeroId => $@"against_hero_id={againstHeroId}"));
            }

            if (parameters.Significant != null)
            {
                addedArguments.Add($@"significant={parameters.Significant}");
            }

            if (parameters.Having != null)
            {
                addedArguments.Add($@"having={parameters.Having}");
            }

            if (parameters.Sort != null)
            {
                addedArguments.Add($@"sort={parameters.Sort}");
            }

            if (parameters.Project != null)
            {
                addedArguments.AddRange(parameters.Project.Select(project => $@"project={project}"));
            }

            return(addedArguments);
        }
コード例 #14
0
        private List <string> CreateArgumentListForPlayerEndpointRequest(PlayerEndpointParameters parameters)
        {
            var addedArguments = new List <string>();

            if (parameters == null)
            {
                return(addedArguments);
            }

            if (parameters.Limit != null)
            {
                addedArguments.Add($@"limit={parameters.Limit}");
            }

            if (parameters.Offset != null)
            {
                addedArguments.Add($@"offset={parameters.Offset}");
            }

            if (parameters.Win != null)
            {
                addedArguments.Add($@"win={parameters.Win}");
            }

            if (parameters.Patch != null)
            {
                addedArguments.Add($@"patch={parameters.Patch}");
            }

            if (parameters.GameMode != null)
            {
                addedArguments.Add($@"game_mode={parameters.GameMode}");
            }

            if (parameters.LobbyType != null)
            {
                addedArguments.Add($@"lobby_type={parameters.LobbyType}");
            }

            if (parameters.Region != null)
            {
                addedArguments.Add($@"region={parameters.Region}");
            }

            if (parameters.Date != null)
            {
                addedArguments.Add($@"date={parameters.Date}");
            }

            if (parameters.LaneRole != null)
            {
                addedArguments.Add($@"lane_role={parameters.LaneRole}");
            }

            if (parameters.HeroId != null)
            {
                addedArguments.Add($@"hero_id={parameters.HeroId}");
            }

            if (parameters.IsRadiant != null)
            {
                addedArguments.Add($@"is_radiant={parameters.IsRadiant}");
            }

            if (parameters.IncludedAccountIds != null)
            {
                foreach (var includedAccountId in parameters.IncludedAccountIds)
                {
                    addedArguments.Add($@"included_account_id={includedAccountId}");
                }
            }

            if (parameters.ExcludedAccountIds != null)
            {
                foreach (var excludedAccountId in parameters.ExcludedAccountIds)
                {
                    addedArguments.Add($@"excluded_account_id={excludedAccountId}");
                }
            }

            if (parameters.WithHeroIds != null)
            {
                foreach (var withHeroId in parameters.WithHeroIds)
                {
                    addedArguments.Add($@"with_hero_id={withHeroId}");
                }
            }

            if (parameters.AgainstHeroIds != null)
            {
                foreach (var againstHeroId in parameters.AgainstHeroIds)
                {
                    addedArguments.Add($@"against_hero_id={againstHeroId}");
                }
            }

            if (parameters.Significant != null)
            {
                addedArguments.Add($@"significant={parameters.Significant}");
            }

            if (parameters.Having != null)
            {
                addedArguments.Add($@"having={parameters.Having}");
            }

            if (parameters.Sort != null)
            {
                addedArguments.Add($@"sort={parameters.Sort}");
            }

            if (parameters.Project != null)
            {
                foreach (var project in parameters.Project)
                {
                    addedArguments.Add($@"project={project}");
                }
            }

            return(addedArguments);
        }