/// <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); }
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()); }
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(); }
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()); }
/// <inheritdoc /> public async Task <PlayerWordcloud> GetPlayerWordCloudAsync(long playerId, PlayerEndpointParameters parameters) => await this.requester.GetResponseAsync <PlayerWordcloud>( $"players/{playerId}/wordcloud", this.GetArguments(parameters));
/// <inheritdoc /> public async Task <PlayerWardmap> GetPlayerWardMapAsync(long playerId, PlayerEndpointParameters parameters) => await this.requester.GetResponseAsync <PlayerWardmap>( $"players/{playerId}/wardmap", this.GetArguments(parameters));
/// <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));
/// <inheritdoc /> public async Task <PlayerCount> GetPlayerCountsAsync(long playerId, PlayerEndpointParameters parameters) => await this.requester.GetResponseAsync <PlayerCount>( $"players/{playerId}/counts", this.GetArguments(parameters));
/// <inheritdoc /> public async Task <IEnumerable <PlayerTotal> > GetPlayerTotalsAsync(long playerId, PlayerEndpointParameters parameters) => await this.requester.GetResponseAsync <IEnumerable <PlayerTotal> >( $"players/{playerId}/totals", this.GetArguments(parameters));
GetPlayerHeroesAsync(long playerId, PlayerEndpointParameters parameters = null) => await this.requester.GetResponseAsync <IEnumerable <PlayerHero> >( $"players/{playerId}/heroes", this.GetArguments(parameters));
/// <inheritdoc /> public async Task <IEnumerable <PlayerMatch> > GetPlayerMatchesAsync( long playerId, PlayerEndpointParameters parameters = null) => await this.requester.GetResponseAsync <IEnumerable <PlayerMatch> >( $"players/{playerId}/matches", this.GetArguments(parameters));
/// <inheritdoc /> public async Task <PlayerWinLoss> GetPlayerWinLossByIdAsync( long playerId, PlayerEndpointParameters parameters = null) => await this.requester.GetResponseAsync <PlayerWinLoss>( $"players/{playerId}/wl", this.GetArguments(parameters));
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); }
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); }