From f625fc7960b84d8cd37652139e8054a675fe43a0 Mon Sep 17 00:00:00 2001 From: doryan Date: Sun, 2 Jun 2024 14:22:30 +0400 Subject: [PATCH] FIXED: Finish message after bot action --- src/handlers/actions/ban.rs | 9 +-------- src/handlers/actions/mute.rs | 5 +++-- src/handlers/actions/unmute.rs | 4 +++- src/types/enums/target_user.rs | 36 +++++++++++++++++++++++++++++++++- 4 files changed, 42 insertions(+), 12 deletions(-) diff --git a/src/handlers/actions/ban.rs b/src/handlers/actions/ban.rs index 4868c57..707676d 100644 --- a/src/handlers/actions/ban.rs +++ b/src/handlers/actions/ban.rs @@ -50,14 +50,7 @@ pub async fn ban( { Ok(EventReturn::Cancel) } else { - let banned_user_name: String = message - .reply_to_message() - .unwrap() - .from() - .unwrap() - .clone() - .username - .unwrap(); + let banned_user_name: String = user.get_user_name(&bot, &message).await.unwrap(); sender_builder .reply_to(message.id()) diff --git a/src/handlers/actions/mute.rs b/src/handlers/actions/mute.rs index 5fe3cee..62fce29 100644 --- a/src/handlers/actions/mute.rs +++ b/src/handlers/actions/mute.rs @@ -7,7 +7,7 @@ use tokio::time::{sleep, Duration}; use crate::{ types::{ - enums::target_user::TargetUser, + enums::target_user::{self, TargetUser}, structs::handler_entity::{ExtractedEntityData, HandlerEntity}, TimeValues, }, @@ -45,6 +45,7 @@ pub async fn mute( let (unmute_date, postfix, mute_duration): ExtractedDuration = get_duration(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("Невозможно замьютить участника чата, демотните и попробуйте снова"); @@ -55,7 +56,7 @@ pub async fn mute( { Ok(EventReturn::Cancel) } else { - let muted_user_name = message.from().unwrap().clone().username.unwrap(); + let muted_user_name: String = user.get_user_name(&bot, &message).await.unwrap(); sender_builder .reply_to(message.id()) diff --git a/src/handlers/actions/unmute.rs b/src/handlers/actions/unmute.rs index 2e614f7..9318eb4 100644 --- a/src/handlers/actions/unmute.rs +++ b/src/handlers/actions/unmute.rs @@ -36,9 +36,11 @@ pub async fn unmute( .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("С пользователя был снят мьут.") + .text(format!("С пользователя {} был снят мьут.", muted_user_name)) .build() .send(&bot) .await diff --git a/src/types/enums/target_user.rs b/src/types/enums/target_user.rs index dbbeb6f..10959f6 100644 --- a/src/types/enums/target_user.rs +++ b/src/types/enums/target_user.rs @@ -1,4 +1,9 @@ -use telers::types::Message; +use telers::{ + errors::SessionErrorKind, + methods::GetChatMember, + types::{ChatMember, Message}, + Bot, +}; #[derive(Clone, Default, Debug)] pub enum TargetUser { @@ -22,4 +27,33 @@ impl TargetUser { Self::None => None, } } + pub async fn get_user_name(&self, bot: &Bot, msg: &Message) -> Option { + match self { + Self::Id(id) => { + let get_chat_member_result: Result = + bot.send(GetChatMember::new(msg.chat().id(), *id)).await; + + if let Ok(member_kind) = get_chat_member_result { + match member_kind { + ChatMember::Owner(member) => member.user.username, + ChatMember::Administrator(member) => member.user.username, + ChatMember::Member(member) => member.user.username, + ChatMember::Restricted(member) => member.user.username, + ChatMember::Left(member) => member.user.username, + ChatMember::Banned(member) => member.user.username, + } + } else { + None + } + } + Self::Reply(msg) => { + if let Some(replied_msg) = msg.reply_to_message() { + replied_msg.from().unwrap().username.clone() + } else { + None + } + } + _ => None, + } + } }