Exemple #1
0
    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;
                }
            }
        }
    }
Exemple #2
0
        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;
                    }
                }
            }
        }
Exemple #3
0
    // 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()));
    }
Exemple #4
0
        public async Task Reset(int newGameweek)
        {
            _currentGameweek         = newGameweek;
            _currentGameweekFixtures = await _fixtureClient.GetFixturesByGameweek(newGameweek);

            var settings = await _settingsClient.GetGlobalSettings();

            _players = settings.Players;
            _teams   = settings.Teams;
        }
Exemple #5
0
    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));
        }
Exemple #7
0
        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));
        }
Exemple #9
0
    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));
    }