maxbot 0.6.0

Автоматизация работы с чат-ботами на платформе MAX (max.ru)
Documentation
//! Webhook-бот на Actix-web.
//!
//! Отвечает pong на любое текстовое сообщение.
//!
//! # Запуск
//! ```bash
//! export MAXBOT_TOKEN="ваш_токен"
//! cargo run --example webhook-bot --features webhook
//! ```
//!
//! После запуска необходимо зарегистрировать webhook в MAX (однократно):
//! ```rust,no_run
//! # use maxbot::MaxClient;
//! # async fn reg() {
//! let client = MaxClient::from_env().unwrap();
//! client.create_subscription("https://your-domain.com/webhook", vec![], Some("my_secret_123")).await.unwrap();
//! # }
//! ```
//!
//! MAX будет присылать обновления на `POST /webhook`.
//! Убедитесь, что ваш сервер доступен по HTTPS (порт 443), например, через nginx.

use maxbot::{Dispatcher, MaxClient};
use maxbot::webhook::WebhookServer;

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    let bot = MaxClient::from_env().expect("MAXBOT_TOKEN not set");
    let mut dp = Dispatcher::new(bot);

    // Обработчик всех текстовых сообщений
    dp.on_message(|ctx| async move {
        if let Some(text) = ctx.text() {
            if text.trim().eq_ignore_ascii_case("ping") {
                ctx.reply_text("pong").await?;
            } else {
                ctx.reply_text(&format!("echo: {}", text)).await?;
            }
        }
        Ok(())
    });

    // Стартовый обработчик (выполнится один раз)
    dp.on_start(|_ctx| async move {
        println!("Webhook bot started");
        Ok(())
    });

    // Запускаем actix-web сервер
    WebhookServer::new(dp)
        .secret("my_secret_123") // должен совпадать с тем, что передан в create_subscription
        .path("/webhook")
        .serve("0.0.0.0:8443")   // порт 8443 за прокси, который реализует HTTPS
        .await
}