6 个版本
0.3.1 | 2024年4月9日 |
---|---|
0.3.0 | 2024年4月8日 |
0.2.2 | 2023年3月2日 |
0.2.1 | 2023年2月28日 |
0.1.0 | 2023年2月26日 |
#368 in 网页编程
每月 23 次下载
660KB
6K SLoC
Slack Messaging
这是一个为 Rust 编写的库,用于支持构建 Slack 消息 API 的消息。使用它,您可以以类型安全的方式构建任何消息,如下所示。
use slack_messaging::{mrkdwn, Message};
use slack_messaging::blocks::{elements::Button, Actions, Section};
#[tokio::main]
async fn main() {
let message = Message::builder()
.block(
Section::builder()
.text(mrkdwn!("You have a new request:\n*<fakeLink.toEmployeeProfile.com|Fred Enriquez - New device request>*"))
.build()
)
.block(
Section::builder()
.field(mrkdwn!("*Type:*\nComputer (laptop)"))
.field(mrkdwn!("*When:*\nSubmitted Aug 10"))
.build()
)
.block(
Actions::builder()
.element(
Button::builder()
.text("Approve")
.value("approve")
.primary()
.build()
)
.element(
Button::builder()
.text("Deny")
.value("deny")
.danger()
.build()
)
.build()
)
.build();
let req = reqwest::Client::new()
.post("https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX")
.json(&message);
if let Err(err) = req.send().await {
eprintln!("{}", err);
}
}
上述示例的消息负载如下。
{
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "You have a new request:\n*<fakeLink.toEmployeeProfile.com|Fred Enriquez - New device request>*"
}
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*Type:*\nComputer (laptop)"
},
{
"type": "mrkdwn",
"text": "*When:*\nSubmitted Aug 10"
}
]
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": {
"type": "plain_text",
"text": "Approve"
},
"value": "approve",
"style": "primary"
},
{
"type": "button",
"text": {
"type": "plain_text",
"text": "Deny"
},
"value": "deny",
"style": "danger"
}
]
}
]
}
可选功能
以下是可以启用或禁用的 Cargo 功能 列表。
fmt
启用 fmt
模块,并按以下方式格式化消息。
use chrono::prelude::*;
use slack_messaging::fmt::DateFormatter;
// Formatter without optional link.
let f = DateFormatter::builder()
.token("{date_short} at {time}")
.build();
let dt = DateTime::parse_from_rfc3339("2023-02-27T12:34:56+09:00").unwrap();
assert_eq!(
f.format(&dt),
"<!date^1677468896^{date_short} at {time}|Feb 27, 2023 at 12:34 PM>"
);
// You can also set optional link when formatting.
assert_eq!(
f.format_with_link(&dt, "https://example.com"),
"<!date^1677468896^{date_short} at {time}^https://example.com|Feb 27, 2023 at 12:34 PM>"
);
// Formatter with optional link.
let f = DateFormatter::builder()
.token("{date_short} at {time}")
.link("https://example.com")
.build();
// This time, format method returns text with link set to the formatter.
assert_eq!(
f.format(&dt),
"<!date^1677468896^{date_short} at {time}^https://example.com|Feb 27, 2023 at 12:34 PM>"
);
许可证
本软件根据 MIT 许可证 发布。
依赖项
~0.7–2.4MB
~47K SLoC