예제 #1
0
    public async Task Handle(TwentyFourHoursToDeadline message, IMessageHandlerContext context)
    {
        _logger.LogInformation($"Notifying about 24h to (gw{message.GameweekNearingDeadline.Id}) deadline");

        var allSlackTeams = await _teamRepo.GetAllTeams();

        foreach (var team in allSlackTeams)
        {
            if (team.HasRegisteredFor(EventSubscription.Deadlines))
            {
                var command = new PublishDeadlineNotificationToSlackWorkspace(team.TeamId, message.GameweekNearingDeadline);
                var options = new SendOptions();
                options.RequireImmediateDispatch();
                options.RouteToThisEndpoint();
                await context.Send(command, options);
            }
        }
    }
예제 #2
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"
            });
        }
    }