feat: add message relay to admin chat

This commit is contained in:
2026-01-03 23:08:06 +02:00
parent da38ec8d69
commit a520b9f077

View File

@@ -37,6 +37,7 @@ async fn main() -> color_eyre::Result<()> {
let handlers = handlers.clone();
let bot_name_cloned = bot_name.clone();
async move {
relay_message(&bot, &msg).await;
process_cmd(&bot, &msg, &bot_name_cloned).await;
process_message(&bot, &msg, &handlers).await;
respond(())
@@ -76,3 +77,33 @@ async fn process_cmd(bot: &Bot, msg: &Message, bot_name: &str) {
error!(%e, "failed to answer command");
}
}
async fn relay_message(bot: &Bot, msg: &Message) {
let Some(chat_id) = global_config().chat_id else {
return;
};
// Don't relay messages from the relay target itself
if msg.chat.id == chat_id {
return;
}
let author = msg.from.as_ref().map_or_else(
|| "Unknown".to_string(),
|u| {
u.username
.as_ref()
.map_or_else(|| u.full_name(), |un| format!("@{un}"))
},
);
let chat_name = msg.chat.title().unwrap_or("Private chat");
let text = msg.text().or_else(|| msg.caption()).unwrap_or("");
let relay_text = format!("[{chat_name}] {author}:\n{text}");
if let Err(e) = bot.send_message(chat_id, relay_text).await {
error!(%e, "failed to relay message");
}
}