12 releases
new 0.1.92 | Nov 5, 2024 |
---|---|
0.1.91 | Jul 29, 2024 |
0.1.9 | Jan 18, 2024 |
0.1.2 | Oct 3, 2023 |
#8 in #homepage
129 downloads per month
14KB
235 lines
Slack API
use slack_api_client::{SlackClient, CreateMessage};
let client = SlackClient::new("<SLACK_BEARER_TOKEN>");
let response = CreateMessage::Text("Hello World".to_string())
.send_to_channel(&client, "<YOUR_CHANNEL_ID>".to_string())
.await?;
Examples
Create a Block Message
use slack_api_client::CreateMessage;
pub fn hello_world() -> CreateMessage {
CreateMessage::Blocks(serde_json::json!([{
"type": "section",
"text": {
"type": "plain_text",
"text": "hello world",
"emoji": true
}
}]))
}
Open Modal in Slack
pub struct SlackModal<'a> {
pub callback_id: &'a str,
}
impl<'a> SlackModal<'a> {
// https://api.slack.com/surfaces/modals#updating_views
pub async fn open(
&self,
client: &slack_api_client::SlackClient,
trigger_id: &str,
title: &str,
blocks: serde_json::Value,
) -> anyhow::Result<()> {
let response = client
.client
.post("https://slack.com/api/views.open")
.header("Content-Type", "application/json")
.body(
serde_json::json!({
"trigger_id": trigger_id,
"view": {
"type": "modal",
"callback_id": self.callback_id,
"title": {
"type": "plain_text",
"text": title
},
"blocks": blocks
}
})
.to_string(),
)
.send()
.await?;
let response: SlackResponse = response.json().await?;
response.is_ok()?;
Ok(())
}
}
#[derive(serde::Deserialize)]
pub struct SlackResponse {
ok: bool,
warning: Option<serde_json::Value>,
error: Option<serde_json::Value>,
response_metadata: Option<serde_json::Value>,
}
impl SlackResponse {
pub fn is_ok(&self) -> anyhow::Result<()> {
if self.ok {
return Ok(());
}
Err(anyhow::Error::msg(serde_json::json!({
"error": self.error,
"warning": self.warning,
"response_metadata": self.response_metadata,
})))
}
}
Slack Api Reference
Slack provides a feature-rich API to format messages sent to slack. It is called Block Kit
, and can be used to construct beautiful messages.
Dependencies
~4–15MB
~195K SLoC