maxbot 0.1.13

Автоматизация работы с чат-ботами на платформе MAX (max.ru)
Documentation
use chrono::{TimeZone, Utc};
use maxbot::MaxClient;
use std::env;

fn format_timestamp(ts_millis: i64) -> String {
    let secs = ts_millis / 1000;
    let nanos = ((ts_millis % 1000) * 1_000_000) as u32;
    let dt = Utc.timestamp_opt(secs, nanos).single();
    match dt {
        Some(dt) => dt.format("%d.%m.%Y %H:%M:%S").to_string(),
        None => ts_millis.to_string(),
    }
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let token = env::var("MAXBOT_TOKEN").expect("Missing MAXBOT_TOKEN");
    let chat_id: i64 = env::var("CHAT_ID")
        .expect("Missing CHAT_ID")
        .parse()?;

    if let Ok(proxy_url) = env::var("MAXBOT_PROXY") {
        maxbot::set_global_base_url(proxy_url);
    }

    let client = MaxClient::new(token);

    println!("Получаем список администраторов чата {}...\n", chat_id);
    match client.get_chat_admins(chat_id).await {
        Ok(admins) => {
            if admins.is_empty() {
                println!("В чате нет администраторов (или бот не имеет прав для просмотра).");
            } else {
                println!("Найдено администраторов: {}\n", admins.len());
                for (i, admin) in admins.iter().enumerate() {
                    println!("{}. {} {}", 
                        i + 1, 
                        admin.user.first_name, 
                        admin.user.last_name.as_deref().unwrap_or("")
                    );
                    if let Some(username) = &admin.user.username {
                        println!("   Username: @{}", username);
                    }
                    println!("   ID: {}", admin.user.user_id);
                    println!("   Это бот: {}", admin.user.is_bot);
                    println!("   Владелец чата: {}", admin.is_owner);
                    println!("   Администратор: {}", admin.is_admin);
                    println!("   Дата вступления: {}", format_timestamp(admin.join_time));
                    if let Some(last_activity) = admin.user.last_activity_time {
                        println!("   Последняя активность: {}", format_timestamp(last_activity));
                    }
                    if !admin.permissions.is_empty() {
                        println!("   Права: {:?}", admin.permissions);
                    }
                    if let Some(alias) = &admin.alias {
                        println!("   Псевдоним: {}", alias);
                    }
                    println!();
                }
            }
        }
        Err(e) => {
            eprintln!("❌ Ошибка при получении администраторов: {}", e);
            if let maxbot::Error::Api { code, message } = &e {
                eprintln!("   Код ответа API: {}", code);
                eprintln!("   Сообщение: {}", message);
            }
        }
    }

    Ok(())
}