Esempio n. 1
0
        private async Task TestSlackBody(string fileName, string contentType)
        {
            var callback     = false;
            var slackApi     = GetSlackApiMock();
            var slackAdapter = new SlackAdapter(slackApi.Object, _adapterOptions);
            var httpRequest  = GetHttpRequestMock(fileName, contentType);
            var httpResponse = GetHttpResponseMock();

            httpResponse.Setup(_ => _.Body.WriteAsync(It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .Callback((byte[] data, int offset, int length, CancellationToken token) =>
            {
                if (length > 0)
                {
                    var actual = Encoding.UTF8.GetString(data);
                }
            });

            var bot = new Mock <IBot>();

            bot.Setup(x => x.OnTurnAsync(It.IsAny <TurnContext>(), It.IsAny <CancellationToken>())).Callback(() =>
            {
                callback = true;
            });

            await slackAdapter.ProcessAsync(httpRequest.Object, httpResponse.Object, bot.Object, default);

            Assert.True(callback);
        }
        public static IApplicationBuilder UseSlack(this IApplicationBuilder applicationBuilder)
        {
            var options = applicationBuilder.ApplicationServices.GetRequiredService <IOptions <SlackBotOptions> >().Value;

            if (!options.IsValid)
            {
                throw new ArgumentException(
                          "Passed options are invalid."
                          );
            }

            var adapter = new SlackAdapter(options.SlackOptions);

            foreach (var middleware in options.Middleware)
            {
                adapter.Use(middleware);
            }

            var paths = options.Paths;

            if (!paths.BasePath.EndsWith("/"))
            {
                paths.BasePath += "/";
            }

            applicationBuilder.Map(
                $"{paths.BasePath}{paths.RequestPath}",
                botActivitiesAppBuilder => botActivitiesAppBuilder.Run(new SlackRequestHandler(adapter, options).HandleAsync));

            return(applicationBuilder);
        }
Esempio n. 3
0
        public async Task ProcessAsyncShouldFailWithSignatureMismatch()
        {
            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));
            slackApi.Setup(x => x.VerifySignature(It.IsAny <HttpRequest>(), It.IsAny <string>())).Returns(false);

            var slackAdapter = new SlackAdapter(slackApi.Object);

            var payload = File.ReadAllText(Directory.GetCurrentDirectory() + @"/Files/MessageBody.json");
            var stream  = new MemoryStream(Encoding.UTF8.GetBytes(payload.ToString()));

            var httpRequest = new Mock <HttpRequest>();

            httpRequest.SetupGet(req => req.Body).Returns(stream);

            var httpResponse = new Mock <HttpResponse>();

            httpResponse.SetupAllProperties();

            var mockStream = new Mock <Stream>();

            httpResponse.SetupGet(req => req.Body).Returns(mockStream.Object);

            httpResponse.Setup(_ => _.Body.WriteAsync(It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .Callback((byte[] data, int offset, int length, CancellationToken token) =>
            {
                if (length > 0)
                {
                    var actual = Encoding.UTF8.GetString(data);
                }
            });

            await Assert.ThrowsAsync <Exception>(async() => { await slackAdapter.ProcessAsync(httpRequest.Object, httpResponse.Object, new Mock <IBot>().Object, default); });
        }
Esempio n. 4
0
        public async Task UpdateActivityAsyncShouldSucceed()
        {
            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));
            slackApi.Setup(x => x.UpdateAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>(), null, It.IsAny <bool>(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(new UpdateResponse {
                ok = true
            }));

            var slackAdapter = new SlackAdapter(slackApi.Object);

            var activity = new Mock <Activity>().SetupAllProperties();

            activity.Object.Id           = "MockActivityId";
            activity.Object.Conversation = new ConversationAccount
            {
                Id = "MockConversationId",
            };
            activity.Object.Text = "Hello, Bot!";

            ResourceResponse response;

            using (var turnContext = new TurnContext(slackAdapter, activity.Object))
            {
                response = await slackAdapter.UpdateActivityAsync(turnContext, activity.Object, default);
            }

            Assert.Equal(activity.Object.Id, response.Id);
        }
Esempio n. 5
0
        public async Task ProcessAsyncShouldSucceedWithUnknownEventType()
        {
            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));
            slackApi.Setup(x => x.VerifySignature(It.IsAny <HttpRequest>(), It.IsAny <string>())).Returns(true);

            var slackAdapter = new SlackAdapter(_testOptions, slackClient: slackApi.Object);

            var payload = File.ReadAllText(Directory.GetCurrentDirectory() + @"/Files/UnknownEvent.json");
            var stream  = new MemoryStream(Encoding.UTF8.GetBytes(payload.ToString()));

            var httpRequest = new Mock <HttpRequest>();

            httpRequest.SetupGet(req => req.Body).Returns(stream);

            var httpRequestHeader = new Mock <IHeaderDictionary>();

            httpRequestHeader.SetupGet(x => x["Content-Type"]).Returns("application/json");
            httpRequest.SetupGet(req => req.Headers).Returns(httpRequestHeader.Object);

            var httpResponse = new Mock <HttpResponse>();

            httpResponse.SetupAllProperties();
            var mockStream = new Mock <Stream>();

            httpResponse.SetupGet(req => req.Body).Returns(mockStream.Object);

            await slackAdapter.ProcessAsync(httpRequest.Object, httpResponse.Object, new Mock <IBot>().Object, default);

            Assert.Equal(httpResponse.Object.StatusCode, (int)HttpStatusCode.OK);
        }
Esempio n. 6
0
        public async Task UpdateActivityAsyncShouldFailWithResponseError()
        {
            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));
            slackApi.Setup(x => x.UpdateAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>(), null, It.IsAny <bool>(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(new UpdateResponse {
                ok = false
            }));

            var slackAdapter = new SlackAdapter(slackApi.Object);

            var activity = new Mock <Activity>().SetupAllProperties();

            activity.Object.Id           = "MockActivityId";
            activity.Object.Conversation = new ConversationAccount
            {
                Id = "MockConversationId",
            };
            activity.Object.Text = "Hello, Bot!";

            using (var turnContext = new TurnContext(slackAdapter, activity.Object))
            {
                await Assert.ThrowsAsync <Exception>(async() =>
                {
                    await slackAdapter.UpdateActivityAsync(turnContext, activity.Object, default);
                });
            }
        }
Esempio n. 7
0
        public async Task DeleteActivityAsyncShouldSucceed()
        {
            var deletedMessages = 0;

            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));
            slackApi.Setup(x => x.DeleteMessageAsync(It.IsAny <string>(), It.IsAny <DateTime>(), It.IsAny <CancellationToken>())).Callback(() => { deletedMessages++; });

            var slackAdapter = new SlackAdapter(slackApi.Object);

            var activity = new Mock <Activity>();

            activity.Object.Timestamp = new DateTimeOffset();

            using (var context = new TurnContext(slackAdapter, activity.Object))
            {
                var reference = new ConversationReference
                {
                    ChannelId = "channelId",
                };

                await slackAdapter.DeleteActivityAsync(context, reference, default);
            }

            Assert.Equal(1, deletedMessages);
        }
Esempio n. 8
0
        public async Task SendActivitiesAsyncShouldSucceed()
        {
            var slackResponse = new SlackResponse
            {
                Ok = true,
                Ts = "mockedTS",
            };

            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));
            slackApi.Setup(x => x.PostMessageAsync(It.IsAny <NewSlackMessage>(), It.IsAny <CancellationToken>())).Returns(Task.FromResult(slackResponse));

            var slackAdapter = new SlackAdapter(slackApi.Object);

            var activity = new Activity
            {
                Type         = ActivityTypes.Message,
                Text         = "text",
                Conversation = new ConversationAccount()
                {
                    Id = "testConversationId",
                },
            };

            Activity[] activities = { activity };

            var turnContext = new TurnContext(slackAdapter, activity);

            var responses = await slackAdapter.SendActivitiesAsync(turnContext, activities, default);

            Assert.Equal(slackResponse.Ts, responses[0].Id);
        }
Esempio n. 9
0
        public async Task ProcessAsyncShouldFailOnVerificationTokenMismatch()
        {
            _testOptions.SlackVerificationToken = "testToken";

            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));
            slackApi.Setup(x => x.VerifySignature(It.IsAny <HttpRequest>(), It.IsAny <string>())).Returns(true);

            var slackAdapter = new SlackAdapter(slackApi.Object);

            var payload = File.ReadAllText(Directory.GetCurrentDirectory() + @"/Files/MessageBody.json");
            var stream  = new MemoryStream(Encoding.UTF8.GetBytes(payload.ToString()));

            var httpRequest = new Mock <HttpRequest>();

            httpRequest.SetupGet(req => req.Body).Returns(stream);

            var httpResponse = new Mock <HttpResponse>();

            httpResponse.SetupAllProperties();

            var mockStream = new Mock <Stream>();

            httpResponse.SetupGet(req => req.Body).Returns(mockStream.Object);

            await Assert.ThrowsAsync <Exception>(async() => { await slackAdapter.ProcessAsync(httpRequest.Object, httpResponse.Object, new Mock <IBot>().Object, default); });
        }
 public SlackRequestHandler(
     SlackAdapter adapter,
     SlackBotOptions options
     )
 {
     this.adapter      = adapter;
     this.jsonSettings = Default.JsonSettings(Default.SlackTypeResolver(Default.AssembliesContainingSlackTypes));
     this.options      = options;
 }
Esempio n. 11
0
        public async Task ContinueConversationAsyncShouldFailWithNullBot()
        {
            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));

            var slackAdapter = new SlackAdapter(slackApi.Object);

            await Assert.ThrowsAsync <ArgumentNullException>(async() => { await slackAdapter.ContinueConversationAsync(new ConversationReference(), null, default); });
        }
Esempio n. 12
0
        public async Task ProcessAsyncShouldFailOnVerificationTokenMismatch()
        {
            _testOptions.SlackVerificationToken = "testToken";

            var slackApi     = GetSlackApiMock();
            var slackAdapter = new SlackAdapter(slackApi.Object, _adapterOptions);
            var httpRequest  = GetHttpRequestMock("MessageBody.json", "application/json");
            var httpResponse = GetHttpResponseMock();

            await Assert.ThrowsAsync <AuthenticationException>(async() => { await slackAdapter.ProcessAsync(httpRequest.Object, httpResponse.Object, new Mock <IBot>().Object, default); });
        }
Esempio n. 13
0
        public async Task ProcessAsyncShouldSucceedWithUnknownEventType()
        {
            var slackApi     = GetSlackApiMock();
            var slackAdapter = new SlackAdapter(slackApi.Object, _adapterOptions);
            var httpRequest  = GetHttpRequestMock("UnknownEvent.json", "application/json");
            var httpResponse = GetHttpResponseMock();

            await slackAdapter.ProcessAsync(httpRequest.Object, httpResponse.Object, new Mock <IBot>().Object, default);

            Assert.Equal(httpResponse.Object.StatusCode, (int)HttpStatusCode.OK);
        }
Esempio n. 14
0
        public async Task ProcessAsyncShouldSucceedOnInteractiveMessage()
        {
            var callback = false;

            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));
            slackApi.Setup(x => x.VerifySignature(It.IsAny <HttpRequest>(), It.IsAny <string>())).Returns(true);

            var slackAdapter = new SlackAdapter(_testOptions, slackClient: slackApi.Object);

            var payload = File.ReadAllText(Directory.GetCurrentDirectory() + @"/Files/InteractiveMessageBody.txt");
            var stream  = new MemoryStream(Encoding.UTF8.GetBytes(payload.ToString()));

            var httpRequest = new Mock <HttpRequest>();

            httpRequest.SetupGet(req => req.Body).Returns(stream);

            var httpRequestHeader = new Mock <IHeaderDictionary>();

            httpRequestHeader.SetupGet(x => x["Content-Type"]).Returns("application/x-www-form-urlencoded");
            httpRequest.SetupGet(req => req.Headers).Returns(httpRequestHeader.Object);

            var httpResponse = new Mock <HttpResponse>();

            httpResponse.SetupAllProperties();

            var mockStream = new Mock <Stream>();

            httpResponse.SetupGet(req => req.Body).Returns(mockStream.Object);

            httpResponse.Setup(_ => _.Body.WriteAsync(It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .Callback((byte[] data, int offset, int length, CancellationToken token) =>
            {
                if (length > 0)
                {
                    var actual = Encoding.UTF8.GetString(data);
                }
            });

            var bot = new Mock <IBot>();

            bot.Setup(x => x.OnTurnAsync(It.IsAny <TurnContext>(), It.IsAny <CancellationToken>())).Callback(() =>
            {
                callback = true;
            });

            await slackAdapter.ProcessAsync(httpRequest.Object, httpResponse.Object, bot.Object, default);

            Assert.True(callback);
        }
Esempio n. 15
0
        public async Task ContinueConversationAsyncShouldFailWithNullReference()
        {
            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));

            var slackAdapter = new SlackAdapter(slackApi.Object, _adapterOptions);

            Task BotsLogic(ITurnContext turnContext, CancellationToken cancellationToken)
            {
                return(Task.CompletedTask);
            }

            await Assert.ThrowsAsync <ArgumentNullException>(async() => { await slackAdapter.ContinueConversationAsync(null, BotsLogic, default); });
        }
Esempio n. 16
0
        public async void ProcessAsyncShouldFailWithNullHttpResponse()
        {
            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));

            var slackAdapter = new SlackAdapter(slackApi.Object);

            var httpRequest = new Mock <HttpRequest>();

            await Assert.ThrowsAsync <ArgumentNullException>(async() =>
            {
                await slackAdapter.ProcessAsync(httpRequest.Object, null, new Mock <IBot>().Object, default);
            });
        }
Esempio n. 17
0
        public async Task UpdateActivityAsyncShouldFailWithNullContext()
        {
            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));

            var slackAdapter = new SlackAdapter(slackApi.Object);

            var activity = new Activity();

            await Assert.ThrowsAsync <ArgumentNullException>(async() =>
            {
                await slackAdapter.UpdateActivityAsync(null, activity, default);
            });
        }
Esempio n. 18
0
        public static bool TestSuccess(SlackAdapter sa)
        {
            bool ret = false;

            try
            {
                string   answer   = Accessor.JsonGet(sa, URL);
                Response response = Accessor.Deserialize <Response>(answer);
                ret = response.Ok;
            }
            catch
            {
            }

            return(ret);
        }
Esempio n. 19
0
        public async Task DeleteActivityAsyncShouldFailWithNullReference()
        {
            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));

            var slackAdapter = new SlackAdapter(slackApi.Object);

            using (var context = new TurnContext(slackAdapter, new Activity()))
            {
                await Assert.ThrowsAsync <ArgumentNullException>(async() =>
                {
                    await slackAdapter.DeleteActivityAsync(context, null, default);
                });
            }
        }
Esempio n. 20
0
        static void Main(string[] args)
        {
            var options = new SlackOptions
            {
                BotUserToken = MySlackBotToken
            };

            var adapter = new SlackAdapter(options)
                          .Use(new SlackMessageTypeMiddleware());

            var myBot = new MyBot();

            adapter.ProcessActivityBySocketAsync(async(turnContext, cancellationToken) =>
            {
                await myBot.OnTurnAsync(turnContext, cancellationToken);
            }).Wait();
        }
Esempio n. 21
0
        public async Task ProcessAsyncShouldSucceedOnUrlVerification()
        {
            string actual = null;

            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));
            slackApi.Setup(x => x.VerifySignature(It.IsAny <HttpRequest>(), It.IsAny <string>())).Returns(true);

            var slackAdapter = new SlackAdapter(_testOptions, slackClient: slackApi.Object);

            var payload = File.ReadAllText(Directory.GetCurrentDirectory() + @"/Files/URLVerificationBody.json");
            var stream  = new MemoryStream(Encoding.UTF8.GetBytes(payload.ToString()));

            var deserializedPayload = JsonConvert.DeserializeObject <UrlVerificationEvent>(payload);

            var httpRequest = new Mock <HttpRequest>();

            httpRequest.SetupGet(req => req.Body).Returns(stream);

            var httpRequestHeader = new Mock <IHeaderDictionary>();

            httpRequestHeader.SetupGet(x => x["Content-Type"]).Returns("application/json");
            httpRequest.SetupGet(req => req.Headers).Returns(httpRequestHeader.Object);

            var httpResponse = new Mock <HttpResponse>();
            var mockStream   = new Mock <Stream>();

            httpResponse.SetupGet(req => req.Body).Returns(mockStream.Object);

            httpResponse.Setup(_ => _.Body.WriteAsync(It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <CancellationToken>()))
            .Callback((byte[] data, int offset, int length, CancellationToken token) =>
            {
                if (length > 0)
                {
                    actual = Encoding.UTF8.GetString(data);
                }
            });

            await slackAdapter.ProcessAsync(httpRequest.Object, httpResponse.Object, new Mock <IBot>().Object, default);

            Assert.Equal(actual, deserializedPayload.Challenge);
        }
Esempio n. 22
0
        public static Authorisation Get(SlackAdapter sa)
        {
            Authorisation auth = null;

            try
            {
                string   answer   = Accessor.JsonPostFormData(sa, URL);
                Response response = Accessor.Deserialize <Response>(answer);
                if (response.Ok)
                {
                    auth = Accessor.Deserialize <Authorisation>(answer);
                }
            }
            catch
            {
            }

            return(auth);
        }
        public static PermissionInfo GetInfo(SlackAdapter sa)
        {
            PermissionInfo pi = null;

            try
            {
                string   answer   = Accessor.JsonGet(sa, URL);
                Response response = Accessor.Deserialize <Response>(answer);
                if (response.Ok)
                {
                    pi = Accessor.Deserialize <PermissionInfo>(answer);
                }
            }
            catch
            {
            }

            return(pi);
        }
Esempio n. 24
0
        public async Task ContinueConversationAsyncShouldSucceed()
        {
            var callbackInvoked = false;

            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));

            var slackAdapter = new SlackAdapter(slackApi.Object);

            Task BotsLogic(ITurnContext turnContext, CancellationToken cancellationToken)
            {
                callbackInvoked = true;
                return(Task.CompletedTask);
            }

            await slackAdapter.ContinueConversationAsync(new ConversationReference(), BotsLogic, default);

            Assert.True(callbackInvoked);
        }
Esempio n. 25
0
        public async Task UpdateActivityAsyncShouldFailWithNullActivityConversation()
        {
            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));

            var slackAdapter = new SlackAdapter(slackApi.Object);

            var activity = new Activity
            {
                Id           = "testId",
                Conversation = null,
            };

            using (var turnContext = new TurnContext(slackAdapter, activity))
            {
                await Assert.ThrowsAsync <ArgumentException>(async() =>
                {
                    await slackAdapter.UpdateActivityAsync(turnContext, activity, default);
                });
            }
        }
Esempio n. 26
0
        public async Task SendActivitiesAsyncShouldThrowExceptionWithNullContext()
        {
            var slackApi = new Mock <SlackClientWrapper>(_testOptions);

            slackApi.Setup(x => x.TestAuthAsync(It.IsAny <CancellationToken>())).Returns(Task.FromResult("mockedUserId"));

            var slackAdapter = new SlackAdapter(slackApi.Object);

            var activity = new Activity
            {
                Id           = "testId",
                Type         = ActivityTypes.Message,
                Text         = "text",
                Conversation = new ConversationAccount()
                {
                    Id = "testConversationId",
                },
            };

            Activity[] activities = { activity };

            await Assert.ThrowsAsync <ArgumentNullException>(async() => { await slackAdapter.SendActivitiesAsync(null, activities, default); });
        }
Esempio n. 27
0
        public static void Main(string[] args)
        {
            if ("events".Equals(Mode) || "events".Equals(args[0]))
            {
                WebHost.CreateDefaultBuilder(args)
                .UseStartup <Startup>().Build().Run();
            }
            else if ("rtm".Equals(Mode) || "rtm".Equals(args[0]))
            {
                var adapter = new SlackAdapter(Program.Options)
                              .Use(new SlackMessageTypeMiddleware());

                var bot = new ExPonyakBot();

                adapter.ProcessActivityBySocketAsync(async(turnContext, cancellationToken) =>
                {
                    await bot.OnTurnAsync(turnContext, cancellationToken);
                }).Wait();
            }
            else
            {
                throw new ArgumentException();
            }
        }
Esempio n. 28
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SlackController"/> class.
 /// </summary>
 /// <param name="adapter">The Slack adapter middleware.</param>
 /// <param name="bot">The bot that can process the incoming messages/activities.</param>
 public SlackController(SlackAdapter adapter, IBot bot)
 {
     this.adapter = adapter;
     this.bot     = bot;
 }
Esempio n. 29
0
        public void Run(string[] args)
        {
            var resetEvent  = new ManualResetEvent(false);
            var tokenSource = new CancellationTokenSource();

            var thread = new Thread(() =>
            {
                try
                {
                    IAdapter adapter;

                    switch (args[0])
                    {
                    case "gitter":
                        adapter = new GitterAdapter(args[1]);
                        break;

                    case "slack":
                        adapter = new SlackAdapter(args[1]);
                        break;

                    default:
                        throw new NotImplementedException("Unknown NuBot adapter.");
                    }

                    new RobotFactory()
                    .AddPart <Echo>()
                    .AddPart <EchoWebHook>()
                    .AddPart <HelloGoodbye>()
                    .AddPart <IllBeBack>()
                    .UseAdapter(adapter)
                    .UseHttpServer(1337)
                    .RunAsync(tokenSource.Token)
                    .GetAwaiter()
                    .GetResult();
                }
                catch (OperationCanceledException)
                {
                }
                catch (Exception exception)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine(exception);
                    Console.ResetColor();
                }
                finally
                {
                    resetEvent.Set();
                }
            });

            thread.Start();

            while (true)
            {
                var key = Console.ReadKey(true);

                if ((key.Modifiers & ConsoleModifiers.Control) == ConsoleModifiers.Control && key.Key == ConsoleKey.C)
                {
                    break;
                }
            }

            tokenSource.Cancel();
            resetEvent.WaitOne();
            thread.Join();

            Console.WriteLine("NuBot has stopped.");
            Console.ReadKey();
        }
Esempio n. 30
0
 public SlackController(SlackAdapter adapter, IBot bot)
 {
     _adapter = adapter;
     _bot     = bot;
 }