telemon 0.1.0

A Telegram bot for sending log messages to group topics.
Documentation
use crate::config::config::CONFIG;
use reqwest::blocking::Client;
use serde::Serialize;

pub struct TelegramClient {
    client: Client,
    token: String,
}

#[derive(Serialize)]
struct SendMessagePayload<'a> {
    chat_id: i64,
    text: &'a str,
    message_thread_id: i64,
}

impl TelegramClient {
    pub fn new() -> Self {
        Self {
            client: Client::new(),
            token: CONFIG.token.clone(),
        }
    }

    pub fn send_message(
        &self,
        chat_id: i64,
        thread_id: i64,
        message: &str,
    ) -> Result<(), Box<dyn std::error::Error>> {
        let url = format!("https://api.telegram.org/bot{}/sendMessage", self.token);

        let payload = SendMessagePayload {
            chat_id,
            text: message,
            message_thread_id: thread_id,
        };

        let res = self.client.post(&url).json(&payload).send()?;
        if res.status().is_success() {
            if CONFIG.show_logs {
                println!("{:?}", res);
            }
            Ok(())
        } else {
            let response = res;
            let status = &response.status();
            let text = response.text()?;
            if CONFIG.show_logs {
                eprintln!("Telegram error ({}): {}", status, text);
            }
            Err(format!("Telegram error: {}", text).into())
        }
    }
}