mk-dl-bot_legacy/src/bot/op.rs

55 lines
1.8 KiB
Rust

use sqlx::Row;
use teloxide::prelude::*;
use tracing::{event, Level};
use super::types::HandlerResult;
use crate::db::user::{create_user, find_or_create_user};
use crate::db::DbPool;
pub async fn cmd_op(bot: Bot, msg: Message, db: DbPool) -> HandlerResult {
let admins: i64 = sqlx::query("SELECT COUNT(*) FROM user WHERE is_admin = 1")
.fetch_one(&db)
.await?
.get(0);
if let Some(tg_user) = msg.from() {
if admins == 0 {
let user = create_user(&db, tg_user, true, true).await?;
event!(
Level::INFO,
"opped {} - {}",
user.tg_id,
user.username_or_name()
);
bot.send_message(msg.chat.id, "Now you're an admin").await?;
} else {
let user = find_or_create_user(&db, tg_user).await?;
if user.is_admin == 1 {
if let Some(target) = msg.reply_to_message().and_then(|m| m.from()) {
let target = find_or_create_user(&db, target).await?;
sqlx::query("UPDATE user SET can_download = 1, is_admin = 1 WHERE id = $1;")
.bind(target.id)
.execute(&db)
.await?;
event!(
Level::INFO,
"opped {} - {}",
target.tg_id,
target.username_or_name()
);
bot.send_message(msg.chat.id, "opped").await?;
} else {
bot.send_message(msg.chat.id, "You have to reply on target's message")
.await?;
}
} else {
bot.send_message(msg.chat.id, "You can't do that bruh")
.await?;
}
}
}
Ok(())
}