17 releases (9 breaking)

new 0.9.1 Feb 13, 2025
0.8.0 Oct 23, 2018
0.6.0 Sep 26, 2017
0.5.0 Jul 24, 2017
0.0.1 Dec 30, 2014

#105 in Web programming

Download history 1309/week @ 2024-10-26 1334/week @ 2024-11-02 1373/week @ 2024-11-09 1035/week @ 2024-11-16 783/week @ 2024-11-23 1172/week @ 2024-11-30 1351/week @ 2024-12-07 1236/week @ 2024-12-14 600/week @ 2024-12-21 442/week @ 2024-12-28 936/week @ 2025-01-04 1121/week @ 2025-01-11 1764/week @ 2025-01-18 1258/week @ 2025-01-25 2056/week @ 2025-02-01 2424/week @ 2025-02-08

7,697 downloads per month
Used in 6 crates (5 directly)

MIT/Apache

42KB
875 lines

slack-hook

CI Documentation crates.io MIT licensed Apache licensed

A rust crate for sending messages to Slack via webhooks.

Slack is a messaging platform for team collaboration.

Upgrading? See the CHANGELOG.

Features

  • blocking: Provides a synchronous "blocking" slack client
  • default-tls (enabled by default): Provides TLS support to connect over HTTPS
  • native-tls: Enables TLS functionality provided by native-tls
  • rustls-tls: Enables TLS functionality provided by rustls

Usage

Simply run this to add it to your Cargo.toml:

cargo add slack-hook --features=blocking

and then start sending messages!

use slack_hook::{blocking::Slack, PayloadBuilder};

let slack = Slack::new("https://hooks.slack.com/services/abc/123/45z").unwrap();
let payload = PayloadBuilder::new()
    .text("test message")
    .channel("#testing")
    .username("My Bot")
    .icon_emoji(":chart_with_upwards_trend:")
    .build()
    .expect("we know this payload is valid");

match slack.send(&payload) {
    Ok(()) => println!("Message sent!"),
    Err(err) => eprintln!("Error: {err:?}")
}

Attachments

To create a payload with just an attachment:

use slack_hook::{PayloadBuilder, AttachmentBuilder};

let attachment = AttachmentBuilder::new("my text")
    .color("#b13d41")
    .build()
    .unwrap();
let _payload = PayloadBuilder::new()
    .attachments(vec![attachment])
    .build()
    .unwrap();

Slack messaging API permits you to send links within text. However, given the different formatting rules, these text fragments need to be specified as follows:

use slack_hook::{PayloadBuilder, SlackTextContent, SlackLink};

let text = [
    SlackTextContent::Text("Hello".into()),
    SlackTextContent::Link(SlackLink::new("https://google.com", "Google")),
    SlackTextContent::Text(", nice to know you.".into())
];
let _ = PayloadBuilder::new()
.text(text.as_slice())
.build()
.unwrap();

Sending this payload will display the following in slack (note: each element of the Vec has been space-separated):

      Hello Google, nice to know you.

This technique can be used for any function that has the Into<SlackText> trait bound.

License

This library is distributed under similar terms to Rust: dual licensed under the MIT license and the Apache license (version 2.0).

See LICENSE-APACHE, LICENSE-MIT, and COPYRIGHT for details.

Dependencies

~5–21MB
~326K SLoC