Example #1
0
    public async Task Handle(PublishFixtureEventsToSlackWorkspace message, IMessageHandlerContext messageContext)
    {
        _logger.LogInformation($"Publishing {message.FixtureEvents.Count} fixture events to {message.WorkspaceId}");
        var slackTeam = await _slackTeamRepo.GetTeam(message.WorkspaceId);

        TauntData tauntData = null;

        if (slackTeam.Subscriptions.ContainsSubscriptionFor(EventSubscription.Taunts) && slackTeam.FplbotLeagueId.HasValue)
        {
            var gws = await _globalSettingsClient.GetGlobalSettings();

            var currentGw  = gws.Gameweeks.GetCurrentGameweek();
            var slackUsers = await GetSlackUsers(slackTeam);

            var entries = await _leagueEntriesByGameweek.GetEntriesForGameweek(currentGw.Id, slackTeam.FplbotLeagueId.Value);

            var transfers = await _transfersByGameWeek.GetTransfersByGameweek(currentGw.Id, slackTeam.FplbotLeagueId.Value);

            tauntData = new TauntData(transfers, entries, entryName => SlackHandleHelper.GetSlackHandleOrFallback(slackUsers, entryName));
        }

        if (!string.IsNullOrEmpty(slackTeam.FplBotSlackChannel))
        {
            var eventMessages = GameweekEventsFormatter.FormatNewFixtureEvents(message.FixtureEvents, slackTeam.Subscriptions.ContainsStat, FormattingType.Slack, tauntData);
            var formattedStr  = eventMessages.Select(evtMsg => $"{evtMsg.Title}\n{evtMsg.Details}");
            await _publisher.PublishToWorkspace(slackTeam.TeamId, slackTeam.FplBotSlackChannel, formattedStr.ToArray());
        }
    }
        public void RegularGoalScored()
        {
            var formattedEvents = GameweekEventsFormatter.FormatNewFixtureEvents(CreateGoalEvent(), CreateNoTransfersForGoalScorer());

            foreach (var formatttedEvent in formattedEvents)
            {
                _helper.WriteLine(formatttedEvent);
            }
            Assert.Contains("PlayerFirstName PlayerSecondName scored a goal", formattedEvents.First());
        }
Example #3
0
    public void RegularGoalScored()
    {
        var formattedEvents = GameweekEventsFormatter.FormatNewFixtureEvents(CreateGoalEvent(), subscribes => true, FormattingType.Slack, CreateNoTransfersForGoalScorer());

        foreach (var formatttedEvent in formattedEvents)
        {
            _helper.WriteLine($"{formatttedEvent.Title} {formatttedEvent.Details}");
        }
        Assert.Contains("PlayerWebname scored a goal", formattedEvents.First().Details);
    }
Example #4
0
    public void VAR_Discord()
    {
        FormattingType formattingType  = FormattingType.Discord;
        var            formattedEvents = GameweekEventsFormatter.FormatNewFixtureEvents(CreateGoalEvent(removed: true), subscribes => true, formattingType, CreateNoTransfersForGoalScorer());

        foreach (var formatttedEvent in formattedEvents)
        {
            _helper.WriteLine($"{formatttedEvent.Title} {string.Join("\n", formatttedEvent.Details)}");
        }
        Assert.Contains("~~PlayerWebname scored a goal! Рџй№ИЈ~~ (VAR? ­ЪциРђЇРЎђ№ИЈ)", formattedEvents.First().Details);
    }
        public void ProducesCorrectTauntString(string slackUserRealName, string slackUserHandle, string entryName, string expectedTauntName)
        {
            // Arrange


            // Act
            var formattedEvents = GameweekEventsFormatter.FormatNewFixtureEvents(CreateGoalEvent(), CreateTransferOutForGoalScorerContext(slackUserRealName, slackUserHandle, entryName));

            foreach (var formatttedEvent in formattedEvents)
            {
                _helper.WriteLine(formatttedEvent);
            }
            // Assert
            var formattedEvent = formattedEvents.First();
            var regex          = new Regex("\\{0\\}.*");

            CustomAssert.AnyOfContains(new GoalTaunt().JokePool.Select(x => regex.Replace(x, string.Empty)), formattedEvent);
            Assert.Contains(expectedTauntName, formattedEvent);
        }
Example #6
0
    public void ProducesCorrectTauntString(string slackUserRealName, string slackUserHandle, string entryName, string expectedTauntName)
    {
        // Arrange


        // Act
        var formattedEvents = GameweekEventsFormatter.FormatNewFixtureEvents(CreateGoalEvent(), subscribes => true, FormattingType.Slack, CreateTransferOutForGoalScorerContext(slackUserRealName, slackUserHandle, entryName));

        foreach (var formatttedEvent in formattedEvents)
        {
            _helper.WriteLine($"{formatttedEvent.Title} {formatttedEvent.Details}");
        }
        // Assert
        var formattedEvent = formattedEvents.First();
        var regex          = new Regex("\\{0\\}.*");

        CustomAssert.AnyOfContains(GoalDescriber.GoalJokes.Select(x => regex.Replace(x, string.Empty)), formattedEvent.Details);
        Assert.Contains(expectedTauntName, formattedEvent.Details);
    }
Example #7
0
        public async Task HandleForTeam(FixtureUpdates updates, SlackTeam slackTeam)
        {
            var slackUsers = await GetSlackUsers(slackTeam);

            var entries = await _leagueEntriesByGameweek.GetEntriesForGameweek(updates.CurrentGameweek, (int)slackTeam.FplbotLeagueId);

            var transfers = await _transfersByGameWeek.GetTransfersByGameweek(updates.CurrentGameweek, (int)slackTeam.FplbotLeagueId);

            var context = new GameweekLeagueContext
            {
                Players            = updates.Players,
                Teams              = updates.Teams,
                Users              = slackUsers,
                GameweekEntries    = entries,
                SlackTeam          = slackTeam,
                TransfersForLeague = transfers
            };
            var formattedStr = GameweekEventsFormatter.FormatNewFixtureEvents(updates.Events.ToList(), context);
            await _publisher.PublishToWorkspace(slackTeam.TeamId, slackTeam.FplBotSlackChannel, formattedStr.ToArray());
        }
Example #8
0
    public void Formatting_ShouldNotFormat_ForIrrelevantStats()
    {
        var disordEvents = GameweekEventsFormatter.FormatNewFixtureEvents(CreateIrrelevantEvents(), subscribes => true, FormattingType.Discord);

        foreach (var formatttedEvent in disordEvents)
        {
            _helper.WriteLine($"{formatttedEvent.Title}\n {string.Join("\n", formatttedEvent.Details)}");
        }
        Assert.Single(disordEvents);
        Assert.Contains("scored a goal", disordEvents.First().Details);


        var slackEvents = GameweekEventsFormatter.FormatNewFixtureEvents(CreateIrrelevantEvents(), subscribes => true, FormattingType.Slack);

        foreach (var formatttedEvent in slackEvents)
        {
            _helper.WriteLine($"{formatttedEvent.Title}\n {string.Join("\n", formatttedEvent.Details)}");
        }
        Assert.Single(slackEvents);
        Assert.Contains("scored a goal", slackEvents.First().Details);
    }
Example #9
0
    public async Task Handle(PublishFixtureEventsToGuild message, IMessageHandlerContext context)
    {
        _logger.LogInformation($"Publishing {message.FixtureEvents.Count} fixture events to {message.GuildId} and {message.ChannelId}");
        var sub = await _repo.GetGuildSubscription(message.GuildId, message.ChannelId);

        if (sub != null)
        {
            TauntData tauntData = null;
            if (sub.LeagueId.HasValue && sub.Subscriptions.ContainsSubscriptionFor(EventSubscription.Taunts))
            {
                var gws = await _globalSettingsClient.GetGlobalSettings();

                var currentGw = gws.Gameweeks.GetCurrentGameweek();
                var entries   = await _leagueEntriesByGameweek.GetEntriesForGameweek(currentGw.Id, sub.LeagueId.Value);

                var transfers = await _transfersByGameWeek.GetTransfersByGameweek(currentGw.Id, sub.LeagueId.Value);

                tauntData = new TauntData(transfers, entries);
            }
            var eventMessages = GameweekEventsFormatter.FormatNewFixtureEvents(message.FixtureEvents, sub.Subscriptions.ContainsStat, FormattingType.Discord, tauntData);
            var i             = 0;
            foreach (var eventMsg in eventMessages)
            {
                i += 2;
                var sendOptions = new SendOptions();
                sendOptions.DelayDeliveryWith(TimeSpan.FromSeconds(i));
                sendOptions.RouteToThisEndpoint();

                await context.Send(new PublishRichToGuildChannel(message.GuildId, message.ChannelId, eventMsg.Title, eventMsg.Details), sendOptions);
            }
        }
        else
        {
            _logger.LogInformation($"Guild {message.GuildId} in channel {message.ChannelId} not subbing to fixture events. Not sending");
        }
    }