use maxbot::{ChatAdminRequest, MaxClient};
use std::env;
use std::io::{self, Write};
#[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!("🔍 Текущие администраторы чата {}:", chat_id);
match client.get_chat_admins(chat_id).await {
Ok(admins) => {
if admins.is_empty() {
println!(" (нет администраторов или нет прав на просмотр)");
} else {
for admin in &admins {
println!(
" - {} {} (ID: {}){}",
admin.user.first_name,
admin.user.last_name.as_deref().unwrap_or(""),
admin.user.user_id,
if admin.is_owner { " [владелец]" } else { "" }
);
if let Some(alias) = &admin.alias {
println!(" Псевдоним: {}", alias);
}
}
}
}
Err(e) => eprintln!("❌ Не удалось получить список администраторов: {}", e),
}
let user_ids: Vec<i64> = if let Ok(ids_str) = env::var("USER_IDS") {
ids_str
.split(',')
.filter_map(|s| s.trim().parse().ok())
.collect()
} else {
print!("Введите user_id пользователя для назначения администратором: ");
io::stdout().flush()?;
let mut input = String::new();
io::stdin().read_line(&mut input)?;
if let Ok(id) = input.trim().parse() {
vec![id]
} else {
println!("❌ Некорректный ввод, завершаем.");
return Ok(());
}
};
if user_ids.is_empty() {
println!("❌ Нет user_id для добавления.");
return Ok(());
}
let first_id = user_ids[0];
println!("\n📌 Добавляем пользователя {} как администратора с псевдонимом 'Демо-админ'...", first_id);
let permissions = vec![
"read_all_messages".to_string(),
"write".to_string(),
"pin_message".to_string(),
];
match client
.add_chat_admin(chat_id, first_id, permissions.clone(), Some("Демо-админ".to_string()))
.await
{
Ok(()) => println!("✅ Пользователь {} назначен администратором.", first_id),
Err(e) => eprintln!("❌ Ошибка при назначении: {}", e),
}
if user_ids.len() > 1 {
println!("\n📌 Добавляем остальных пользователей массовым запросом...");
let mut admins_to_add = Vec::new();
for &uid in &user_ids[1..] {
admins_to_add.push(ChatAdminRequest {
user_id: uid,
permissions: vec!["read_all_messages".to_string(), "write".to_string()],
alias: None,
});
}
match client.add_chat_admins(chat_id, admins_to_add).await {
Ok(()) => println!("✅ Все указанные пользователи добавлены как администраторы."),
Err(e) => eprintln!("❌ Ошибка при массовом добавлении: {}", e),
}
}
println!("\n🔍 Обновлённый список администраторов:");
match client.get_chat_admins(chat_id).await {
Ok(admins) => {
for admin in admins {
println!(
" - {} {} (ID: {}){}",
admin.user.first_name,
admin.user.last_name.as_deref().unwrap_or(""),
admin.user.user_id,
if admin.is_owner { " [владелец]" } else { "" }
);
if let Some(alias) = &admin.alias {
println!(" Псевдоним: {}", alias);
}
if !admin.permissions.is_empty() {
println!(" Права: {:?}", admin.permissions);
}
}
}
Err(e) => eprintln!("❌ Не удалось получить обновлённый список: {}", e),
}
Ok(())
}