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 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); } } }
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); } } }