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服务器

Download history 118/week @ 2024-04-15 10/week @ 2024-04-22 1/week @ 2024-05-06 5/week @ 2024-05-20 8/week @ 2024-05-27 8/week @ 2024-06-03 13/week @ 2024-06-10 8/week @ 2024-06-24 11/week @ 2024-07-01 121/week @ 2024-07-08 21/week @ 2024-07-15 26/week @ 2024-07-22 42/week @ 2024-07-29

220 每月下载量

MIT 许可证

135KB
2K SLoC

traq-bot-http-rs

Rust codecov Release docs.rs

GitHub Crates.io GitHub release (with filter) Crates.io

解析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