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(())
}