Пример #1
0
        private async Task <SlackChatHub> GetChatHub(ResponseMessage responseMessage)
        {
            SlackChatHub chatHub = null;

            if (responseMessage.ResponseType == ResponseType.Channel)
            {
                chatHub = new SlackChatHub {
                    Id = responseMessage.Channel
                };
            }
            else if (responseMessage.ResponseType == ResponseType.DirectMessage)
            {
                if (string.IsNullOrEmpty(responseMessage.Channel))
                {
                    chatHub = await GetUserChatHub(responseMessage.UserId);
                }
                else
                {
                    chatHub = new SlackChatHub {
                        Id = responseMessage.Channel
                    };
                }
            }

            return(chatHub);
        }
Пример #2
0
        public async Task <SlackChatHub> GetChatHub(ResponseMessage responseMessage, ISlackConnection connection)
        {
            SlackChatHub chatHub = null;

            if (responseMessage.ChannelType == ChannelType.Channel)
            {
                chatHub = new SlackChatHub {
                    Id = responseMessage.Channel
                };
            }
            else if (responseMessage.ChannelType == ChannelType.DirectMessage)
            {
                if (string.IsNullOrEmpty(responseMessage.Channel))
                {
                    chatHub = await this.GetUserChatHub(responseMessage.UserId, connection);
                }
                else
                {
                    chatHub = new SlackChatHub {
                        Id = responseMessage.Channel
                    };
                }
            }

            return(chatHub);
        }
Пример #3
0
        private async Task should_not_raise_event_given_missing_data(
            Mock <IWebSocketClient> webSocket,
            SlackConnection slackConnection)
        {
            // given
            var connectionInfo = new ConnectionInformation {
                WebSocket = webSocket.Object
            };
            await slackConnection.Initialise(connectionInfo);

            SlackChatHub lastHub = null;

            slackConnection.OnChatHubJoined += hub =>
            {
                lastHub = hub;
                return(Task.CompletedTask);
            };

            var inboundMessage = new ChannelJoinedMessage {
                Channel = null
            };

            // when
            webSocket.Raise(x => x.OnMessage += null, null, inboundMessage);

            // then
            lastHub.ShouldBeNull();
            slackConnection.ConnectedHubs.ShouldBeEmpty();
        }
Пример #4
0
        private async Task <SlackChatHub> GetChatHub(
            IResponseMessage responseMessage,
            ISlackConnection slackConnection)
        {
            SlackChatHub chatHub = null;

            switch (responseMessage.ResponseType)
            {
            case ResponseType.Channel:
                chatHub = new SlackChatHub {
                    Id = responseMessage.Channel
                };
                break;

            case ResponseType.DirectMessage when string.IsNullOrEmpty(responseMessage.Channel):
                chatHub = await GetUserChatHub(
                    responseMessage.UserId,
                    slackConnection);

                break;

            case ResponseType.DirectMessage:
                chatHub = new SlackChatHub {
                    Id = responseMessage.Channel
                };
                break;
            }

            return(chatHub);
        }
Пример #5
0
        private async Task should_raise_event(
            Mock <IWebSocketClient> webSocket,
            SlackConnection slackConnection)
        {
            // given
            var connectionInfo = new ConnectionInformation {
                WebSocket = webSocket.Object
            };
            await slackConnection.Initialise(connectionInfo);

            const string hubId   = "this-is-the-id";
            SlackChatHub lastHub = null;

            slackConnection.OnChatHubJoined += hub =>
            {
                lastHub = hub;
                return(Task.CompletedTask);
            };

            var inboundMessage = new ChannelJoinedMessage
            {
                Channel = new Channel {
                    Id = hubId
                }
            };

            // when
            webSocket.Raise(x => x.OnMessage += null, null, inboundMessage);

            // then
            lastHub.Id.ShouldBe(hubId);
            lastHub.Type.ShouldBe(SlackChatHubType.Channel);
            slackConnection.ConnectedHubs.ContainsKey(hubId).ShouldBeTrue();
            slackConnection.ConnectedHubs[hubId].ShouldBe(lastHub);
        }
Пример #6
0
        public async Task SendMessage(ResponseMessage responseMessage)
        {
            SlackChatHub chatHub = await GetChatHub(responseMessage);

            if (chatHub != null)
            {
                if (responseMessage is TypingIndicatorMessage)
                {
                    await _connection.IndicateTyping(chatHub);
                }
                else
                {
                    var botMessage = new BotMessage
                    {
                        ChatHub     = chatHub,
                        Text        = responseMessage.Text,
                        Attachments = GetAttachments(responseMessage.Attachment)
                    };

                    await _connection.Say(botMessage);
                }
            }
            else
            {
                Console.WriteLine("Unable to find channel for message '{0}'. Message not sent", responseMessage.Text);
            }
        }
Пример #7
0
        public async Task SendMessage(ResponseMessage responseMessage)
        {
            SlackChatHub chatHub = await GetChatHub(responseMessage);

            if (chatHub != null)
            {
                if (responseMessage is TypingIndicatorMessage)
                {
                    _log.Info($"Indicating typing on channel '{chatHub.Name}'");
                    await _connection.IndicateTyping(chatHub);
                }
                else
                {
                    var botMessage = new BotMessage
                    {
                        ChatHub     = chatHub,
                        Text        = responseMessage.Text,
                        Attachments = GetAttachments(responseMessage.Attachments)
                    };

                    string textTrimmed = botMessage.Text.Length > 50 ? botMessage.Text.Substring(0, 50) + "..." : botMessage.Text;
                    _log.Info($"Sending message '{textTrimmed}'");
                    await _connection.Say(botMessage);
                }
            }
            else
            {
                _log.Error($"Unable to find channel for message '{responseMessage.Text}'. Message not sent");
            }
        }
Пример #8
0
        private async Task should_upload_file_from_stream(
            [Frozen] Mock <IConnectionFactory> connectionFactory,
            Mock <IFileClient> fileClient,
            Mock <IWebSocketClient> webSocket,
            SlackConnection slackConnection)
        {
            // given
            const string slackKey = "key-yay";
            const string fileName = "expected-file-name";
            var          chatHub  = new SlackChatHub {
                Id = "channelz-id"
            };
            var stream = new MemoryStream();

            var connectionInfo = new ConnectionInformation {
                WebSocket = webSocket.Object, SlackKey = slackKey
            };
            await slackConnection.Initialise(connectionInfo);

            connectionFactory
            .Setup(x => x.CreateFileClient())
            .Returns(fileClient.Object);

            // when
            await slackConnection.Upload(chatHub, stream, fileName);

            // then
            fileClient
            .Verify(x => x.PostFile(slackKey, chatHub.Id, stream, fileName), Times.Once);
        }
Пример #9
0
        async Task INotifyService.Notify(string eventXml, string tfsIdentityXml)
        {
            if (string.IsNullOrEmpty(eventXml))
            {
                throw new ArgumentException(nameof(eventXml));
            }

            var changedItem = new ChangedItem(eventXml);
            var link        = new SlackAttachment {
                Title     = changedItem.UrlTitle,
                TitleLink = changedItem.Url
            };

            Console.WriteLine(changedItem.Title + " - " + changedItem.UrlTitle);
            var slackHub = new SlackChatHub {
                Id = user
            };
            var policyResult = await Policy
                               .Handle <Exception>()
                               .WaitAndRetryAsync(new[] {
                TimeSpan.FromSeconds(2),
                TimeSpan.FromSeconds(4),
                TimeSpan.FromSeconds(8)
            })
                               .ExecuteAndCaptureAsync(
                () => slackIntegration.SendMessageToChannel(slackHub, changedItem.Title, link));

            if (policyResult.FinalException != null)
            {
                Console.WriteLine($"Could not post to Slack {policyResult.FinalException}");
            }
        }
Пример #10
0
        public async void WriteChannel(string command)
        {
            SlackChatHub channel = connection.ConnectedChannels().Where(x => x.Name == "#general").FirstOrDefault();
            var          message = new BotMessage();

            message.ChatHub = channel;
            message.Text    = command;
            await connection.Say(message);
        }
Пример #11
0
        public async Task IndicateTyping(SlackChatHub chatHub)
        {
            var message = new TypingIndicatorMessage
            {
                Channel = chatHub.Id
            };

            await this._webSocketClient.SendMessage(message);
        }
Пример #12
0
        public async Task should_send_typing_indicator()
        {
            // given
            SlackChatHub channel = SlackConnection.ConnectedChannel(Config.Slack.TestChannel);

            // when
            await SlackConnection.IndicateTyping(channel);

            // then
        }
        public void shouldnt_return_slack_hub_if_hub_id_is_null_or_empty(string hubId)
        {
            // given

            // when
            var          interpreter = new ChatHubInterpreter();
            SlackChatHub chatHub     = interpreter.FromId(hubId);

            // then
            chatHub.ShouldBeNull();
        }
        private void SendWarRoomIncidentChannelMessage(string warRoomChannelName, string messageText)
        {
            var chatHub = new SlackChatHub {
                Id = warRoomChannelName
            };
            var message = new BotMessage {
                ChatHub = chatHub, Text = messageText
            };

            this.SlackConnection.Say(message);
        }
            public void then_should_return_expected_slack_hub()
            {
                var expected = new SlackChatHub
                {
                    Id   = ReturnChannel.Id,
                    Name = ReturnChannel.Name,
                    Type = SlackChatHubType.DM
                };

                Result.ShouldLookLike(expected);
            }
Пример #16
0
        public void then_should_raised_event_with_expected_channel_information()
        {
            var expectedChatHub = new SlackChatHub
            {
                Id   = "channel-id",
                Name = "@test-user",
                Type = SlackChatHubType.DM
            };

            _lastHub.ShouldLookLike(expectedChatHub);
        }
        public SlackChatHub GetChatHub(Im im, string user)
        {
            var dm = new SlackChatHub
            {
                Id   = im.Id,
                Name = "@" + (string.IsNullOrEmpty(user) ? im.User : user),
                Type = SlackChatHubType.DM
            };

            return(dm);
        }
        public SlackChatHub GetChatHub(Channel channel)
        {
            var newChannel = new SlackChatHub
            {
                Id   = channel.Id,
                Name = "#" + channel.Name,
                Type = SlackChatHubType.Channel
            };

            return(newChannel);
        }
Пример #19
0
        public static void Say(ReminderNode nextReminder)
        {
            SlackChatHub H = new SlackChatHub();

            H.ID = GetUserDMChannelID(nextReminder.UserName);
            BotMessage ConnectionMessage = new BotMessage();

            ConnectionMessage.Text    = nextReminder.ReminderContent;
            ConnectionMessage.ChatHub = H;
            Program.memoryBot.Say(ConnectionMessage).Wait();
        }
Пример #20
0
        public static SlackChatHub ToChatHub(this Group group)
        {
            var newGroup = new SlackChatHub
            {
                Id      = group.Id,
                Name    = "#" + group.Name,
                Type    = SlackChatHubType.Group,
                Members = group.Members
            };

            return(newGroup);
        }
Пример #21
0
        public static SlackChatHub ToChatHub(this Channel channel)
        {
            var newChannel = new SlackChatHub
            {
                Id      = channel.Id,
                Name    = "#" + channel.Name,
                Type    = SlackChatHubType.Channel,
                Members = channel.Members
            };

            return(newChannel);
        }
        public void shouldnt_return_slack_hub_if_type_cant_be_detected()
        {
            // given
            const string hubId = "SOMETHING THAT ISN'T CORRECT";

            // when
            var          interpreter = new ChatHubInterpreter();
            SlackChatHub chatHub     = interpreter.FromId(hubId);

            // then
            chatHub.ShouldBeNull();
        }
Пример #23
0
        private async Task <SlackChatHub> GetChatHub(string chatHubid)
        {
            var          infoClient = _connectionFactory.CreateInfoClient();
            SlackChatHub result     = null;

            if (infoClient != null)
            {
                result = await infoClient.GetChatHub(SlackKey, chatHubid);
            }

            return(result);
        }
Пример #24
0
        public async Task SendFile(SlackChatHub chatHub, string filePath)
        {
            if (chatHub != null)
            {
                await _connection.Upload(chatHub, filePath);

                _logger.LogInformation($"Sending file '{filePath}'");
            }
            else
            {
                _logger.LogError($"Unable to find channel for file '{filePath}'. Message not sent");
            }
        }
        public void should_send_typing_indicator()
        {
            // given
            var config = new ConfigReader().GetConfig();

            var          slackConnector = new SlackConnector();
            var          connection     = slackConnector.Connect(config.Slack.ApiToken).Result;
            SlackChatHub channel        = connection.ConnectedChannel(config.Slack.TestChannel);

            // when
            connection.IndicateTyping(channel).Wait();

            // then
        }
Пример #26
0
        public void should_send_typing_indicator()
        {
            // given
            var config = new ConfigReader().GetConfig();

            var          slackConnector = new SlackConnector();
            var          connection     = slackConnector.Connect(config.Slack.ApiToken).Result;
            SlackChatHub channel        = connection.ConnectedChannels().First(x => x.Name.Equals("#-lobby-", StringComparison.InvariantCultureIgnoreCase));

            // when
            connection.IndicateTyping(channel).Wait();

            // then
        }
Пример #27
0
 private async Task RaiseChannelJoined(SlackChatHub chatHub)
 {
     if (OnChannelJoined != null)
     {
         try
         {
             await OnChannelJoined(chatHub);
         }
         catch (Exception)
         {
             // ignored
         }
     }
 }
Пример #28
0
        public void should_join_channel()
        {
            // given
            var config = new ConfigReader().GetConfig();

            var slackConnector = new SlackConnector();
            var connection     = slackConnector.Connect(config.Slack.ApiToken).Result;

            // when
            SlackChatHub result = connection.JoinDirectMessageChannel(config.Slack.TestUserId).Result;

            // then
            Assert.That(result, Is.Not.Null);
        }
Пример #29
0
        private Dictionary <string, SlackChatHub> GetChatHubs(HandshakeResponse handshakeResponse)
        {
            var hubs = new Dictionary <string, SlackChatHub>();

            foreach (Channel channel in handshakeResponse.Channels.Where(x => !x.IsArchived))
            {
                if (channel.IsMember)
                {
                    var newChannel = new SlackChatHub
                    {
                        Id   = channel.Id,
                        Name = "#" + channel.Name,
                        Type = SlackChatHubType.Channel
                    };

                    hubs.Add(channel.Id, newChannel);
                }
            }

            foreach (Group group in handshakeResponse.Groups.Where(x => !x.IsArchived))
            {
                if (group.Members.Any(x => x == handshakeResponse.Self.Id))
                {
                    var newGroup = new SlackChatHub
                    {
                        Id   = group.Id,
                        Name = "#" + group.Name,
                        Type = SlackChatHubType.Group
                    };

                    hubs.Add(group.Id, newGroup);
                }
            }

            foreach (Im im in handshakeResponse.Ims)
            {
                User user = handshakeResponse.Users.FirstOrDefault(x => x.Id == im.User);
                var  dm   = new SlackChatHub
                {
                    Id   = im.Id,
                    Name = "@" + (user == null ? im.User : user.Name),
                    Type = SlackChatHubType.DM
                };

                hubs.Add(im.Id, dm);
            }

            return(hubs);
        }
Пример #30
0
        private async Task RaiseChatHubJoined(SlackChatHub hub)
        {
            var e = this.OnChatHubJoined;

            if (e != null)
            {
                try
                {
                    await e(hub);
                }
                catch
                {
                }
            }
        }