private List <Match> GetMatches(OpenDotaClient openDota, Player player) { const int collectLimit = 10; var limit = player.LastMatchId == null ? null : (int?)collectLimit; var matches = openDota.Matches(player.Id, limit: limit) .TakeWhile(x => x.match_id != player.LastMatchId) //todo where? .ToList(); return(matches.Select(match => new Match { MatchId = match.match_id, PlayerId = match.account_id, PlayerSlot = match.player_slot, HeroId = match.hero_id, GameMode = match.game_mode, LobbyType = match.lobby_type, DateStart = match.DateStart(), Duration = match.Duration(), Kills = match.kills, Deaths = match.deaths, Assists = match.assists, Won = match.Won(), LeaverStatus = match.leaver_status }).ToList()); }
public Grabber(ILogger <Grabber> logger, IServiceScopeFactory serviceScopeFactory, SteamClient steam, OpenDotaClient openDota, MatchNotifier matchNotifier) { this.logger = logger; this.serviceScopeFactory = serviceScopeFactory; this.steam = steam; this.openDota = openDota; this.matchNotifier = matchNotifier; }
private Player CollectPlayerData(DataManager dataManager, OpenDotaClient openDota, long playerId) { var info = openDota.Player(playerId); if (info == null) { return(null); } var player = dataManager.Players .Add(new Player { Id = playerId }) .Entity; // основное инфо player.Name = info.profile.personaname; player.SteamId = info.profile.steamid; player.SoloRank = info.solo_competitive_rank; player.PartyRank = info.competitive_rank; player.RankTier = info.rank_tier; // матчи var matches = GetMatches(openDota, player); if (matches.Count > 0) { dataManager.Matches.AddRange(matches); var latest = matches.OrderByDescending(x => x.MatchId).First(); player.LastMatchId = latest.MatchId; player.LastMatchDate = latest.DateStart + latest.Duration; } player.WinCount = matches.Count(x => x.Won); player.LoseCount = matches.Count(x => !x.Won); // рейтинги var ratings = GetRatings(openDota, player); if (ratings.Count > 0) { dataManager.Ratings.AddRange(ratings); player.LastRatingDate = ratings.Max(x => x.Date); } return(player); }
private List <Rating> GetRatings(OpenDotaClient openDota, Player player) { var lastRatingDate = player.LastRatingDate ?? DateTime.MinValue; var ratings = openDota.Ratings(player.Id) .Where(x => x.time > lastRatingDate) .ToList(); return(ratings.Select(x => new Rating { PlayerId = x.account_id, MatchId = x.match_id, SoloRank = x.solo_competitive_rank, PartyRank = x.competitive_rank, Date = x.time }).ToList()); }