traQ BOTのPOSTリクエストをパースするライブラリです。
Cargo.toml
# ...
[dependencies]
http = "1"
tower = "0.4"
axum = "0.7"
tokio = { version = "1", features = ["full"] }
traq-bot-http = { version = "0.10.1", features = ["tower"] }
main.rs
use std::{env, net::SocketAddr};
use axum::{routing::post_service, Router};
use http::StatusCode;
use tokio::net::TcpListener;
use tower::service_fn;
use traq_bot_http::{payloads, RequestParser};
#[tokio::main]
async fn main() {
let verification_token = env::var("VERIFICATION_TOKEN").unwrap();
let parser = RequestParser::new(&verification_token);
let handler = parser
.into_handler()
.on_message_created(service_fn(on_message_created));
let app = Router::new().route(
"/",
post_service(handler).handle_error(|_| async { StatusCode::INTERNAL_SERVER_ERROR }),
);
let addr = SocketAddr::from(([127, 0, 0, 1], 8080));
let server = TcpListener::bind(addr).await.unwrap();
axum::serve(server, app).await.unwrap();
}
async fn on_message_created(
payload: payloads::MessageCreatedPayload,
) -> Result<(), std::convert::Infallible> {
print!(
"{}さんがメッセージを投稿しました。\n内容: {}\n",
payload.message.user.display_name, payload.message.text
);
Ok(())
}
feature | 機能 | バージョン |
---|---|---|
uuid |
ペイロードのUUID値がuuid::Uuid 型に |
v0.4.0から |
time |
ペイロードのタイムスタンプ値(RFC3339 format)がtime::OffsetDateTime 型に |
v0.5.0から |
chrono |
ペイロードのタイムスタンプ値がchrono::DateTime<chrono::Utc> 型に |
v0.6.0から |
http |
http::Request 型のサポート |
v0.10.0 |
※time
よりもchrono
の方が優先されます
Issue, Pull Requestは大歓迎です。