55 lines
1.8 KiB
Rust
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(())
|
|
}
|