From 493ac008676d9dc257769d006f4655bf8ffca414 Mon Sep 17 00:00:00 2001 From: Bulat Kurbanov Date: Fri, 3 May 2024 00:50:21 +0200 Subject: [PATCH] Delete bots if wrong token --- src/bots_manager/bot_manager_client.rs | 15 +++++++++++++++ src/bots_manager/internal.rs | 13 +++++++++++++ src/bots_manager/mod.rs | 14 ++++++++------ 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/bots_manager/bot_manager_client.rs b/src/bots_manager/bot_manager_client.rs index a78384e..3dd7077 100644 --- a/src/bots_manager/bot_manager_client.rs +++ b/src/bots_manager/bot_manager_client.rs @@ -30,3 +30,18 @@ pub async fn get_bots() -> Result, reqwest::Error> { Err(err) => Err(err), } } + + +pub async fn delete_bot(id: u32) -> Result<(), reqwest::Error> { + let client = reqwest::Client::new(); + let response = client + .delete(&format!("{}/{}/", config::CONFIG.manager_url, id)) + .header("Authorization", &config::CONFIG.manager_api_key) + .send() + .await; + + match response { + Ok(_) => Ok(()), + Err(err) => Err(err), + } +} diff --git a/src/bots_manager/internal.rs b/src/bots_manager/internal.rs index 9e21feb..8896e39 100644 --- a/src/bots_manager/internal.rs +++ b/src/bots_manager/internal.rs @@ -16,6 +16,7 @@ use url::Url; use std::convert::Infallible; +use crate::bots_manager::bot_manager_client::delete_bot; use crate::bots_manager::BOTS_ROUTES; use crate::config; @@ -64,6 +65,18 @@ pub async fn set_webhook(bot_data: &BotData) -> bool { match bot.set_webhook(url.clone()).await { Ok(_) => true, Err(err) => { + match err { + teloxide::RequestError::Api(ref err) => { + match err { + teloxide::ApiError::NotFound => { + let _ = delete_bot(bot_data.id).await; + }, + _ => (), + } + }, + _ => () + }; + log::error!("Webhook set error: {}", err); false } diff --git a/src/bots_manager/mod.rs b/src/bots_manager/mod.rs index f6e1bc6..fd4c37c 100644 --- a/src/bots_manager/mod.rs +++ b/src/bots_manager/mod.rs @@ -92,17 +92,19 @@ impl BotsManager { continue; } - BOTS_DATA - .insert(bot_data.token.clone(), bot_data.clone()) - .await; - - let bot_data = bot_data.clone(); + let bot_data: BotData = bot_data.clone(); let semphore = semaphore.clone(); set_webhook_tasks.spawn(async move { let _permit = semphore.acquire().await.unwrap(); - set_webhook(&bot_data).await; + let webhook_status = set_webhook(&bot_data).await; + + if webhook_status { + BOTS_DATA + .insert(bot_data.token.clone(), bot_data.clone()) + .await; + } drop(_permit); });