Delete bots if wrong token

This commit is contained in:
2024-05-03 00:50:21 +02:00
parent bb6c21c1b0
commit 493ac00867
3 changed files with 36 additions and 6 deletions

View File

@@ -30,3 +30,18 @@ pub async fn get_bots() -> Result<Vec<BotData>, reqwest::Error> {
Err(err) => Err(err), 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),
}
}

View File

@@ -16,6 +16,7 @@ use url::Url;
use std::convert::Infallible; use std::convert::Infallible;
use crate::bots_manager::bot_manager_client::delete_bot;
use crate::bots_manager::BOTS_ROUTES; use crate::bots_manager::BOTS_ROUTES;
use crate::config; use crate::config;
@@ -64,6 +65,18 @@ pub async fn set_webhook(bot_data: &BotData) -> bool {
match bot.set_webhook(url.clone()).await { match bot.set_webhook(url.clone()).await {
Ok(_) => true, Ok(_) => true,
Err(err) => { 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); log::error!("Webhook set error: {}", err);
false false
} }

View File

@@ -92,17 +92,19 @@ impl BotsManager {
continue; continue;
} }
BOTS_DATA let bot_data: BotData = bot_data.clone();
.insert(bot_data.token.clone(), bot_data.clone())
.await;
let bot_data = bot_data.clone();
let semphore = semaphore.clone(); let semphore = semaphore.clone();
set_webhook_tasks.spawn(async move { set_webhook_tasks.spawn(async move {
let _permit = semphore.acquire().await.unwrap(); 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); drop(_permit);
}); });