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