From ecd1fdf001e48238defb29ffcb57246b2e031888 Mon Sep 17 00:00:00 2001 From: Skye Date: Sat, 28 Oct 2023 21:35:33 +0900 Subject: [PATCH] looooopy --- src/main.rs | 57 ++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/src/main.rs b/src/main.rs index 01470b7..a381d46 100644 --- a/src/main.rs +++ b/src/main.rs @@ -62,14 +62,14 @@ impl EventHandler for Handler { async fn handle_recv( mut recv: SplitStream>, - http: Http, + http: &Http, webhook: Webhook, ) -> anyhow::Result<()> { while let Some(msg) = recv.next().await { if let WsMessage::Text(content) = msg? { let message: ChatMessage = serde_json::from_str(&content)?; webhook - .execute(&http, false, |w| { + .execute(http, false, |w| { w.content(message.message) .username(message.user) .avatar_url(format!( @@ -92,36 +92,35 @@ async fn main() -> anyhow::Result<()> { let channel_id = env::var("CHANNEL_ID").expect("channel id").parse()?; let listener = TcpListener::bind(env::var("BIND_ADDR").expect("bind address")).await?; - let (stream, _) = listener.accept().await?; - let (send, recv) = - tokio_tungstenite::accept_hdr_async(stream, |req: &Request, resp: Response| { - if let Some(header) = req.headers().get("X-Token") { - if header.as_bytes() == auth_token.as_bytes() { - Ok(resp) + let token = env::var("DISCORD_TOKEN").expect("token"); + + loop { + let (stream, _) = listener.accept().await?; + let (send, recv) = + tokio_tungstenite::accept_hdr_async(stream, |req: &Request, resp: Response| { + if let Some(header) = req.headers().get("X-Token") { + if header.as_bytes() == auth_token.as_bytes() { + Ok(resp) + } else { + let mut resp = ErrorResponse::new(None); + *resp.status_mut() = StatusCode::UNAUTHORIZED; + Err(resp) + } } else { let mut resp = ErrorResponse::new(None); *resp.status_mut() = StatusCode::UNAUTHORIZED; Err(resp) } - } else { - let mut resp = ErrorResponse::new(None); - *resp.status_mut() = StatusCode::UNAUTHORIZED; - Err(resp) - } - }) - .await? - .split(); - // Login with a bot token from the environment - let token = env::var("DISCORD_TOKEN").expect("token"); - let intents = GatewayIntents::non_privileged() | GatewayIntents::MESSAGE_CONTENT; - let mut client = Client::builder(token, intents) - .event_handler(Handler(Mutex::new(send), channel_id)) - .await?; - - // start listening for events by starting a single shard - tokio::try_join!( - client.start().map_err(|e| e.into()), - handle_recv(recv, http, webhook) - )?; - Ok(()) + }) + .await? + .split(); + let intents = GatewayIntents::non_privileged() | GatewayIntents::MESSAGE_CONTENT; + let mut client = Client::builder(token.clone(), intents) + .event_handler(Handler(Mutex::new(send), channel_id)) + .await?; + tokio::try_join!( + client.start().map_err(|e| e.into()), + handle_recv(recv, &http, webhook.clone()) + )?; + } }