#slack #webhook #messaging #hook #codebase

slack-hook2

A rust crate for sending messages to Slack via webhooks

3 unstable releases

0.10.1 Nov 25, 2022
0.10.0 Mar 5, 2020
0.9.0 Feb 19, 2020

#1068 in Web programming

Download history 31/week @ 2024-07-20 58/week @ 2024-07-27 50/week @ 2024-08-03 54/week @ 2024-08-10 43/week @ 2024-08-17 167/week @ 2024-08-24 224/week @ 2024-08-31 22/week @ 2024-09-07 226/week @ 2024-09-14 203/week @ 2024-09-21 111/week @ 2024-09-28 378/week @ 2024-10-05 303/week @ 2024-10-12 286/week @ 2024-10-19 263/week @ 2024-10-26 108/week @ 2024-11-02

1,059 downloads per month
Used in 2 crates

MIT/Apache

39KB
826 lines

slack-hook2

crates.io MIT licensed Apache licensed

A rust crate for sending messages to Slack via webhooks. A modernized fork of the slack-hook crate. Happy to merge things back in the future.

Slack is a messaging platform for team collaboration.

Upgrading? See the CHANGELOG.

Requires rust 1.35 or newer.

NOTE: Slack webhooks are deprecated. Use this crate only for legacy codebases.

Usage

Add this to your Cargo.toml:

[dependencies]
slack-hook2 = "0.10.1"

Add the crate to your existing project:

use slack_hook2::{Slack, PayloadBuilder};

#[tokio::main]
async fn main() {
    let slack = Slack::new("https://hooks.slack.com/services/abc/123/45z").unwrap();
    let p = PayloadBuilder::new()
      .text("test message")
      .channel("#testing")
      .username("My Bot")
      .icon_emoji(":chart_with_upwards_trend:")
      .build()
      .unwrap();

    let res = slack.send(&p).await;
    match res {
        Ok(()) => println!("ok"),
        Err(x) => println!("ERR: {:?}",x)
    }
}

Attachments

To create a payload with just an attachment:

extern crate slack_hook;
use slack_hook::{PayloadBuilder, AttachmentBuilder};

fn main() {
  let _ = PayloadBuilder::new()
    .attachments(vec![AttachmentBuilder::new("my text").color("#b13d41").build().unwrap()])
    .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:

extern crate slack_hook;
use slack_hook::{PayloadBuilder, SlackTextContent, SlackLink};
use slack_hook::SlackTextContent::{Text, Link};

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

Sending this payload will print 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–17MB
~234K SLoC