Slack API in Rust

github ci status

This is a Slack library for Rust that I'm working on, inspired by slack-go/slack.
It supports SocketMode, Event API, and WEB API.

:warning: This crate is still under development. If you have any feature requests or bugs, please create an issue! :wave:

Usage

Add this to your Cargo.toml:

toml [dependencies] slack_rust = "0.0.1-alpha"

Web API

```rust use slack::chat::postmessage::{postmessage, PostMessageRequest}; use slack::httpclient::defaultclient; use slack_rust as slack; use std::env;

[async_std::main]

async fn main() { let slackbottoken = env::var("SLACKBOTTOKEN").unwraporelse(|_| panic!("slack bot token is not set."));

let slack_api_client = default_client();
let param = PostMessageRequest {
    channel: "channel_id".to_string(),
    text: Some("Hello world!!".to_string()),
    ..Default::default()
};

let response = post_message(&slack_api_client, &param, &slack_bot_token)
    .await
    .expect("api call error");
println!("{:?}", response);

} ```

Builder

```rust use slack::attachment::attachment::Attachment; use slack::chat::postmessage::{postmessage, PostMessageRequest}; use slack::httpclient::defaultclient; use slack_rust as slack; use std::env;

[async_std::main]

async fn main() { let slackbottoken = env::var("SLACKBOTTOKEN").unwraporelse(|| panic!("slack bot token is not set.")); let slackchannelid = env::var("SLACKCHANNELID").unwraporelse(|| panic!("slack channel id is not set."));

let slack_api_client = default_client();

let attachments = vec![Attachment::builder()
    .color("#36a64f".to_string())
    .author_name("slack-rust".to_string())
    .author_icon("https://2.bp.blogspot.com/-3o7K8_p8NNM/WGCRsl8GiCI/AAAAAAABAoc/XKnspjvc0YIoOiSRK9HW6wXhtlnZvHQ9QCLcB/s800/pyoko_hashiru.png".to_string())
    .title("slack_rust_example".to_string())
    .build()];
let param = PostMessageRequest::builder(slack_channel_id)
    .text("Hello World!!".to_string())
    .attachments(attachments)
    .build();

let response = post_message(&slack_api_client, &param, &slack_bot_token)
    .await
    .expect("api call error");
println!("{:?}", response);

} ```

Socket Mode

```rust use asynctrait::asynctrait; use slack::chat::postmessage::{postmessage, PostMessageRequest}; use slack::httpclient::{defaultclient, SlackWebAPIClient}; use slack::socket::event::{HelloEvent, InteractiveEvent}; use slack::socket::socketmode::{ack, EventHandler, SocketMode, Stream}; use slack::views::open::{open, OpenRequest}; use slack::views::view::{View, ViewType}; use slackrust as slack; use std::env;

[async_std::main]

async fn main() { env_logger::init();

let slack_app_token =
    env::var("SLACK_APP_TOKEN").unwrap_or_else(|_| panic!("slack app token is not set."));
let slack_bot_token =
    env::var("SLACK_BOT_TOKEN").unwrap_or_else(|_| panic!("slack bot token is not set."));
let api_client = default_client();

SocketMode::new(api_client, slack_app_token, slack_bot_token)
    .option_parameter("SLACK_CHANNEL_ID".to_string(), "channel_id".to_string())
    .run(&mut Handler)
    .await
    .unwrap_or_else(|_| panic!("socket mode run error."));

}

pub struct Handler;

[allow(unused_variables)]

[async_trait]

impl EventHandler for Handler where S: SlackWebAPIClient, { async fn onhello(&mut self, socketmode: &SocketMode, e: HelloEvent, s: &mut Stream) { log::info!("hello event: {:?}", e); } async fn oninteractive( &mut self, socketmode: &SocketMode, e: InteractiveEvent, s: &mut Stream, ) { log::info!("interactive event: {:?}", e); ack(&e.envelope_id, s) .await .expect("socket mode ack error.");

    let request = PostMessageRequest {
        channel: socket_mode
            .option_parameter
            .get("SLACK_CHANNEL_ID")
            .unwrap()
            .to_string(),
        text: Some("Hello World!!".to_string()),
        ..Default::default()
    };
    let response = post_message(&socket_mode.api_client, &request, &socket_mode.bot_token)
        .await
        .expect("post message api error.");
    log::info!("post message api response: {:?}", response);
}

} ```

Other Reference Repository

License

This project is licensed under the Apache License Version 2.0.