コード例 #1
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);
                }
            }
        }
コード例 #2
0
    public async Task Handle(TwentyFourHoursToDeadline message, IMessageHandlerContext context)
    {
        _logger.LogInformation($"Notifying about 24 hours to (gw{message.GameweekNearingDeadline.Id}) deadline");
        var allGuilds = await _teamRepo.GetAllGuildSubscriptions();

        var text = $"⏳Gameweek {message.GameweekNearingDeadline.Id} deadline in 24 hours!";

        foreach (var guild in allGuilds)
        {
            if (guild.Subscriptions.ContainsSubscriptionFor(EventSubscription.Deadlines))
            {
                var options = new SendOptions();
                options.RequireImmediateDispatch();
                options.RouteToThisEndpoint();
                await context.Send(new PublishRichToGuildChannel(guild.GuildId, guild.ChannelId, "ℹ️ Deadline", text), options);
            }
        }
    }
コード例 #3
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);
            }
        }
    }