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

View File

@ -29,7 +29,7 @@ pub async fn mute_member(
Some(id) => id,
None => {
sender_builder
.text("Ответьте на сообщение участника чата, которого вы хотите замьютить")
.text("mute: нет ответа на сообщение пользователя.")
.reply_to(message.id())
.build()
.send(&bot)
@ -46,7 +46,7 @@ pub async fn mute_member(
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())
.await
@ -60,7 +60,7 @@ pub async fn mute_member(
sender_builder
.reply_to(message.id())
.text(format!(
"Пользователь {} замьючен на {:?} {}.",
"mute: пользователю {} выдан мут на {:?} {}.",
muted_user_name, mute_duration, postfix
))
.build()

View File

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

View File

@ -7,15 +7,18 @@ use telers::{
use crate::types::structs::message_sender::MessageSender;
const HELP_TEXT: &str = "\
/help - помощь по боту.\n\
/unmute - снимает с участника чата мьют, для подробностей, введите команду без аргументов \
(только для админов).\n\
/mute - накладывает на участника чата мьют, для подробностей, введите команду без аргументов \
(только для админов).\n\
🎲 - выдаёт мут, для этого нужно отправить ТОЛЬКО эмодзи в ответ на сообщение участника. \
чата, которого вы хотите замьютить (только для админов).\n\
🎰 - выдаёт бан в случае джекпота, напротив, мьют, всё так же кидайте этот эмодзи в ответ \
на сообщение участника чата, которого вы хотите замьютить/забанить (только для админов).";
Команды:\n\
/unmute [ID] - снять мут с участника чата.\n\
/mute [ID] - выдать мут участнику чата.\n\
\n\
Для получения подробной помощи по командам использовать их без аргументов.\n\
\n\
Эмодзи:\n\
Отправлять в чат в ответ на сообщение другого пользователя.\n\
\n\
🎲 - мут участнику чата на рандомный интервал времени.\n\
🎰 - мут участнику чата на рандомный интервал времени; выпадание джекпота \
отправляет в бан.";
pub async fn help(bot: Bot, message: Message) -> HandlerResult {
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)
} else {
handler_entity.message_sender_builder
.text("Ответьте на сообщение или укажите первым аргументом ID человека, которого вы хотите замьютить")
.text("mute: нет ответа на сообщение или не указано ID пользователя.")
.build()
.send(&handler_entity.bot_instance)
.await?;
@ -59,7 +59,7 @@ pub async fn mute(bot: Bot, message: Message, command: CommandObject) -> Handler
handler_entity
.message_sender_builder
.set_text("Укажите число, характеризующее длительность мьюта.");
.set_text("mute: не указана длительность (число).");
match args.get(duration_argument_position).cloned() {
Some(duration_str) => {

View File

@ -27,7 +27,7 @@ pub async fn unmute(bot: Bot, message: Message, command: CommandObject) -> Handl
Some(raw_id) => {
handler_entity
.message_sender_builder
.set_text("Укажите id пользователя, с которого вы хотите снять мьют");
.set_text("unmute: ID пользователя не указан.");
if let Ok(parsed_id) = raw_id.parse::<i64>() {
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
.message_sender_builder
.text("Такой эмодзи не имеет привязки к какому либо действию бота.")
.text("Эмодзи не имеет привязанных действий.")
.build()
.send(&handler_entity.bot_instance)
.await?;

View File

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

View File

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

View File

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