bash
wget https://github.com/lz1998/ricq-react-ui/releases/latest/download/static.zip && unzip static.zip && rm static.zip
```rust
pub trait Processor {
async fn onloginsuccess(
&self,
client: Arc
```rust
use std::net::SocketAddr; use std::str::FromStr; use std::sync::Arc;
use axum::{ routing::{get, getservice, post}, Extension, Router, }; use dashmap::DashMap; use tower::ServiceBuilder; use towerhttp::services::ServeDir;
use ricq::Client; use ricqaxumapi::handler::{bot, password, qrcode}; use ricqaxumapi::RicqAxumApi;
type ClientProcessor = DashMap<(i64, u8), Arc
async fn main() { // 默认处理器,登录后什么也不做,仅作为容器 let processor = ClientProcessor::default(); let ricqaxumapi = Arc::new(RicqAxumApi::new(processor));
let app = Router::new()
.route("/ping", get(async move || "pong"))
.nest(
"/login",
Router::new()
.nest(
"/qrcode",
Router::new()
.route("/create", post(qrcode::create))
.route("/list", get(qrcode::list))
.route("/delete", post(qrcode::delete))
.route("/query", post(qrcode::query)),
)
.nest(
"/password",
Router::new()
.route("/create", post(password::login))
.route("/request_sms", post(password::request_sms))
.route("/submit_sms", post(password::submit_sms))
.route("/submit_ticket", post(password::submit_ticket))
.route("/list", get(password::list))
.route("/delete", post(password::delete)),
),
)
.nest(
"/bot",
Router::new()
.route("/list", get(bot::list))
.route("/delete", post(bot::delete)),
)
.fallback(get_service(ServeDir::new("static")).handle_error(handle_error))
.layer(
ServiceBuilder::new()
.layer(Extension(ricq_axum_api))
.into_inner(),
);
let addr = SocketAddr::from_str("0.0.0.0:9000").expect("failed to parse bind_addr");
println!("listening on {}", addr);
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
}
async fn handleerror(: std::io::Error) -> impl axum::response::IntoResponse { (axum::http::StatusCode::NOT_FOUND, "Something went wrong...") } ```
http://localhost:9000