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:
Add this to your Cargo.toml:
toml
[dependencies]
slack_rust = "0.0.1-alpha"
```rust use slack::chat::postmessage::{postmessage, PostMessageRequest}; use slack::httpclient::defaultclient; use slack_rust as slack; use std::env;
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, ¶m, &slack_bot_token)
.await
.expect("api call error");
println!("{:?}", response);
} ```
```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 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, ¶m, &slack_bot_token)
.await
.expect("api call error");
println!("{:?}", response);
} ```
```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 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;
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);
}
} ```
This project is licensed under the Apache License Version 2.0.