// sends a slack message asynchronous
        // throws exception if message can not be sent
        public static async Task SendMessageAsync(string token, SlackMessage msg)
        {
            // serialize method parameters to JSON
            var content     = JsonConvert.SerializeObject(msg);
            var httpContent = new StringContent(
                content,
                Encoding.UTF8,
                "application/json"
                );

            // set token in authorization header
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

            // send message to API
            var response = await client.PostAsync("https://slack.com/api/chat.postMessage", httpContent);

            // fetch response from API
            var responseJson = await response.Content.ReadAsStringAsync();

            // convert JSON response to object
            SlackMessageResponse messageResponse =
                JsonConvert.DeserializeObject <SlackMessageResponse>(responseJson);

            // throw exception if sending failed
            if (messageResponse.ok == false)
            {
                throw new Exception(
                          "failed to send message. error: " + messageResponse.error
                          );
            }
        }
Ejemplo n.º 2
0
        protected async virtual void OnMessageReceived(MessageSlackMessage messageSlackMessage)
        {
            if (messageSlackMessage != null)
            {
                WriteLineToConsole($"Message received");

                string text = messageSlackMessage.Text;

                if ((String.IsNullOrEmpty(text) == false) && ((text.StartsWith($"@{_name}") == true) || (text.StartsWith($"<@{_id}>") == true)))
                {
                    string channelID = messageSlackMessage.ChannelID;
                    User   user      = _users.Where(m => (m.ID == messageSlackMessage.UserID)).FirstOrDefault();
                    SlackMessageContext slackMessageContext = new SlackMessageContext(channelID, user, text);

                    WriteLineToConsole($"Message for {_name} from {user.Name}");

                    foreach (MessageHandler messageHandler in _messageHandlers.Where(m => (m.IsHandle(slackMessageContext) == true)))
                    {
                        SlackMessageResponse oSlackMessageResponse = messageHandler.GetResponse(slackMessageContext);

                        await SendTypingResponse(slackMessageContext);
                        await Send(slackMessageContext, oSlackMessageResponse);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        private async Task Send(SlackMessageContext slackMessageContext, SlackMessageResponse slackMessageResponse)
        {
            BotResponderSlackResponse oBotResponderSlackResponse = new BotResponderSlackResponse()
            {
                Channel = slackMessageContext.ChannelID,
                ID      = DateTime.Now.Ticks,
                Text    = slackMessageResponse.Text
            };

            await Send(oBotResponderSlackResponse);
        }
Ejemplo n.º 4
0
    // main method with logic
    public static void Main()
    {
        String token = "xoxp-YOUR-TOKEN";


        /////////////////////
        // Step 1: Upload file to Slack

        var parameters = new NameValueCollection();

        // put your token here
        parameters["token"] = token;

        var client1 = new WebClient();

        client1.QueryString = parameters;
        byte[] responseBytes1 = client1.UploadFile(
            "https://slack.com/api/files.upload",
            "C:\\Temp\\Stratios_down.jpg"
            );

        String responseString1 = Encoding.UTF8.GetString(responseBytes1);

        SlackFileResponse fileResponse1 =
            JsonConvert.DeserializeObject <SlackFileResponse>(responseString1);

        String fileId = fileResponse1.file.id;


        /////////////////////
        // Step 2: Make file public and get the URL

        var parameters2 = new NameValueCollection();

        parameters2["token"] = token;
        parameters2["file"]  = fileId;

        var client2 = new WebClient();

        byte[] responseBytes2 = client2.UploadValues("https://slack.com/api/files.sharedPublicURL", "POST", parameters2);

        String responseString2 = Encoding.UTF8.GetString(responseBytes2);

        SlackFileResponse fileResponse2 =
            JsonConvert.DeserializeObject <SlackFileResponse>(responseString2);

        String imageUrl = fileResponse2.file.permalink_public;


        /////////////////////
        // Step 3: Send message including freshly uploaded image as attachment

        var parameters3 = new NameValueCollection();

        parameters3["token"]   = token;
        parameters3["channel"] = "test_new";
        parameters3["text"]    = "test message 2";

        // create attachment
        SlackAttachment attachment = new SlackAttachment();

        attachment.fallback  = "this did not work";
        attachment.text      = "this is anattachment";
        attachment.image_url = imageUrl;
        SlackAttachment[] attachments = { attachment };
        parameters3["attachments"] = JsonConvert.SerializeObject(attachments);

        var client3 = new WebClient();

        byte[] responseBytes3 = client3.UploadValues("https://slack.com/api/chat.postMessage", "POST", parameters3);

        String responseString3 = Encoding.UTF8.GetString(responseBytes3);

        SlackMessageResponse messageResponse =
            JsonConvert.DeserializeObject <SlackMessageResponse>(responseString3);
    }