diff --git a/Cargo.toml b/Cargo.toml
index b210ce8..98f5937 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,3 +1,5 @@
+[profile.release]
+opt-level = 3
[package]
name = "dorya"
@@ -10,10 +12,8 @@ edition = "2021"
anyhow = "1.0.86"
async-trait = "0.1.80"
chrono = "0.4.38"
-dashmap = "5.5.3"
dotenvy = "0.15.7"
-futures = "0.3.30"
-telers = "1.0.0-alpha.18"
+telers = { git = "https://github.com/doryan04/telers.git" }
tokio = { version="1.37.0", features=["rt-multi-thread"] }
tracing = "0.1.40"
tracing-subscriber = {version="0.3.18", features=["env-filter"]}
diff --git a/src/assets/mod.rs b/src/assets/mod.rs
new file mode 100644
index 0000000..a1aedb5
--- /dev/null
+++ b/src/assets/mod.rs
@@ -0,0 +1,8 @@
+use std::include_str;
+
+pub mod files {
+ use super::*;
+
+ pub const MUTE_COMMAND_HELP: &str = include_str!("mute_command_help.html");
+ pub const UNMUTE_COMMAND_HELP: &str = include_str!("unmute_command_help.html");
+}
diff --git a/src/assets/mute_command_help.html b/src/assets/mute_command_help.html
new file mode 100644
index 0000000..783141a
--- /dev/null
+++ b/src/assets/mute_command_help.html
@@ -0,0 +1,10 @@
+/mute [ID | REPLY] <DURATION: i64 (long long int)> [TIME METRIC]
+
+Обязательные критерий:
+
+1. Участник чата. Введите ID участника чата, либо ответьте на его сообщение, чтобы его замьютить;
+2. Длительность. Введите длительность мьюта, длительность должна быть не меньше нуля.
+
+Необязательные критерий:
+
+1. Временная метрика. Если она не указана, то автоматически участнику чата выдаётся мьют в днях.
diff --git a/src/assets/unmute_command_help.html b/src/assets/unmute_command_help.html
new file mode 100644
index 0000000..90f97f3
--- /dev/null
+++ b/src/assets/unmute_command_help.html
@@ -0,0 +1,6 @@
+/unmute [ID | REPLY]
+
+Обязательные критерий:
+
+1. Участник чата. Введите ID участника чата, либо ответьте на его сообщение, чтобы c него снять мьют.
+
diff --git a/src/handlers/actions/ban.rs b/src/handlers/actions/ban.rs
index 707676d..aa2f530 100644
--- a/src/handlers/actions/ban.rs
+++ b/src/handlers/actions/ban.rs
@@ -10,12 +10,10 @@ use crate::{
enums::target_user::TargetUser,
structs::handler_entity::{ExtractedEntityData, HandlerEntity},
},
- utils::telegram::{get_bot_response_text::get_bot_response_text, try_do::try_restrict},
+ utils::telegram::{ban_member::ban_chat_member, try_do::try_restrict},
};
-use crate::utils::telegram::ban_member::ban_chat_member;
-
-pub async fn ban(
+pub async fn ban_member(
handler_entity: HandlerEntity,
chat_id: i64,
user: TargetUser,
@@ -23,11 +21,12 @@ pub async fn ban(
) -> HandlerResult {
let (bot, message, mut sender_builder): ExtractedEntityData = handler_entity.extract();
+ println!("дошло");
let user_id: i64 = match user.get_id() {
Some(id) => id,
None => {
sender_builder
- .text(get_bot_response_text(&message, "забанить", "/ban [ID | REPLY]").unwrap())
+ .text("Ответьте на сообщение участника чата, которого вы хотите забанить")
.reply_to(message.id())
.build()
.send(&bot)
diff --git a/src/handlers/actions/mute.rs b/src/handlers/actions/mute.rs
index 62fce29..2053c17 100644
--- a/src/handlers/actions/mute.rs
+++ b/src/handlers/actions/mute.rs
@@ -7,19 +7,17 @@ use tokio::time::{sleep, Duration};
use crate::{
types::{
- enums::target_user::{self, TargetUser},
+ enums::target_user::TargetUser,
structs::handler_entity::{ExtractedEntityData, HandlerEntity},
TimeValues,
},
utils::{
general::get_duration::{get_duration, ExtractedDuration},
- telegram::{
- get_bot_response_text::get_bot_response_text, restrict::restrict, try_do::try_restrict,
- },
+ telegram::{restrict::restrict, try_do::try_restrict},
},
};
-pub async fn mute(
+pub async fn mute_member(
handler_entity: HandlerEntity,
chat_id: i64,
user: TargetUser,
@@ -31,7 +29,7 @@ pub async fn mute(
Some(id) => id,
None => {
sender_builder
- .text(get_bot_response_text(&message, "замьютить", "/mute [ID | REPLY]").unwrap())
+ .text("Ответьте на сообщение участника чата, которого вы хотите замьютить")
.reply_to(message.id())
.build()
.send(&bot)
@@ -54,6 +52,7 @@ pub async fn mute(
.await
.is_err()
{
+ sender_builder.build().send(&bot).await?;
Ok(EventReturn::Cancel)
} else {
let muted_user_name: String = user.get_user_name(&bot, &message).await.unwrap();
diff --git a/src/handlers/actions/unmute.rs b/src/handlers/actions/unmute.rs
index 9318eb4..91aff2b 100644
--- a/src/handlers/actions/unmute.rs
+++ b/src/handlers/actions/unmute.rs
@@ -9,7 +9,7 @@ use crate::types::{
structs::handler_entity::{ExtractedEntityData, HandlerEntity},
};
-pub async fn unmute(
+pub async fn unmute_member(
handler_entity: HandlerEntity,
chat_id: i64,
user: TargetUser,
@@ -40,7 +40,7 @@ pub async fn unmute(
sender_builder
.reply_to(message.id())
- .text(format!("С пользователя {} был снят мьут.", muted_user_name))
+ .text(format!("С пользователя {} был снят мьют.", muted_user_name))
.build()
.send(&bot)
.await
diff --git a/src/handlers/commands_handler/help_command.rs b/src/handlers/command_handlers/help_command.rs
similarity index 71%
rename from src/handlers/commands_handler/help_command.rs
rename to src/handlers/command_handlers/help_command.rs
index 1ee872b..c36489b 100644
--- a/src/handlers/commands_handler/help_command.rs
+++ b/src/handlers/command_handlers/help_command.rs
@@ -8,8 +8,10 @@ use crate::types::structs::message_sender::MessageSender;
const HELP_TEXT: &str = "\
/help - помощь по боту.\n\
- /unmute - снимает с человека мьют, для подробностей, введите команду без ID и без ответа \
- на сообщение участника чата (только для админов).\n\
+ /unmute - снимает с участника чата мьют, для подробностей, введите команду без аргументов \
+ (только для админов).\n\
+ /mute - накладывает на участника чата мьют, для подробностей, введите команду без аргументов \
+ (только для админов).\n\
🎲 - выдаёт мут, для этого нужно отправить ТОЛЬКО эмодзи в ответ на сообщение участника. \
чата, которого вы хотите замьютить (только для админов).\n\
🎰 - выдаёт бан в случае джекпота, напротив, мьют, всё так же кидайте этот эмодзи в ответ \
diff --git a/src/handlers/commands_handler/mod.rs b/src/handlers/command_handlers/mod.rs
similarity index 67%
rename from src/handlers/commands_handler/mod.rs
rename to src/handlers/command_handlers/mod.rs
index 773592b..35b9d7a 100644
--- a/src/handlers/commands_handler/mod.rs
+++ b/src/handlers/command_handlers/mod.rs
@@ -1,2 +1,3 @@
pub mod help_command;
+pub mod mute_command;
pub mod unmute_command;
diff --git a/src/handlers/command_handlers/mute_command.rs b/src/handlers/command_handlers/mute_command.rs
new file mode 100644
index 0000000..ba03ce4
--- /dev/null
+++ b/src/handlers/command_handlers/mute_command.rs
@@ -0,0 +1,96 @@
+use telers::{
+ enums::ParseMode,
+ event::{telegram::HandlerResult, EventReturn},
+ filters::CommandObject,
+ types::Message,
+ Bot,
+};
+
+use crate::{
+ assets::files::MUTE_COMMAND_HELP,
+ handlers::actions::mute::mute_member,
+ types::{
+ enums::{target_user::TargetUser, time_metrics::TimeMetrics},
+ structs::{handler_entity::HandlerEntity, message_sender::MessageSender},
+ },
+ utils::general::parse_boxed_array::parse_boxed,
+};
+
+pub async fn mute(bot: Bot, message: Message, command: CommandObject) -> HandlerResult {
+ let args: Vec<&'static str> = parse_boxed(command.args);
+
+ let (message_id, chat_id): (i64, i64) = (message.id(), message.chat().id());
+ let sender = MessageSender::builder(chat_id).reply_to(message_id);
+ let mut handler_entity: HandlerEntity = HandlerEntity::new(bot, message, sender);
+
+ let mut duration_argument_position: usize = 0;
+
+ let target_user: TargetUser = match (
+ handler_entity.message_reciever.reply_to_message(),
+ args.first(),
+ ) {
+ (Some(msg), _) => TargetUser::CurrentMessage(msg.clone()),
+ (None, Some(raw_id)) => {
+ duration_argument_position += 1;
+ if let Ok(id) = raw_id.parse::() {
+ TargetUser::Id(id)
+ } else {
+ handler_entity.message_sender_builder
+ .text("Ответьте на сообщение или укажите первым аргументом ID человека, которого вы хотите замьютить")
+ .build()
+ .send(&handler_entity.bot_instance)
+ .await?;
+
+ return Ok(EventReturn::Cancel);
+ }
+ }
+ (None, None) => {
+ handler_entity
+ .message_sender_builder
+ .text(MUTE_COMMAND_HELP)
+ .parse_mode(ParseMode::HTML)
+ .build()
+ .send(&handler_entity.bot_instance)
+ .await?;
+
+ return Ok(EventReturn::Cancel);
+ }
+ };
+
+ handler_entity
+ .message_sender_builder
+ .set_text("Укажите число, характеризующее длительность мьюта.");
+
+ match args.get(duration_argument_position).cloned() {
+ Some(duration_str) => {
+ let metric = args
+ .get(duration_argument_position + 1)
+ .cloned()
+ .unwrap_or("d");
+
+ if let Ok(duration) = duration_str.parse::() {
+ let mute_duration = TimeMetrics::from(metric, duration);
+ mute_member(handler_entity, chat_id, target_user, (mute_duration, 0)).await?;
+ } else {
+ handler_entity
+ .message_sender_builder
+ .build()
+ .send(&handler_entity.bot_instance)
+ .await?;
+
+ return Ok(EventReturn::Cancel);
+ }
+ }
+ None => {
+ handler_entity
+ .message_sender_builder
+ .build()
+ .send(&handler_entity.bot_instance)
+ .await?;
+
+ return Ok(EventReturn::Cancel);
+ }
+ }
+
+ Ok(EventReturn::Finish)
+}
diff --git a/src/handlers/command_handlers/unmute_command.rs b/src/handlers/command_handlers/unmute_command.rs
new file mode 100644
index 0000000..3ee9e3c
--- /dev/null
+++ b/src/handlers/command_handlers/unmute_command.rs
@@ -0,0 +1,62 @@
+use telers::{
+ enums::ParseMode,
+ event::{telegram::HandlerResult, EventReturn},
+ filters::CommandObject,
+ types::Message,
+ Bot,
+};
+
+use crate::{
+ assets::files::UNMUTE_COMMAND_HELP,
+ handlers::actions::unmute::unmute_member,
+ types::{
+ enums::target_user::TargetUser,
+ structs::{handler_entity::HandlerEntity, message_sender::MessageSender},
+ },
+ utils::general::parse_boxed_array::parse_boxed,
+};
+
+pub async fn unmute(bot: Bot, message: Message, command: CommandObject) -> HandlerResult {
+ let args: Vec<&'static str> = parse_boxed(command.args);
+
+ let (message_id, chat_id): (i64, i64) = (message.id(), message.chat().id());
+ let sender = MessageSender::builder(chat_id).reply_to(message_id);
+ let mut handler_entity: HandlerEntity = HandlerEntity::new(bot, message, sender);
+
+ match args.first().cloned() {
+ Some(raw_id) => {
+ handler_entity
+ .message_sender_builder
+ .set_text("Укажите id пользователя, с которого вы хотите снять мьют");
+
+ if let Ok(parsed_id) = raw_id.parse::() {
+ let on_id: TargetUser = TargetUser::Id(parsed_id);
+ unmute_member(handler_entity, chat_id, on_id).await?;
+ } else {
+ handler_entity
+ .message_sender_builder
+ .build()
+ .send(&handler_entity.bot_instance)
+ .await
+ .unwrap();
+ }
+ }
+ None => {
+ if handler_entity.message_reciever.reply_to_message().is_none() {
+ handler_entity
+ .message_sender_builder
+ .text(UNMUTE_COMMAND_HELP)
+ .parse_mode(ParseMode::HTML)
+ .build()
+ .send(&handler_entity.bot_instance)
+ .await
+ .unwrap();
+ } else {
+ let on_reply = TargetUser::Reply(handler_entity.message_reciever.clone());
+ unmute_member(handler_entity, chat_id, on_reply).await?;
+ }
+ }
+ }
+
+ Ok(EventReturn::Finish)
+}
diff --git a/src/handlers/commands_handler/unmute_command.rs b/src/handlers/commands_handler/unmute_command.rs
deleted file mode 100644
index c3618c9..0000000
--- a/src/handlers/commands_handler/unmute_command.rs
+++ /dev/null
@@ -1,89 +0,0 @@
-use telers::{
- enums::ParseMode,
- event::{telegram::HandlerResult, EventReturn},
- filters::CommandObject,
- types::Message,
- utils::text::{html_formatter::Formatter as HTMLFormatter, Builder as TextBuilder},
- Bot,
-};
-
-use crate::{
- handlers::actions::unmute::unmute,
- types::{
- enums::target_user::TargetUser,
- structs::{
- handler_entity::HandlerEntity,
- message_sender::{MessageSender, MessageSenderBuilder},
- },
- },
-};
-
-async fn unmute_help(sender: MessageSenderBuilder, bot: &Bot) {
- let help_response_builder: TextBuilder =
- TextBuilder::new(HTMLFormatter::default())
- .monowidth("/unmute [ID | REPLY]")
- .text(
- "
- \n\nВведите либо ID юзера, либо ответьте на \
- сообщение участника чата, с которого вы хотите \
- снять мьют.
- ",
- );
-
- let help_response: &str = help_response_builder.get_text();
-
- sender
- .text(help_response)
- .parse_mode(ParseMode::HTML)
- .build()
- .send(bot)
- .await
- .unwrap();
-}
-
-pub async fn unmute_command(bot: Bot, message: Message, command: CommandObject) -> HandlerResult {
- let args: Vec<&str> = command.args.iter().map(|boxed| &**boxed).collect();
-
- let (message_id, chat_id): (i64, i64) = (message.id(), message.chat().id());
- let sender: MessageSenderBuilder = MessageSender::builder(chat_id).reply_to(message_id);
-
- let mut handler_entity: HandlerEntity = HandlerEntity {
- bot_instance: bot,
- message_reciever: message,
- message_sender_builder: sender,
- };
-
- match args.first().cloned() {
- None => {
- if handler_entity.message_reciever.reply_to_message().is_none() {
- unmute_help(
- handler_entity.message_sender_builder,
- &handler_entity.bot_instance,
- )
- .await;
- } else {
- let on_reply = TargetUser::Reply(handler_entity.message_reciever.clone());
- unmute(handler_entity, chat_id, on_reply).await?;
- }
- }
- Some(id) => {
- handler_entity
- .message_sender_builder
- .set_text("Укажите id пользователя, с которого вы хотите снять мьют");
-
- if let Ok(parsed_id) = id.parse::() {
- let on_id: TargetUser = TargetUser::Id(parsed_id);
- unmute(handler_entity, chat_id, on_id).await?;
- } else {
- handler_entity
- .message_sender_builder
- .build()
- .send(&handler_entity.bot_instance)
- .await
- .unwrap();
- }
- }
- }
-
- Ok(EventReturn::Finish)
-}
diff --git a/src/handlers/dice_handler/dice.rs b/src/handlers/dice_handler/dice.rs
index 23779e5..ffaca08 100644
--- a/src/handlers/dice_handler/dice.rs
+++ b/src/handlers/dice_handler/dice.rs
@@ -5,7 +5,7 @@ use telers::{
};
use crate::{
- handlers::actions::{ban::ban, mute::mute},
+ handlers::actions::{ban::ban_member, mute::mute_member},
types::{
enums::{target_user::TargetUser, time_metrics::TimeMetrics},
structs::{handler_entity::HandlerEntity, message_sender::MessageSender},
@@ -18,24 +18,21 @@ const CASINO_DELAY_MS: u64 = 1500u64;
pub async fn dice_handler(bot: Bot, message: Message) -> HandlerResult {
let (chat_id, dice): (i64, Dice) = (message.chat().id(), message.dice().unwrap().clone());
- let handler_entity: HandlerEntity = HandlerEntity {
- bot_instance: bot,
- message_reciever: message,
- message_sender_builder: MessageSender::builder(chat_id),
- };
+ let sender = MessageSender::builder(chat_id);
+ let handler_entity: HandlerEntity = HandlerEntity::new(bot, message, sender);
let (mute_time, emoji): (TimeMetrics, &str) = (TimeMetrics::Days(dice.value), &dice.emoji);
let target: TargetUser = TargetUser::Reply(handler_entity.message_reciever.clone());
match emoji {
"🎲" => {
- mute(handler_entity, chat_id, target, (mute_time, DICE_DELAY_MS)).await?;
+ mute_member(handler_entity, chat_id, target, (mute_time, DICE_DELAY_MS)).await?;
}
"🎰" => {
if dice.value == 64 {
- ban(handler_entity, chat_id, target, CASINO_DELAY_MS).await?;
+ ban_member(handler_entity, chat_id, target, CASINO_DELAY_MS).await?;
} else {
- mute(
+ mute_member(
handler_entity,
chat_id,
target,
diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs
index 13a6c8e..75beadb 100644
--- a/src/handlers/mod.rs
+++ b/src/handlers/mod.rs
@@ -1,3 +1,3 @@
pub mod actions;
-pub mod commands_handler;
+pub mod command_handlers;
pub mod dice_handler;
diff --git a/src/main.rs b/src/main.rs
index b5141a4..0f2838a 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,4 +1,5 @@
use dotenvy::dotenv;
+
use telers::{
enums::ContentType,
event::ToServiceProvider,
@@ -8,6 +9,7 @@ use telers::{
use tracing_subscriber::{fmt, layer::SubscriberExt as _, util::SubscriberInitExt as _, EnvFilter};
+mod assets;
mod middlewares;
mod types;
mod utils;
@@ -16,7 +18,7 @@ use middlewares::admin_check_middleware::AdminCheck;
mod handlers;
use handlers::{
- commands_handler::{help_command::help, unmute_command::unmute_command},
+ command_handlers::{help_command::help, mute_command::mute, unmute_command::unmute},
dice_handler::dice::dice_handler,
};
@@ -50,9 +52,14 @@ async fn main() {
admin_commands
.message
- .register(unmute_command)
+ .register(unmute)
.filter(Command::one("unmute"));
+ admin_commands
+ .message
+ .register(mute)
+ .filter(Command::one("mute"));
+
admin_commands
.message
.inner_middlewares
diff --git a/src/middlewares/admin_check_middleware.rs b/src/middlewares/admin_check_middleware.rs
index a6b1afd..ece0e1a 100644
--- a/src/middlewares/admin_check_middleware.rs
+++ b/src/middlewares/admin_check_middleware.rs
@@ -35,7 +35,7 @@ impl InnerMiddleware for AdminCheck {
return Ok(response);
} else {
MessageSender::builder(chat_id)
- .text("У вам нет прав администратора, чтобы использовать эту команду.")
+ .text("У ваc нет прав администратора, чтобы использовать эту команду.")
.build()
.send(&bot)
.await
diff --git a/src/types/enums/target_user.rs b/src/types/enums/target_user.rs
index 10959f6..4a710f3 100644
--- a/src/types/enums/target_user.rs
+++ b/src/types/enums/target_user.rs
@@ -9,6 +9,7 @@ use telers::{
pub enum TargetUser {
Id(i64),
Reply(Message),
+ CurrentMessage(Message),
#[default]
None,
}
@@ -24,6 +25,7 @@ impl TargetUser {
None
}
}
+ Self::CurrentMessage(msg) => msg.from().map(|user| user.id),
Self::None => None,
}
}
@@ -53,7 +55,14 @@ impl TargetUser {
None
}
}
- _ => None,
+ Self::CurrentMessage(msg) => {
+ if let Some(replied_msg) = msg.from() {
+ replied_msg.username.clone()
+ } else {
+ None
+ }
+ }
+ Self::None => None,
}
}
}
diff --git a/src/types/enums/time_metrics.rs b/src/types/enums/time_metrics.rs
index 02dddbe..4fb5b1f 100644
--- a/src/types/enums/time_metrics.rs
+++ b/src/types/enums/time_metrics.rs
@@ -9,6 +9,24 @@ pub enum TimeMetrics {
}
impl TimeMetrics {
+ pub fn from(metric: impl Into<&'static str>, duration: i64) -> Self {
+ match metric.into() {
+ "min" | "minutes" | "minute" | "минута" | "минуты" | "минут" | "мин" => {
+ Self::Minutes(duration)
+ }
+ "h" | "hours" | "hour" | "час" | "часов" | "ч" => Self::Hours(duration),
+ "d" | "days" | "day" | "день" | "дня" | "дней" | "д" => {
+ Self::Days(duration)
+ }
+ "w" | "weeks" | "week" | "недель" | "недели" | "неделя" | "н" => {
+ Self::Weeks(duration)
+ }
+ "m" | "mounths" | "mounth" | "месяц" | "месяца" | "месяцев" | "мес" => {
+ Self::Mounths(duration)
+ }
+ _ => Self::Days(duration),
+ }
+ }
pub fn extract(self) -> i64 {
match self {
Self::Minutes(min) => min,
diff --git a/src/types/structs/handler_entity.rs b/src/types/structs/handler_entity.rs
index bb70d4c..c8af401 100644
--- a/src/types/structs/handler_entity.rs
+++ b/src/types/structs/handler_entity.rs
@@ -10,6 +10,13 @@ pub struct HandlerEntity {
}
impl HandlerEntity {
+ pub fn new(bot: Bot, msg: Message, msg_builder: MessageSenderBuilder) -> Self {
+ Self {
+ bot_instance: bot,
+ message_reciever: msg,
+ message_sender_builder: msg_builder,
+ }
+ }
#[inline]
pub fn extract(self) -> ExtractedEntityData {
(
diff --git a/src/types/structs/message_sender.rs b/src/types/structs/message_sender.rs
index 1afafc8..8f75a38 100644
--- a/src/types/structs/message_sender.rs
+++ b/src/types/structs/message_sender.rs
@@ -30,6 +30,7 @@ pub struct MessageSenderBuilder {
send_message: SendMessage,
}
+#[allow(dead_code)]
impl MessageSenderBuilder {
pub fn parse_mode(mut self, parse_mode: ParseMode) -> Self {
self.send_message = self.send_message.parse_mode(parse_mode);
diff --git a/src/types/traits/countable_interface.rs b/src/types/traits/countable_interface.rs
index 6dcccfa..808c5e2 100644
--- a/src/types/traits/countable_interface.rs
+++ b/src/types/traits/countable_interface.rs
@@ -1,4 +1,4 @@
-#[must_use]
+#[allow(dead_code)]
pub trait ICountable {
fn new() -> Self;
diff --git a/src/utils/general/get_duration.rs b/src/utils/general/get_duration.rs
index 27b9e5a..f43333e 100644
--- a/src/utils/general/get_duration.rs
+++ b/src/utils/general/get_duration.rs
@@ -1,8 +1,7 @@
use chrono::NaiveDateTime;
use crate::types::{
- enums::time_metrics::TimeMetrics, structs::countable_time::CountableTime,
- traits::countable_interface::ICountable, TimeValues,
+ structs::countable_time::CountableTime, traits::countable_interface::ICountable, TimeValues,
};
use super::unrestrict_date::unrestrict_date;
diff --git a/src/utils/general/mod.rs b/src/utils/general/mod.rs
index 163166d..cbe6b73 100644
--- a/src/utils/general/mod.rs
+++ b/src/utils/general/mod.rs
@@ -1,2 +1,3 @@
pub mod get_duration;
+pub mod parse_boxed_array;
pub mod unrestrict_date;
diff --git a/src/utils/general/parse_boxed_array.rs b/src/utils/general/parse_boxed_array.rs
new file mode 100644
index 0000000..4d97eb4
--- /dev/null
+++ b/src/utils/general/parse_boxed_array.rs
@@ -0,0 +1,11 @@
+pub fn parse_box<'a>(boxed: Box) -> &'a str {
+ unsafe { &*Box::into_raw(boxed) }
+}
+
+#[allow(clippy::boxed_local)]
+pub fn parse_boxed<'a>(boxed_array: Box<[Box]>) -> Vec<&'a str> {
+ boxed_array
+ .iter()
+ .map(|arg| parse_box(arg.to_owned()))
+ .collect()
+}
diff --git a/src/utils/telegram/get_bot_response_text.rs b/src/utils/telegram/get_bot_response_text.rs
deleted file mode 100644
index 084569c..0000000
--- a/src/utils/telegram/get_bot_response_text.rs
+++ /dev/null
@@ -1,32 +0,0 @@
-use telers::{
- types::Message,
- utils::text::{html_formatter::Formatter as HTMLFormatter, Builder as TextBuilder},
-};
-
-pub fn get_bot_response_text(
- msg: &Message,
- action: impl Into,
- command: impl Into,
-) -> Option {
- match msg {
- Message::Dice(_) => Some(format!(
- "Ответьте на сообщение, чтобы {} участника чата.",
- action.into()
- )),
- Message::Text(_) => {
- let help_response_builder: TextBuilder =
- TextBuilder::new(HTMLFormatter::default())
- .monowidth(command.into())
- .text(format!(
- "
- \n\nВведите либо ID юзера, либо ответьте на \
- сообщение участника чата, с которого вы хотите {}.
- ",
- action.into()
- ));
-
- Some(help_response_builder.get_text().into())
- }
- _ => None,
- }
-}
diff --git a/src/utils/telegram/mod.rs b/src/utils/telegram/mod.rs
index b155bbf..ff0e142 100644
--- a/src/utils/telegram/mod.rs
+++ b/src/utils/telegram/mod.rs
@@ -2,6 +2,5 @@ pub mod admin_check;
pub mod ban_member;
pub mod demote;
pub mod get_all_admins;
-pub mod get_bot_response_text;
pub mod restrict;
pub mod try_do;
diff --git a/src/utils/telegram/try_do.rs b/src/utils/telegram/try_do.rs
index ee3dcf9..11b704a 100644
--- a/src/utils/telegram/try_do.rs
+++ b/src/utils/telegram/try_do.rs
@@ -1,6 +1,6 @@
use telers::{errors::SessionErrorKind as ErrorKind, event::EventReturn, Bot};
-use crate::types::{enums::target_user::TargetUser, structs::message_sender::MessageSender};
+use crate::types::structs::message_sender::MessageSender;
use std::future::Future;
use super::demote::demote_user;