use crate::{
consts::restrict::*,
helpers::time::parse_duration,
userbot::{CommandHandlerResult, UserBot},
};
use grammers_client::types::{Chat, InputMessage, Message};
use std::time::Duration;
pub async fn ban_handler(bot: &mut UserBot, message: &mut Message) -> CommandHandlerResult {
let time_arg = bot
.get_args_nr(message, true)
.ok()
.and_then(|a| a.last().map(|s| parse_duration(s)))
.flatten();
let b_user = bot.get_arg_user(message).await?;
let chat = message.chat();
let msg: &str;
if matches!(chat, Chat::Channel(_)) {
bot.client
.set_banned_rights(&chat, &b_user)
.view_messages(false)
.duration(time_arg.unwrap_or(Duration::from_secs(0)))
.await?;
msg = BAN_TXT;
} else {
bot.client.kick_participant(&chat, &b_user).await?;
msg = BAN_WARN;
}
message.edit(InputMessage::markdown(msg)).await?;
Ok(())
}
pub async fn unban_handler(bot: &mut UserBot, message: &mut Message) -> CommandHandlerResult {
let ub_user = bot.get_arg_user(message).await?;
bot.client
.set_banned_rights(&message.chat(), &ub_user)
.await?;
message.edit(InputMessage::markdown(UNBAN_TXT)).await?;
Ok(())
}
pub async fn kick_handler(bot: &mut UserBot, message: &mut Message) -> CommandHandlerResult {
let k_user = bot.get_arg_user(message).await?;
bot.client
.kick_participant(&message.chat(), &k_user)
.await?;
message.edit(InputMessage::markdown(KICK_TXT)).await?;
Ok(())
}
pub async fn mute_handler(bot: &mut UserBot, message: &mut Message) -> CommandHandlerResult {
let time_arg = bot
.get_args_nr(message, true)
.ok()
.and_then(|a| a.last().map(|s| parse_duration(s)))
.flatten();
let m_user = bot.get_arg_user(message).await?;
bot.client
.set_banned_rights(&message.chat(), &m_user)
.send_messages(false)
.duration(time_arg.unwrap_or(Duration::from_secs(0)))
.await?;
message.edit(InputMessage::markdown(MUTE_TXT)).await?;
Ok(())
}
pub async fn unmute_handler(bot: &mut UserBot, message: &mut Message) -> CommandHandlerResult {
unban_handler(bot, message).await
}