15个不稳定版本 (5个破坏性更改)
0.9.0 | 2024年7月9日 |
---|---|
0.8.2 | 2024年2月11日 |
0.8.0 | 2023年11月30日 |
0.6.2 | 2023年7月29日 |
0.4.0 | 2023年3月11日 |
#330 in HTTP服务器
220 每月下载量
135KB
2K SLoC
traq-bot-http-rs
解析traQ BOT的POST请求的库。
示例
Cargo.toml
# ...
[dependencies]
http = "1.0"
axum = "0.7"
tokio = { version = "1", features = ["full"] }
traq-bot-http = "0.9"
main.rs
use std::{env, net::SocketAddr};
use axum::{body::Bytes, extract::State, routing::post, Router};
use http::{HeaderMap, StatusCode};
use tokio::net::TcpListener;
use traq_bot_http::{Event, RequestParser};
#[tokio::main]
async fn main() {
let verification_token = env::var("VERIFICATION_TOKEN").unwrap();
let parser = RequestParser::new(&verification_token);
let app = Router::new().route("/", post(handler)).with_state(parser);
let addr = SocketAddr::from(([127, 0, 0, 1], 8080));
let server = TcpListener::bind(addr).await.unwrap();
axum::serve(server, app).await.unwrap();
}
async fn handler(
State(parser): State<RequestParser>,
headers: HeaderMap,
body: Bytes,
) -> StatusCode {
match parser.parse(&headers, &body) {
Ok(Event::MessageCreated(payload)) => {
print!(
"{}さんがメッセージを投稿しました。\n内容: {}\n",
payload.message.user.display_name, payload.message.text
);
StatusCode::NO_CONTENT
}
Ok(_) => StatusCode::NO_CONTENT,
Err(err) => {
eprintln!("ERROR: {err}");
StatusCode::INTERNAL_SERVER_ERROR
}
}
}
特性
特性 | 功能 | 版本 |
---|---|---|
uuid |
自v0.4.0版本起,负载的UUID值被转换为uuid::Uuid 类型。 |
v0.4.0版本起 |
time |
自v0.5.0版本起,负载的时间戳值(RFC3339格式)被转换为time::OffsetDateTime 类型。 |
v0.5.0版本起 |
chrono |
自v0.6.0版本起,负载的时间戳值被转换为chrono::DateTime<chrono::Utc> 类型。 |
v0.6.0版本起 |
※与time
相比,优先使用chrono
贡献
欢迎提交问题和拉取请求。
依赖项
~0.7–2.1MB
~43K SLoC