public async Task Reset(int gw) { _matchDetails.Clear(); try { _currentFixtures = await _fixtureClient.GetFixturesByGameweek(gw); } catch (Exception e) when(LogError(e)) { return; } foreach (var fixture in _currentFixtures) { var lineups = await _scraperApi.GetMatchDetails(fixture.PulseId); if (lineups != null) { _matchDetails[fixture.PulseId] = lineups; } else { // retry: var retry = await _scraperApi.GetMatchDetails(fixture.PulseId); if (retry != null) { _matchDetails[fixture.PulseId] = retry; } } } }
public async Task Reset(int gw) { _matchDetails.Clear(); var fixtures = await _fixtureClient.GetFixturesByGameweek(gw); foreach (var fixture in fixtures) { var lineups = await _scraperApi.GetMatchDetails(fixture.PulseId); if (lineups != null) { _matchDetails[fixture.PulseId] = lineups; } else { // retry: var retry = await _scraperApi.GetMatchDetails(fixture.PulseId); if (retry != null) { _matchDetails[fixture.PulseId] = retry; } } } }
// To test fixture event: private async Task PublishPrevGwFixtureEvents(int gwId) { var settings = await _settingsClient.GetGlobalSettings(); var updated = await _fixtureClient.GetFixturesByGameweek(gwId); var previous = await _fixtureClient.GetFixturesByGameweek(gwId); foreach (var fixture in previous) { fixture.Stats = Array.Empty <FixtureStat>(); // if (fixture.Id == 24) // { // //int before = fixture.Stats.First(s => s.Identifier == "goals_scored").HomeStats.First().Value; // //int after = before - 2; // //_logger.LogInformation($"Before: {before}. After {after}"); // //fixture.Stats.First(s => s.Identifier == "goals_scored").HomeStats.First().Value = after; // var newl = fixture.Stats.First(s => s.Identifier == "goals_scored").HomeStats // .Where(c => c.Value != 2).ToList().AsEnumerable(); // fixture.Stats.First(s => s.Identifier == "goals_scored").HomeStats = newl.ToList(); // } } // // var allFixtureEvents = LiveEventsExtractor.GetUpdatedFixtureEvents(updated,previous, settings.Players, settings.Teams); // await _session.Publish(new FixtureEventsOccured(allFixtureEvents.ToArray()[0..1].ToList())); }
public async Task Reset(int newGameweek) { _currentGameweek = newGameweek; _currentGameweekFixtures = await _fixtureClient.GetFixturesByGameweek(newGameweek); var settings = await _settingsClient.GetGlobalSettings(); _players = settings.Players; _teams = settings.Teams; }
public async Task Reset(int newGameweek) { using var scope = _logger.AddContext("StateInit"); _logger.LogInformation($"Running reset for gw {newGameweek}"); _currentGameweekFixtures = await _fixtureClient.GetFixturesByGameweek(newGameweek); var settings = await _settingsClient.GetGlobalSettings(); _players = settings.Players; _teams = settings.Teams; }
public async Task <HandleResponse> Handle(SlackMessage message) { var slackClient = await _slackClientBuilder.CreateClient(message.Team.Id); var usersTask = slackClient.UsersList(); var gameweeksTask = _gameweekClient.GetGameweeks(); var teamsTask = _teamsclient.GetAllTeams(); var users = await usersTask; var gameweeks = await gameweeksTask; var teams = await teamsTask; var nextGw = gameweeks.First(gw => gw.IsNext); var fixtures = await _fixtureClient.GetFixturesByGameweek(nextGw.Id); var user = users.Members.FirstOrDefault(x => x.Id == message.User?.Id); var userTzOffset = user?.Tz_Offset ?? 0; var textToSend = TextToSend(nextGw, fixtures, teams, userTzOffset); foreach (var pBuilder in _publishers) { var p = await pBuilder.Build(message.Team.Id); await p.Publish(new Notification { Recipient = message.ChatHub.Id, Msg = textToSend }); } return(new HandleResponse(textToSend)); }
public async Task Handle(TwentyFourHoursToDeadline notification, CancellationToken cancellationToken) { _logger.LogInformation($"Notifying about 24h to (gw{notification.Gameweek.Id}) deadline"); var fixtures = await _fixtures.GetFixturesByGameweek(notification.Gameweek.Id); var teams = (await _globalSettingsClient.GetGlobalSettings()).Teams; var allSlackTeams = await _teamRepo.GetAllTeams(); string message = $"⏳ Gameweek {notification.Gameweek.Id} deadline in 24 hours!"; foreach (var team in allSlackTeams) { if (team.Subscriptions.ContainsSubscriptionFor(EventSubscription.Deadlines)) { await PublishToTeam(team); } } async Task PublishToTeam(SlackTeam team) { var slackClient = _builder.Build(team.AccessToken); try { var res = await slackClient.ChatPostMessage(team.FplBotSlackChannel, message); if (res.Ok) { await PublishFixtures(slackClient, res.ts, team); } } catch (Exception e) { _logger.LogWarning(e, e.Message); } } async Task PublishFixtures(ISlackClient slackClient, string ts, SlackTeam team) { var users = await slackClient.UsersList(); var user = users.Members.FirstOrDefault(u => u.Is_Admin); // could have selected app_install user here, if we had this stored var userTzOffset = user?.Tz_Offset ?? 0; var fixturesList = Formatter.FixturesForGameweek(notification.Gameweek, fixtures, teams, tzOffset: userTzOffset); try { await slackClient.ChatPostMessage(new ChatPostMessageRequest { Channel = team.FplBotSlackChannel, thread_ts = ts, Text = fixturesList, unfurl_links = "false" }); } catch (Exception e) { _logger.LogWarning(e, e.Message); } } }
public async Task <IDictionary <int, int> > GetGoalsByPlayerId(int gameweek) { var fixtures = await _fixtureClient.GetFixturesByGameweek(gameweek); return(fixtures .Select(fixture => fixture.Stats .OrEmptyIfNull() .SingleOrDefault(stat => stat.Identifier == Constants.StatIdentifiers.GoalsScored)) .WhereNotNull() .SelectMany(goalStatsPrFixture => goalStatsPrFixture?.HomeStats?.OrEmptyIfNull() .Concat(goalStatsPrFixture?.AwayStats.OrEmptyIfNull()) .OrEmptyIfNull() .Select(x => new { Player = x.Element, Goals = x.Value }) ) .ToDictionary(x => x.Player, x => x.Goals)); }
public async Task Handle(PublishDeadlineNotificationToSlackWorkspace message, IMessageHandlerContext context) { string notification = $"⏳ Gameweek {message.Gameweek.Id} deadline in 24 hours!"; var team = await _teamRepo.GetTeam(message.WorkspaceId); await PublishToTeam(); async Task PublishToTeam() { var slackClient = _builder.Build(team.AccessToken); var res = await slackClient.ChatPostMessage(team.FplBotSlackChannel, notification); if (res.Ok) { await PublishFixtures(slackClient, res.ts); } } async Task PublishFixtures(ISlackClient slackClient, string ts) { var fixtures = await _fixtures.GetFixturesByGameweek(message.Gameweek.Id); var teams = (await _globalSettingsClient.GetGlobalSettings()).Teams; var users = await slackClient.UsersList(); var user = users.Members.FirstOrDefault(u => u.Is_Admin); // could have selected app_install user here, if we had this stored var userTzOffset = user?.Tz_Offset ?? 0; var messageGameweekNearingDeadline = message.Gameweek; var fixturesList = Formatter.FixturesForGameweek(messageGameweekNearingDeadline.Id, messageGameweekNearingDeadline.Name, messageGameweekNearingDeadline.Deadline, fixtures, teams, tzOffset: userTzOffset); await slackClient.ChatPostMessage(new ChatPostMessageRequest { Channel = team.FplBotSlackChannel, thread_ts = ts, Text = fixturesList, unfurl_links = "false" }); } }
public override async Task <EventHandledResponse> Handle(EventMetaData eventMetadata, AppMentionEvent slackEvent) { var team = await _tokenStore.GetTeam(eventMetadata.Team_Id); var slackClient = _slackClientService.Build(team.AccessToken); var usersTask = slackClient.UsersList(); var settings = await _globalSettingsClient.GetGlobalSettings(); var users = await usersTask; var gameweeks = settings.Gameweeks; var teams = settings.Teams; var nextGw = gameweeks.First(gw => gw.IsNext); var fixtures = await _fixtureClient.GetFixturesByGameweek(nextGw.Id); var user = users.Members.FirstOrDefault(x => x.Id == slackEvent.User); var userTzOffset = user?.Tz_Offset ?? 0; var textToSend = Formatter.FixturesForGameweek(nextGw.Id, nextGw.Name, nextGw.Deadline, fixtures, teams, userTzOffset); await _workspacePublisher.PublishToWorkspace(eventMetadata.Team_Id, slackEvent.Channel, textToSend); return(new EventHandledResponse(textToSend)); }