traq-bot-http

Crates.iotraq-bot-http
lib.rstraq-bot-http
version0.8.3
sourcesrc
created_at2023-02-22 13:07:59.831042
updated_at2024-04-12 16:02:36.160959
descriptionLibrary to parse POST requests of traQ BOT event
homepagehttps://github.com/H1rono/traq-bot-http-rs
repositoryhttps://github.com/H1rono/traq-bot-http-rs
max_upload_size
id791801
size167,284
H1rono_K (H1rono)

documentation

README

traq-bot-http-rs

Rust codecov Release docs.rs

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

traQ BOTのPOSTリクエストをパースするライブラリです。

example

Cargo.toml

# ...

[dependencies]
http = "1.0"
axum = "0.7"
tokio = { version = "1", features = ["full"] }
traq-bot-http = "0.8"

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.iter(), &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
        }
    }
}

Features

feature 機能 バージョン

uuid | ペイロードのUUID値がuuid::Uuid型に | v0.4.0から time | ペイロードのタイムスタンプ値(RFC3339 format)がtime::OffsetDateTime型に | v0.5.0から chrono | ペイロードのタイムスタンプ値がchrono::DateTime<chrono::Utc>型に | v0.6.0から

timeよりもchronoの方が優先されます

Contributing

Issue, Pull Requestは大歓迎です。

Commit count: 357

cargo fmt