refactor: main file

This commit is contained in:
Kristofers Solo 2025-10-27 13:14:22 +02:00
parent 164b99888e
commit 6c015137df
Signed by: kristoferssolo
GPG Key ID: 74FF8144483D82C8

View File

@ -1,9 +1,9 @@
use dotenv::dotenv;
use teloxide::{Bot, prelude::Requester, repls::CommandReplExt, respond, types::Message};
use teloxide::{prelude::*, respond};
use tg_relay_rs::{
commands::{Command, answer},
comments::{Comments, init_global_comments},
handler::create_handlers,
handler::{Handler, create_handlers},
telemetry::setup_logger,
};
use tracing::{error, info, warn};
@ -35,27 +35,7 @@ async fn main() -> color_eyre::Result<()> {
// clone the handlers vector into the closure
let handlers = handlers.clone();
async move {
if let Some(text) = msg.text() {
for handler in handlers.iter() {
if let Some(id) = handler.try_extract(text) {
let handler = handler.clone();
let bot_for_task = bot.clone();
let chat = msg.chat.id;
tokio::spawn(async move {
if let Err(err) = handler.handle(&bot_for_task, chat, id).await {
error!(%err, "handler failed");
let _ = bot_for_task
.send_message(chat, "Failed to fetch media, you foking donkey.")
.await;
}
});
// if one handler matched, stop checking
break;
}
}
}
process_message(&bot, &msg, &handlers);
respond(())
}
})
@ -63,3 +43,27 @@ async fn main() -> color_eyre::Result<()> {
Ok(())
}
fn process_message(bot: &Bot, msg: &Message, handlers: &[Handler]) {
let Some(text) = msg.text() else {
return;
};
for handler in handlers {
if let Some(url) = handler.try_extract(text) {
handle_extracted_content(bot.clone(), msg.chat.id, handler.clone(), url);
break;
}
}
}
fn handle_extracted_content(bot: Bot, chat: ChatId, handler: Handler, url: String) {
tokio::spawn(async move {
if let Err(err) = handler.handle(&bot, chat, url).await {
error!(%err, "handler failed");
let _ = bot
.send_message(chat, "Failed to fetch media, you foking donkey.")
.await;
}
});
}