Compare commits

..

7 Commits

Author SHA1 Message Date
doryan 9a64001926 Merge pull request 'Reformat output chat messages' (#1) from dogma/gluon:fix-messages into main
Reviewed-on: #1
2024-06-07 11:47:41 +03:00
Dogma Toscarina 2f0ae08d4f handlers/{actions,command_handlers}: reformat messages
Avoid interactivity, make messages short.
2024-06-07 10:45:49 +03:00
Dogma Toscarina 06b3a473ed middlewares/admin_check_middleware: shorten error message 2024-06-07 10:41:53 +03:00
Dogma Toscarina 6e59ee1eb8 utils/telegram/try_do: shorten DEMOTE_FAILURE_MESSAGE
It would be annoying to get this long message spamming the chat window.

Such error messages should describe what has gone wrong, but not give
any guidances, advices or directions; they belong elsewhere
(documentation, wiki, etc).
2024-06-07 10:41:53 +03:00
Dogma Toscarina 18b938bf95 handlers/dice_handler/dice: make message short and concise. 2024-06-07 10:41:53 +03:00
Dogma Toscarina 9f5174c442 types/enums/time_metrics: fix grammar 2024-06-07 10:41:53 +03:00
Dogma Toscarina c6222d42f8 assets: fix help messages (mute, unmute)
There are quite some problems with the way commands are explained:

* Interactivity - command arguments gets explained as if one is
  following a guide ("insert this, enter that"). Better explain them
  without any "guidance"; use present tense to describe commands.

* Duplicity - the purpose of the command is explained over and over
  when arguments are being described.

* Separation - there is no need to divide required and optional
  command arguments into their respective sections. Their amount did
  not grow up that much for this to make sense.

* mute_command_help.html: i64 would be sufficient for developers, but
  not end users. It does not stop anyone from specifying overflowing
  integer, after all.
2024-06-07 10:41:36 +03:00
12 changed files with 38 additions and 37 deletions

View File

@ -1,10 +1,10 @@
<code>/mute [ID | REPLY] &lt;DURATION: i64 (long long int)&gt; [TIME METRIC]</code> <code>/mute [ID | REPLY] &lt;DURATION&gt; [TIME METRIC]</code>
<b>Обязательные критерий:</b> <b>Выдать мут участнику чата.</b>
<b><em>1. Участник чата</em></b>. Введите ID участника чата, либо ответьте на его сообщение, чтобы его замьютить; Использовать при ответе на сообщение или указать <code>ID</code> пользователя.
<b><em>2. Длительность</em></b>. Введите длительность мьюта, длительность должна быть не меньше нуля.
<b>Необязательные критерий:</b> <i>DURATION<i> - длительность мута.
<i>TIME METRIC<i> - метрика времени в секундах, минутах, часах и днях ([s|min|h|d|w|m]/[с|мин|ч|д|н|м]); по умолчанию используются дни.
<b><em>1. Временная метрика.</em></b> Если она не указана, то автоматически участнику чата выдаётся мьют в днях. Доступно для пользователей с административными привилегиями в чате.

View File

@ -1,6 +1,7 @@
<code>/unmute [ID | REPLY]</code> <code>/unmute [ID | UNMUTE]</code>
<b>Обязательные критерий:</b> <b>Снять мут с участника чата.</b>
<b><em>1. Участник чата</em></b>. Введите ID участника чата, либо ответьте на его сообщение, чтобы c него снять мьют. Использовать при ответе на сообщение или указать <code>ID</code> пользователя.
Доступно для пользователей с административными привилегиями в чате.

View File

@ -25,7 +25,7 @@ pub async fn ban_member(
Some(id) => id, Some(id) => id,
None => { None => {
sender_builder sender_builder
.text("Ответьте на сообщение участника чата, которого вы хотите забанить") .text("ban: нет ответа на сообщение пользователя.")
.reply_to(message.id()) .reply_to(message.id())
.build() .build()
.send(&bot) .send(&bot)
@ -40,7 +40,7 @@ pub async fn ban_member(
let callback = || async { ban_chat_member(&bot, user_id, chat_id).await }; let callback = || async { ban_chat_member(&bot, user_id, chat_id).await };
let demote_args: (&Bot, i64, i64) = (&bot, user_id, chat_id); let demote_args: (&Bot, i64, i64) = (&bot, user_id, chat_id);
sender_builder sender_builder
.set_text("Невозможно забанить участника чата, демотните своими силами и попробуйте снова"); .set_text("ban: невозможно забанить пользователя.");
if try_restrict(callback, demote_args, sender_builder.clone().build()) if try_restrict(callback, demote_args, sender_builder.clone().build())
.await .await
@ -53,7 +53,7 @@ pub async fn ban_member(
sender_builder sender_builder
.reply_to(message.id()) .reply_to(message.id())
.text(format!("Пользователь {} забанен.", banned_user_name)) .text(format!("ban: пользователь {} забанен.", banned_user_name))
.build() .build()
.send(&bot) .send(&bot)
.await?; .await?;

View File

@ -29,7 +29,7 @@ pub async fn mute_member(
Some(id) => id, Some(id) => id,
None => { None => {
sender_builder sender_builder
.text("Ответьте на сообщение участника чата, которого вы хотите замьютить") .text("mute: нет ответа на сообщение пользователя.")
.reply_to(message.id()) .reply_to(message.id())
.build() .build()
.send(&bot) .send(&bot)
@ -46,7 +46,7 @@ pub async fn mute_member(
let callback = || async { restrict(&bot, user_id, unmute_date, chat_id).await }; let callback = || async { restrict(&bot, user_id, unmute_date, chat_id).await };
sender_builder.set_text("Невозможно замьютить участника чата, демотните и попробуйте снова"); sender_builder.set_text("mute: невозможно выдать мут.");
if try_restrict(callback, demote_args, sender_builder.clone().build()) if try_restrict(callback, demote_args, sender_builder.clone().build())
.await .await
@ -60,7 +60,7 @@ pub async fn mute_member(
sender_builder sender_builder
.reply_to(message.id()) .reply_to(message.id())
.text(format!( .text(format!(
"Пользователь {} замьючен на {:?} {}.", "mute: пользователю {} выдан мут на {:?} {}.",
muted_user_name, mute_duration, postfix muted_user_name, mute_duration, postfix
)) ))
.build() .build()

View File

@ -29,7 +29,7 @@ pub async fn unmute_member(
if let Err(error) = bot.send(bot_action).await { if let Err(error) = bot.send(bot_action).await {
sender_builder sender_builder
.text(format!( .text(format!(
"Невозможно снять мьют с участника чата по причине: {error:?}" "unmute: невозможно снять мут с пользователя: {error:?}"
)) ))
.build() .build()
.send(&bot) .send(&bot)
@ -40,7 +40,7 @@ pub async fn unmute_member(
sender_builder sender_builder
.reply_to(message.id()) .reply_to(message.id())
.text(format!("С пользователя {} был снят мьют.", muted_user_name)) .text(format!("unmute: пользователю {} удален мут.", muted_user_name))
.build() .build()
.send(&bot) .send(&bot)
.await .await

View File

@ -7,15 +7,18 @@ use telers::{
use crate::types::structs::message_sender::MessageSender; use crate::types::structs::message_sender::MessageSender;
const HELP_TEXT: &str = "\ const HELP_TEXT: &str = "\
/help - помощь по боту.\n\ Команды:\n\
/unmute - снимает с участника чата мьют, для подробностей, введите команду без аргументов \ /unmute [ID] - снять мут с участника чата.\n\
(только для админов).\n\ /mute [ID] - выдать мут участнику чата.\n\
/mute - накладывает на участника чата мьют, для подробностей, введите команду без аргументов \ \n\
(только для админов).\n\ Для получения подробной помощи по командам использовать их без аргументов.\n\
🎲 - выдаёт мут, для этого нужно отправить ТОЛЬКО эмодзи в ответ на сообщение участника. \ \n\
чата, которого вы хотите замьютить (только для админов).\n\ Эмодзи:\n\
🎰 - выдаёт бан в случае джекпота, напротив, мьют, всё так же кидайте этот эмодзи в ответ \ Отправлять в чат в ответ на сообщение другого пользователя.\n\
на сообщение участника чата, которого вы хотите замьютить/забанить (только для админов)."; \n\
🎲 - мут участнику чата на рандомный интервал времени.\n\
🎰 - мут участнику чата на рандомный интервал времени; выпадание джекпота \
отправляет в бан.";
pub async fn help(bot: Bot, message: Message) -> HandlerResult { pub async fn help(bot: Bot, message: Message) -> HandlerResult {
MessageSender::builder(message.chat().id()) MessageSender::builder(message.chat().id())

View File

@ -36,7 +36,7 @@ pub async fn mute(bot: Bot, message: Message, command: CommandObject) -> Handler
TargetUser::Id(id) TargetUser::Id(id)
} else { } else {
handler_entity.message_sender_builder handler_entity.message_sender_builder
.text("Ответьте на сообщение или укажите первым аргументом ID человека, которого вы хотите замьютить") .text("mute: нет ответа на сообщение или не указано ID пользователя.")
.build() .build()
.send(&handler_entity.bot_instance) .send(&handler_entity.bot_instance)
.await?; .await?;
@ -59,7 +59,7 @@ pub async fn mute(bot: Bot, message: Message, command: CommandObject) -> Handler
handler_entity handler_entity
.message_sender_builder .message_sender_builder
.set_text("Укажите число, характеризующее длительность мьюта."); .set_text("mute: не указана длительность (число).");
match args.get(duration_argument_position).cloned() { match args.get(duration_argument_position).cloned() {
Some(duration_str) => { Some(duration_str) => {

View File

@ -27,7 +27,7 @@ pub async fn unmute(bot: Bot, message: Message, command: CommandObject) -> Handl
Some(raw_id) => { Some(raw_id) => {
handler_entity handler_entity
.message_sender_builder .message_sender_builder
.set_text("Укажите id пользователя, с которого вы хотите снять мьют"); .set_text("unmute: ID пользователя не указан.");
if let Ok(parsed_id) = raw_id.parse::<i64>() { if let Ok(parsed_id) = raw_id.parse::<i64>() {
let on_id: TargetUser = TargetUser::Id(parsed_id); let on_id: TargetUser = TargetUser::Id(parsed_id);

View File

@ -44,7 +44,7 @@ pub async fn dice_handler(bot: Bot, message: Message) -> HandlerResult {
_ => { _ => {
handler_entity handler_entity
.message_sender_builder .message_sender_builder
.text("Такой эмодзи не имеет привязки к какому либо действию бота.") .text("Эмодзи не имеет привязанных действий.")
.build() .build()
.send(&handler_entity.bot_instance) .send(&handler_entity.bot_instance)
.await?; .await?;

View File

@ -36,7 +36,7 @@ impl InnerMiddleware for AdminCheck {
} else { } else {
println!("lol"); println!("lol");
MessageSender::builder(chat_id) MessageSender::builder(chat_id)
.text("У ваc нет прав администратора, чтобы использовать эту команду.") .text("Недостаточно прав для использования данной команды.")
.build() .build()
.send(&bot) .send(&bot)
.await .await

View File

@ -21,7 +21,7 @@ impl TimeMetrics {
"w" | "weeks" | "week" | "недель" | "недели" | "неделя" | "н" => { "w" | "weeks" | "week" | "недель" | "недели" | "неделя" | "н" => {
Self::Weeks(duration) Self::Weeks(duration)
} }
"m" | "mounths" | "mounth" | "месяц" | "месяца" | "месяцев" | "мес" => { "m" | "months" | "month" | "месяц" | "месяца" | "месяцев" | "мес" => {
Self::Mounths(duration) Self::Mounths(duration)
} }
_ => Self::Days(duration), _ => Self::Days(duration),

View File

@ -5,11 +5,8 @@ use std::future::Future;
use super::demote::demote_user; use super::demote::demote_user;
const DEMOTE_FAILURE_MESSAGE: &str = "\ const DEMOTE_FAILURE_MESSAGE: &str = "Команда не может быть выполнена: \
Нельзя выдать ограничение пользователю, т.к. невозможно демотнуть \ не удалось удалить административные привилегии пользователя.";
участника посредством бота, если ему выдан админ при помощи других \
админов или владельца чата.\
";
pub async fn try_restrict<F, R>( pub async fn try_restrict<F, R>(
future_callback: F, future_callback: F,