1use crate::channels::telegram::TelegramChannel;
14use crate::channels::{Channel, OutgoingMessage};
15use crate::config;
16
17pub async fn send(message: &str, target: Option<&str>) -> anyhow::Result<()> {
24 let token = config::get("channels.telegram.bot_token").map_err(|_| {
26 anyhow::anyhow!(
27 "Telegram bot token not configured.\n\
28 Set `channels.telegram.bot_token` in ~/.orch/config.yml"
29 )
30 })?;
31
32 let chat_id: Option<String> = target
34 .map(ToString::to_string)
35 .or_else(|| config::get("channels.telegram.chat_id").ok());
36
37 if chat_id.is_none() {
38 anyhow::bail!(
39 "No Telegram chat_id configured.\n\
40 Use --target <chat_id> or set `channels.telegram.chat_id` in ~/.orch/config.yml"
41 );
42 }
43
44 let channel = TelegramChannel::new(token, chat_id.clone())?;
46
47 let msg = OutgoingMessage {
49 thread_id: chat_id.unwrap_or_default(),
50 body: message.to_string(),
51 reply_to: None,
52 metadata: serde_json::Value::Null,
53 topic_id: None,
54 };
55
56 channel.send(&msg).await?;
57
58 println!("Telegram message sent.");
59 Ok(())
60}