From 47ab326e06b2634de78ee1c1cf53bceacac1ec5d Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Mon, 27 Oct 2025 08:33:40 +0200 Subject: [PATCH] feat: add handler env variables --- Cargo.toml | 2 +- src/main.rs | 39 ++++++++++++++++++++++++++++++++------- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index ff3feec..19f62ef 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ edition = "2024" [dependencies] async-trait = "0.1" -capitalize = "0.3.4" +capitalize = "0.3" color-eyre = "0.6" dotenv = "0.15" futures = "0.3" diff --git a/src/main.rs b/src/main.rs index 18b2145..fd3e7a8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ use dotenv::dotenv; -use std::sync::Arc; +use std::{env, sync::Arc}; use teloxide::{Bot, prelude::Requester, respond, types::Message}; use tg_relay_rs::{ comments::{Comments, init_global_comments}, @@ -8,6 +8,17 @@ use tg_relay_rs::{ }; use tracing::{error, info, warn}; +macro_rules! add_handler_if_enabled { + ($handlers:expr, $feature:expr, $handler:expr) => { + #[cfg(feature = $feature)] + { + if is_handler_enabled($feature) { + $handlers.push(Arc::new($handler)); + } + } + }; +} + #[tokio::main] async fn main() -> color_eyre::Result<()> { dotenv().ok(); @@ -27,12 +38,18 @@ async fn main() -> color_eyre::Result<()> { let bot = Bot::from_env(); info!("bot starting"); - let handlers: Vec> = vec![ - #[cfg(feature = "instagram")] - Arc::new(tg_relay_rs::handlers::InstagramHandler), - #[cfg(feature = "youtube")] - Arc::new(tg_relay_rs::handlers::YouTubeShortsHandler), - ]; + let mut handlers: Vec> = Vec::new(); + + add_handler_if_enabled!( + handlers, + "instagram", + tg_relay_rs::handlers::InstagramHandler + ); + add_handler_if_enabled!( + handlers, + "youtube", + tg_relay_rs::handlers::YouTubeShortsHandler + ); teloxide::repl(bot.clone(), move |bot: Bot, msg: Message| { // clone the handlers vector into the closure @@ -66,3 +83,11 @@ async fn main() -> color_eyre::Result<()> { Ok(()) } + +fn has_env(key: &str) -> bool { + !matches!(env::var(key), Ok(val) if val.trim().eq_ignore_ascii_case("false")) +} + +fn is_handler_enabled(handler_key: &str) -> bool { + has_env(&handler_key.to_uppercase()) +}