public async Task <string> FindAndPostLiveScores() { var thisWeek = (await _mfl.GetMatchupSchedule()).schedule.weeklySchedule.First(_ => _.matchup.All(gm => gm.franchise.Any(tm => tm.result == "T" && tm.score == null))).week; var botText = "Live Scores (Live Projections)\n"; var matchupScoresTask = _mfl.GetLiveScores(thisWeek); var scoreProjectionsTask = _mfl.GetProjections(thisWeek); await Task.WhenAll(new List <Task> { matchupScoresTask, scoreProjectionsTask }); var matchups = matchupScoresTask.Result.liveScoring.matchup; var projections = scoreProjectionsTask.Result.projectedScores.playerScore; matchups.ForEach(_ => { _owners.TryGetValue(Int32.Parse(_.franchise.First().id), out var tm1); _owners.TryGetValue(Int32.Parse(_.franchise.Last().id), out var tm2); var success = Double.TryParse(_.franchise.First().score, out var tm1Score); var success2 = Double.TryParse(_.franchise.Last().score, out var tm2Score); // go through all the "starter"s on each team and add up their projected score. var tm1Starters = _.franchise.First().players.player.Where(p => p.status == "starter").ToList(); var tm2Starters = _.franchise.Last().players.player.Where(p => p.status == "starter").ToList(); tm1Starters.ForEach(s => s.origProjectedScore = projections.FirstOrDefault(p => p.id == s.id)?.score ?? "0"); tm2Starters.ForEach(s => s.origProjectedScore = projections.FirstOrDefault(p => p.id == s.id)?.score ?? "0"); // for each player // get % of game left for each player (out of 3600) multiply // add actual score + remaining projection var tm1ProjectedScore = 0.0; var tm2ProjectedScore = 0.0; tm1Starters.ForEach(p => { var pctRemaining = Double.Parse(p.gameSecondsRemaining) / 3600; p.liveRemainingProjectedScore = Double.Parse(p.score) + (Double.Parse(p.origProjectedScore) * pctRemaining); tm1ProjectedScore += p.liveRemainingProjectedScore; }); tm2Starters.ForEach(p => { var pctRemaining = Double.Parse(p.gameSecondsRemaining) / 3600; p.liveRemainingProjectedScore = Double.Parse(p.score) + (Double.Parse(p.origProjectedScore) * pctRemaining); tm2ProjectedScore += p.liveRemainingProjectedScore; }); if (!success || !success2) { return; } tm1 += $": {tm1Score} ({tm1ProjectedScore.ToString("F")})\n"; tm2 += $": {tm2Score} ({tm2ProjectedScore.ToString("F")})\n"; botText += $"-----\n{tm1}{tm2}"; }); await BotPost(botText); return(botText); }
public async Task <List <LiveScoreFranchise> > GetLiveScoresForFranchises(string thisWeek) { return((await _mfl.GetLiveScores(thisWeek)).liveScoring.matchup .SelectMany(game => game.franchise) .ToList()); }