Пример #1
0
 public Task <EventMatchResult> EventMatchesAsync(SlackEventBody slackEventBody)
 {
     return(Task.FromResult(new EventMatchResult
     {
         Success = false
     }));
 }
 public Task IdentifySlackEventAsync(
     SlackEventBody slackEventBody,
     CancellationToken cancellationToken)
 {
     return(slackEventBody switch
     {
         { Event : { Type : "message", Subtype : "channel_join" } }
Пример #3
0
        private async Task HandleEventInBackground(
            SlackEventBody slackEventBody,
            SemaphoreSlim semaphoreSlim,
            CancellationToken cancellationToken)
        {
            await _slackEventIdentifier.IdentifySlackEventAsync(slackEventBody, cancellationToken);

            semaphoreSlim.Release();
        }
 public async Task ExecuteActionAsync(SlackEventBody slackEventBody, EventMatchItem[] eventMatchItems, CancellationToken cancellationToken)
 {
     await _slackClient.ReplyToMessageAsync(
         slackEventBody.TeamId,
         slackEventBody.Event.Channel,
         slackEventBody.Event.ThreadParentMessageIdentifier ?? slackEventBody.Event.MessageIdentifier,
         _value,
         cancellationToken);
 }
        public async Task MatchAndProcessAsync(SlackEventBody slackEventBody, CancellationToken cancellationToken)
        {
            var eventMatchResult = await _eventMatcher.EventMatchesAsync(slackEventBody);

            if (eventMatchResult.Success)
            {
                await _actionExecutor.ExecuteActionAsync(
                    slackEventBody,
                    eventMatchResult.MatchItems,
                    cancellationToken);
            }
        }
Пример #6
0
        public async Task HandleSlackEventAsync(
            SlackEventType slackEventType, SlackEventBody slackEventBody, CancellationToken cancellationToken)
        {
            var eventsProcessors = _eventProcessorProvider.GetEventProcessors(
                slackEventBody.TeamId,
                slackEventBody.Event.Channel,
                slackEventType);

            await Task.WhenAll(
                eventsProcessors.Select(
                    e
                    => e.MatchAndProcessAsync(slackEventBody, cancellationToken)));
        }
Пример #7
0
        public async Task <IActionResult> Receive(
            [FromBody, Required]
            SlackEventBody slackEventBody,
            CancellationToken cancellationToken)
        {
            if (!string.IsNullOrWhiteSpace(slackEventBody.Challenge))
            {
                return(Ok(slackEventBody.Challenge));
            }

            await _slackEventProducer.ReceiveSlackEvent(slackEventBody, cancellationToken);

            return(Ok());
        }
Пример #8
0
        public async Task MessageOnChannel_IsRoutedCorrectly(string inputText, string target, bool expected)
        {
            var slackBody = new SlackEventBody
            {
                Event = new SlackEvent
                {
                    Text = inputText
                }
            };

            var eventMatcher = new TextContainsEventMatcher(target);

            var result = await eventMatcher.EventMatchesAsync(slackBody);

            Assert.Equal(expected, result.Success);
        }
        public Task <EventMatchResult> EventMatchesAsync(SlackEventBody slackEventBody)
        {
            var result = new EventMatchResult
            {
                Success = _target != null &&
                          (slackEventBody?.Event?.Text?.Contains(_target, StringComparison.Ordinal) ?? false)
            };

            if (result.Success)
            {
                result.MatchItems = new[]
                {
                    new EventMatchItem(EventMatchItemType.Text, slackEventBody?.Event?.Text)
                };
            }

            return(Task.FromResult(result));
        }
Пример #10
0
 public Task ReceiveSlackEvent(
     SlackEventBody slackEvent,
     CancellationToken cancellationToken)
 {
     return(_eventStorage.StoreEventAsync(slackEvent, cancellationToken));
 }
 public Task ExecuteActionAsync(SlackEventBody slackEventBody, EventMatchItem[] eventMatchItems, CancellationToken cancellationToken)
 {
     return(Task.CompletedTask);
 }
Пример #12
0
 public async Task StoreEventAsync(
     SlackEventBody slackEvent,
     CancellationToken cancellationToken)
 {
     _slackConcurrentEvents[slackEvent.EventId] = slackEvent;
 }