Inheritance: ISlackConnector
Exemplo n.º 1
0
        /// <summary>
        /// Connects to slack and starts listening for the phrase specified in the settings.
        /// </summary>
        public async Task Run()
        {
            var connector = new SlackConnector.SlackConnector();

            try
            {
                connection = await connector.Connect(settings.AccessToken);
            }
            catch (CommunicationException)
            {
                throw new ShushBotException("Unable to connect to slack workspace using the provided access token. Ensure that it is correct.");
            }

            Console.WriteLine("Connected to slack.");

            var channels = await connection.GetChannels();

            var matchingChannel = channels.FirstOrDefault(x => x.Name == settings.Channel);

            channel = matchingChannel ?? throw new ShushBotException($"Unable to find a channel with the name {settings.Channel}");

            connection.OnMessageReceived += MessageReceived;

            Console.WriteLine($"Connected to channel {settings.Channel}");
            Console.WriteLine($"Listening to messages. If a user PMs me '{settings.Keyword}', I will respond with:\n{settings.Phrase}");
            if (settings.UseImages)
            {
                Console.WriteLine("I will also display an image provided in images.json.");
            }
            while (true)
            {
            }
        }
Exemplo n.º 2
0
        public async Task <ISlackConnection> GetConnection()
        {
            var connector  = new SlackConnector.SlackConnector();
            var connection = await connector.Connect(this.configuration.SlackApiKey);

            return(connection);
        }
Exemplo n.º 3
0
 public async void TestE2E()
 {
     var slackConnector = new SlackConnector.SlackConnector();
     var restClient     = new RestClient();
     var envReader      = new EnvironmentVariableReader();
     var secretHandler  = new SecretHandler();
     var app            = new App(restClient, envReader, slackConnector, secretHandler);
     await app.Run();
 }
Exemplo n.º 4
0
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            var connector        = new SlackConnector.SlackConnector();
            var slackAccessToken = _attribute.SlackAccessToken;

            _connection = await connector.Connect(slackAccessToken);

            _connection.OnMessageReceived += ConnectionOnOnMessageReceived;
            _connection.OnDisconnect      += ConnectionOnOnDisconnect;
        }
Exemplo n.º 5
0
        public async Task <bool> Connect()
        {
            _log.Debug("Connecting to Slack.");
            var connector = new SlackConnector.SlackConnector();

            _connection = await connector.Connect(_config.Token);

            _connection.OnMessageReceived += ReceiveMessage;
            _connection.OnDisconnect      += HandleDisconnect;
            return(true);
        }
Exemplo n.º 6
0
        public SlackIntegration(ILogger logger, IConfig config)
        {
            _logger = logger;
            _config = config;
            //Config = new ConfigReader().GetConfig();

            var slackConnector = new SlackConnector.SlackConnector();

            SlackConnection = Task.Run(() => slackConnector.Connect(_config.Slack.ApiToken))
                              .GetAwaiter()
                              .GetResult();
        }
        public void Start()
        {
            this.mainIncidentChannel    = this.configReader.GetConfigEntry <string>("incident:mainChannel");
            this.PostmortemTemplateLink = this.configReader.GetConfigEntry <string>("incident:postmortemTemplateLink");

            this.WarRooms = this.configReader.GetConfigEntry <string>("incident:warRooms").Split(',');

            var connector = new SlackConnector.SlackConnector();

            this.SlackConnection = connector.Connect(this.configReader.SlackApiKey).Result;

            this.log.Info("(IncidentModule) started up.");
        }
        public void should_connect_and_stuff()
        {
            // given
            var slackConnector = new SlackConnector.SlackConnector();

            // when
            var connection = slackConnector.Connect(_config.Slack.ApiToken).Result;
            connection.OnDisconnect += SlackConnector_OnDisconnect;
            connection.OnMessageReceived += SlackConnectorOnOnMessageReceived;

            // then
            Assert.That(connection.IsConnected, Is.True);
        }
Exemplo n.º 9
0
        public void should_connect_and_stuff()
        {
            // given
            var slackConnector = new SlackConnector.SlackConnector();

            // when
            var connection = slackConnector.Connect(_config.Slack.ApiToken).Result;

            connection.OnDisconnect      += SlackConnector_OnDisconnect;
            connection.OnMessageReceived += SlackConnectorOnOnMessageReceived;

            // then
            Assert.That(connection.IsConnected, Is.True);
        }
Exemplo n.º 10
0
        public void WaitingForConnection()
        {
            Receive <ISlackConnection>(connection =>
            {
                Become(() => Connected(connection));

                Stash.UnstashAll();
            });

            ReceiveAny(_ => Stash.Stash());

            var slackConfiguration = new Slack();
            var connector          = new SlackConnector.SlackConnector();

            connector.Connect(slackConfiguration.Token).PipeTo(Self);
        }
Exemplo n.º 11
0
        public async Task Connect()
        {
            JObject config   = _configReader.GetConfig();
            string  slackKey = config["slack"].Value <string>("apiToken");

            var connector = new SlackConnector.SlackConnector();

            _connection = await connector.Connect(slackKey);

            _connection.OnMessageReceived += MessageReceived;
            _connection.OnDisconnect      += OnDisconnect;

            Console.WriteLine("Connected!");
            Console.WriteLine($"Bots Name: {_connection.Self.Name}");
            Console.WriteLine($"Team Name: {_connection.Team.Name}");
        }
Exemplo n.º 12
0
        private void PublishMessageSync(ISlackMessage slackMessage)
        {
            var slackConnector = new SlackConnector.SlackConnector();
            var connection     = slackConnector.Connect(slackMessage.Token).Result;
            var message        = new BotMessage
            {
                Text    = slackMessage.Text,
                ChatHub =
                    connection.ConnectedChannels()
                    .First(
                        x =>
                        x.Name.Equals("#" + slackMessage.Channel.Trim('#'),
                                      StringComparison.InvariantCultureIgnoreCase))
            };

            connection.Say(message).Wait();
        }
Exemplo n.º 13
0
        public async Task ConnectAsync()
        {
            string slackKey = _options.ApiKey;

            var connector = new SlackConnector.SlackConnector();

            _connection = await connector.Connect(slackKey);

            _connection.OnMessageReceived += MessageReceived;
            _connection.OnDisconnect      += OnDisconnect;
            _connection.OnReconnecting    += OnReconnecting;
            _connection.OnReconnect       += OnReconnect;

            _logger.LogInformation("Connected!");
            _logger.LogInformation($"Bots Name: {_connection.Self.Name}");
            _logger.LogInformation($"Team Name: {_connection.Team.Name}");
        }
Exemplo n.º 14
0
        public void should_say_something_on_channel()
        {
            // given

            var slackConnector = new SlackConnector.SlackConnector();
            var connection     = slackConnector.Connect(_config.Slack.ApiToken).Result;
            var message        = new BotMessage
            {
                Text    = "Test text from SlackConnectorTests :)",
                ChatHub = connection.ConnectedChannels().First(x => x.Name.Equals("#general", StringComparison.InvariantCultureIgnoreCase))
            };

            // when
            connection.Say(message).Wait();

            // then
        }
        private void PublishMessageSync(ISlackMessage slackMessage)
        {
            var slackConnector = new SlackConnector.SlackConnector();
            var connection = slackConnector.Connect(slackMessage.Token).Result;
            var message = new BotMessage
            {
                Text = slackMessage.Text,
                ChatHub =
                    connection.ConnectedChannels()
                        .First(
                            x =>
                                x.Name.Equals("#" + slackMessage.Channel.Trim('#'),
                                    StringComparison.InvariantCultureIgnoreCase))
            };

            connection.Say(message).Wait();
        }
        public void should_say_something_on_channel()
        {
            // given

            var slackConnector = new SlackConnector.SlackConnector();
            var connection = slackConnector.Connect(_config.Slack.ApiToken).Result;
            var message = new BotMessage
            {
                Text = "Test text from SlackConnectorTests :)",
                ChatHub = connection.ConnectedChannels().First(x => x.Name.Equals("#general", StringComparison.InvariantCultureIgnoreCase))
            };

            // when
            connection.Say(message).Wait();

            // then
        }
Exemplo n.º 17
0
        public SlackBot(ISlackBotCommand[] commands, ISlackConfiguration configuration, IShutdown shutdown)
        {
            if (!configuration.Enabled)
            {
                return;
            }

            CancellationToken token = shutdown.Token;

            Worker = Task.Run(() =>
            {
                SlackConnector.SlackConnector connector = new SlackConnector.SlackConnector();

                ISlackConnection client = connector.Connect(configuration.BotUserToken).Result;

                client.OnMessageReceived += message =>
                {
                    var context = new SlackBotCommandContext(client.Say, message);

                    var tasks = new List <Task>();

                    Parallel.ForEach(commands, command =>
                    {
                        Task task;
                        if (command.TryHandle(context, token, out task))
                        {
                            tasks.Add(task);
                        }
                    });

                    // TODO: Implement various messages - randomly selected
                    //  - also implement a "/help" command type
                    if (tasks.Count == 0)
                    {
                        return(context.WriteText("Hey, you're cool, but I don't understand what you're trying to do."));
                    }

                    return(Task.WhenAll(tasks));
                };

                token.WaitHandle.WaitOne();

                client.Disconnect();
            }, token);
        }
Exemplo n.º 18
0
        public async Task Connect()
        {
            string slackKey = _configReader.SlackApiKey();

            var connector = new SlackConnector.SlackConnector();
            _connection = await connector.Connect(slackKey);
            _connection.OnMessageReceived += MessageReceived;
            _connection.OnDisconnect += OnDisconnect;

            _log.Info("Connected!");
            _log.Info($"Bots Name: {_connection.Self.Name}");
            _log.Info($"Team Name: {_connection.Team.Name}");

            _container.GetPlugin<StatsPlugin>()?.RecordStat("Connected:Since", DateTime.Now.ToString("G"));
            _container.GetPlugin<StatsPlugin>()?.RecordStat("Response:Average", _averageResponse);

            StartPlugins();
        }
Exemplo n.º 19
0
        public async Task Connect()
        {
            string slackKey = _configReader.SlackApiKey();

            var connector = new SlackConnector.SlackConnector();

            _connection = await connector.Connect(slackKey);

            _connection.OnMessageReceived += MessageReceived;
            _connection.OnDisconnect      += OnDisconnect;

            _log.Info("Connected!");
            _log.Info($"Bots Name: {_connection.Self.Name}");
            _log.Info($"Team Name: {_connection.Team.Name}");

            _container.GetPlugin <StatsPlugin>()?.RecordStat("Connected:Since", DateTime.Now.ToString("G"));
            _container.GetPlugin <StatsPlugin>()?.RecordStat("Response:Average", _averageResponse);

            StartPlugins();
        }
Exemplo n.º 20
0
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            var connector         = new SlackConnector.SlackConnector();
            ISlackConnection conn = await connector.Connect(_config.SlackToken);

            conn.OnMessageReceived += message => Task.Run(async() => {
                using (var scope = _serviceProvider.CreateScope()) {
                    var botRequest = new BotRequest {
                        Messenger       = Messenger.Slack,
                        ChannelId       = message.ChatHub.Id,
                        UserId          = message.User.Id,
                        IsDirectMessage = message.ChatHub.Type == SlackConnector.Models.SlackChatHubType.DM,
                        Text            = message.Text,
                    };

                    MessageHandler messageHandler = scope.ServiceProvider.GetService <MessageHandler>();
                    await messageHandler.HandleRequestAsync(botRequest);
                }
            }, cancellationToken);
        }
Exemplo n.º 21
0
        public void PublishMessage(ISlackMessage slackMessage)
        {
            if (string.IsNullOrWhiteSpace(slackMessage.Token) 
                || string.IsNullOrWhiteSpace(slackMessage.Channel)
                || string.IsNullOrWhiteSpace(slackMessage.Username)
                || string.IsNullOrWhiteSpace(slackMessage.Text))
                return;

            var slackConnector = new SlackConnector.SlackConnector();
            var connection = slackConnector.Connect(slackMessage.Token).Result;
            var message = new BotMessage
            {
                Text = slackMessage.Text,
                ChatHub =
                    connection.ConnectedChannels()
                        .First(
                            x => x.Name.Equals("#" + slackMessage.Channel.Trim('#'), StringComparison.InvariantCultureIgnoreCase))
            };

            // when
            connection.Say(message).Wait();
        }
Exemplo n.º 22
0
        private async Task ConnectToSlack()
        {
            try
            {
                var slackConnector = new SlackConnector.SlackConnector();
                _slackConnection = await slackConnector.Connect(_config.Slack.BotUserToken);

                _slackConnection.OnMessageReceived += MessageReceived;
                _slackConnection.OnDisconnect      += OnDisconnect;
                _slackConnection.OnReconnecting    += OnReconnecting;
                _slackConnection.OnReconnect       += OnReconnect;

                _logger.Information("Connected!");
                _logger.Verbose($"Team Name: {_slackConnection.Team.Name}");
                _logger.Verbose($"Bots Name: {_slackConnection.Self.Name}");
            }
            catch (System.Exception e)
            {
                _logger.Error(e, e.Message);
                throw;
            }
        }
Exemplo n.º 23
0
 public SlackProvider()
 {
    this.client = new SlackConnector.SlackConnector();
 }
Exemplo n.º 24
0
 public SlackProvider()
 {
     this.client = new SlackConnector.SlackConnector();
 }