mirror of
https://github.com/kristoferssolo/tg-relay-rs.git
synced 2025-12-20 11:04:41 +00:00
refactor: main file
This commit is contained in:
parent
164b99888e
commit
6c015137df
50
src/main.rs
50
src/main.rs
@ -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;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user