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 dotenv::dotenv;
|
||||||
use teloxide::{Bot, prelude::Requester, repls::CommandReplExt, respond, types::Message};
|
use teloxide::{prelude::*, respond};
|
||||||
use tg_relay_rs::{
|
use tg_relay_rs::{
|
||||||
commands::{Command, answer},
|
commands::{Command, answer},
|
||||||
comments::{Comments, init_global_comments},
|
comments::{Comments, init_global_comments},
|
||||||
handler::create_handlers,
|
handler::{Handler, create_handlers},
|
||||||
telemetry::setup_logger,
|
telemetry::setup_logger,
|
||||||
};
|
};
|
||||||
use tracing::{error, info, warn};
|
use tracing::{error, info, warn};
|
||||||
@ -35,27 +35,7 @@ async fn main() -> color_eyre::Result<()> {
|
|||||||
// clone the handlers vector into the closure
|
// clone the handlers vector into the closure
|
||||||
let handlers = handlers.clone();
|
let handlers = handlers.clone();
|
||||||
async move {
|
async move {
|
||||||
if let Some(text) = msg.text() {
|
process_message(&bot, &msg, &handlers);
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
respond(())
|
respond(())
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -63,3 +43,27 @@ async fn main() -> color_eyre::Result<()> {
|
|||||||
|
|
||||||
Ok(())
|
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