refactor(bot actions): move bot actions from src/handlers to src/
This commit is contained in:
parent
ec2ff44e36
commit
7576859907
|
@ -0,0 +1,49 @@
|
||||||
|
use telers::{
|
||||||
|
event::{telegram::HandlerResult, EventReturn}, methods::BanChatMember, Bot
|
||||||
|
};
|
||||||
|
|
||||||
|
use tokio::time::{sleep, Duration as DurationSleep};
|
||||||
|
|
||||||
|
use crate::{
|
||||||
|
types::{
|
||||||
|
enums::target_user::TargetUser,
|
||||||
|
structs::handler_entity::{ExtractedEntityData, HandlerEntity},
|
||||||
|
},
|
||||||
|
utils::telegram::try_do::try_restrict,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub async fn ban_member(
|
||||||
|
handler_entity: HandlerEntity,
|
||||||
|
chat_id: i64,
|
||||||
|
user: TargetUser,
|
||||||
|
delay: u64,
|
||||||
|
) -> HandlerResult {
|
||||||
|
let (bot, message, mut sender_builder): ExtractedEntityData = handler_entity.extract();
|
||||||
|
|
||||||
|
sleep(DurationSleep::from_millis(delay)).await;
|
||||||
|
|
||||||
|
let user_id: i64 = user.get_id().unwrap();
|
||||||
|
|
||||||
|
let callback = || async { bot.send(BanChatMember::new(chat_id, user_id)).await };
|
||||||
|
let demote_args: (&Bot, i64, i64) = (&bot, user_id, chat_id);
|
||||||
|
|
||||||
|
sender_builder.set_text("Невозможно забанить пользователя.");
|
||||||
|
|
||||||
|
if try_restrict(callback, demote_args, sender_builder.clone().build())
|
||||||
|
.await
|
||||||
|
.is_err()
|
||||||
|
{
|
||||||
|
Ok(EventReturn::Cancel)
|
||||||
|
} else {
|
||||||
|
let banned_user_name: String = user.get_user_name(&bot, &message).await.unwrap();
|
||||||
|
|
||||||
|
sender_builder
|
||||||
|
.reply_to(message.id())
|
||||||
|
.text(format!("Пользователь {banned_user_name} забанен."))
|
||||||
|
.build()
|
||||||
|
.send(&bot)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(EventReturn::Finish)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
pub mod ban;
|
||||||
|
pub mod mute;
|
||||||
|
pub mod unmute;
|
|
@ -0,0 +1,58 @@
|
||||||
|
use telers::{
|
||||||
|
event::{telegram::HandlerResult, EventReturn},
|
||||||
|
Bot,
|
||||||
|
};
|
||||||
|
|
||||||
|
use tokio::time::{sleep, Duration};
|
||||||
|
|
||||||
|
use crate::{
|
||||||
|
types::{
|
||||||
|
enums::target_user::TargetUser,
|
||||||
|
structs::handler_entity::{ExtractedEntityData, HandlerEntity},
|
||||||
|
TimeValues,
|
||||||
|
},
|
||||||
|
utils::{
|
||||||
|
general::get_expiration_time::{get_expiration_time, ExtractedDuration},
|
||||||
|
telegram::{rights_control::restrict, try_do::try_restrict},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
pub async fn mute_member(
|
||||||
|
handler_entity: HandlerEntity,
|
||||||
|
chat_id: i64,
|
||||||
|
user: TargetUser,
|
||||||
|
time: TimeValues,
|
||||||
|
) -> HandlerResult {
|
||||||
|
let (bot, message, mut sender_builder): ExtractedEntityData = handler_entity.extract();
|
||||||
|
|
||||||
|
let user_id: i64 = user.get_id().unwrap();
|
||||||
|
|
||||||
|
sleep(Duration::from_millis(time.1)).await;
|
||||||
|
|
||||||
|
let (unmute_date, postfix, mute_duration): ExtractedDuration = get_expiration_time(time);
|
||||||
|
let demote_args: (&Bot, i64, i64) = (&bot, user_id, chat_id);
|
||||||
|
|
||||||
|
let callback = || async { restrict(&bot, user_id, unmute_date, chat_id).await };
|
||||||
|
|
||||||
|
sender_builder.set_text("Невозможно выдать мут.");
|
||||||
|
|
||||||
|
if try_restrict(callback, demote_args, sender_builder.clone().build())
|
||||||
|
.await
|
||||||
|
.is_err()
|
||||||
|
{
|
||||||
|
Ok(EventReturn::Cancel)
|
||||||
|
} else {
|
||||||
|
let muted_user_name: String = user.get_user_name(&bot, &message).await.unwrap();
|
||||||
|
|
||||||
|
sender_builder
|
||||||
|
.reply_to(message.id())
|
||||||
|
.text(format!(
|
||||||
|
"Пользователю {muted_user_name} выдан мут на {mute_duration} {postfix}."
|
||||||
|
))
|
||||||
|
.build()
|
||||||
|
.send(&bot)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(EventReturn::Finish)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
use telers::{
|
||||||
|
event::{telegram::HandlerResult, EventReturn},
|
||||||
|
methods::RestrictChatMember,
|
||||||
|
types::ChatPermissions,
|
||||||
|
};
|
||||||
|
|
||||||
|
use crate::types::{
|
||||||
|
enums::target_user::TargetUser,
|
||||||
|
structs::handler_entity::{ExtractedEntityData, HandlerEntity},
|
||||||
|
};
|
||||||
|
|
||||||
|
pub async fn unmute_member(
|
||||||
|
handler_entity: HandlerEntity,
|
||||||
|
chat_id: i64,
|
||||||
|
user: TargetUser,
|
||||||
|
) -> HandlerResult {
|
||||||
|
let (bot, message, sender_builder): ExtractedEntityData = handler_entity.extract();
|
||||||
|
|
||||||
|
let user_id: i64;
|
||||||
|
|
||||||
|
if let Some(id) = user.get_id() {
|
||||||
|
user_id = id;
|
||||||
|
} else {
|
||||||
|
sender_builder
|
||||||
|
.build()
|
||||||
|
.send(&bot)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
return Ok(EventReturn::Cancel);
|
||||||
|
}
|
||||||
|
|
||||||
|
let default_member_permissions = ChatPermissions::all()
|
||||||
|
.can_change_info(false)
|
||||||
|
.can_manage_topics(false)
|
||||||
|
.can_invite_users(false)
|
||||||
|
.can_pin_messages(false);
|
||||||
|
|
||||||
|
let bot_action = RestrictChatMember::new(chat_id, user_id, default_member_permissions);
|
||||||
|
|
||||||
|
if let Err(error) = bot.send(bot_action).await {
|
||||||
|
sender_builder
|
||||||
|
.text(format!("Невозможно снять мут с пользователя: {error:?}."))
|
||||||
|
.build()
|
||||||
|
.send(&bot)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(EventReturn::Cancel)
|
||||||
|
} else {
|
||||||
|
let muted_user_name: String = user.get_user_name(&bot, &message).await.unwrap();
|
||||||
|
|
||||||
|
sender_builder
|
||||||
|
.reply_to(message.id())
|
||||||
|
.text(format!("С пользователя {muted_user_name} снят мут."))
|
||||||
|
.build()
|
||||||
|
.send(&bot)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(EventReturn::Finish)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue