diff --git a/bot/app/bot.py b/bot/app/bot.py index fc0f867..d78f3ea 100644 --- a/bot/app/bot.py +++ b/bot/app/bot.py @@ -38,7 +38,7 @@ class States(StatesGroup): def get_queue_stats_text(queue: Queue) -> str: - s = f"Название: {queue.name}" f"Количество участников: {len(queue.users)}" + s = textbook.queue_stats.format(name=queue.name, count=len(queue.users)) return s @@ -127,6 +127,7 @@ async def queue_handler(call: types.CallbackQuery, queue_id: str = None): message_id=call.message.id, text=get_queue_stats_text(queue), reply_markup=keyboards.queue_menu(), + parse_mode="html", ) await bot.answer_callback_query(callback_query_id=call.id) @@ -156,6 +157,7 @@ async def edit_queue_name_handler(call: types.CallbackQuery): reply_markup=keyboards.edit_name(), ) + @bot.callback_query_handler(func=lambda c: c.data == "cancel", state=States.changing_queue_name) async def edit_queue_name_cancel_handler(call: types.CallbackQuery): async with bot.retrieve_data( @@ -165,6 +167,38 @@ async def edit_queue_name_cancel_handler(call: types.CallbackQuery): await queue_handler(call, queue_id) +@bot.message_handler(content_types=["text"], state=States.changing_queue_name) +async def update_queue_name(msg: Message): + if len(msg.text) > 40 or "\n" in msg.text: + await bot.send_message( + chat_id=msg.chat.id, text=textbook.edit_name_error + ) + return None + async with bot.retrieve_data( + user_id=msg.from_user.id, chat_id=msg.chat.id + ) as state_data: + queue_id = state_data.get("queue_id", None) + queue = session.query(Queue).filter_by(id=queue_id).first() + if not queue: + await bot.send_message( + chat_id=msg.chat.id, text=textbook.edit_name_error + ) + return None + setattr(queue, "name", msg.text) + session.commit() + await bot.send_message( + chat_id=msg.chat.id, text=textbook.edit_queue_name_success + ) + await asyncio.sleep(1) + await bot.set_state(user_id=msg.from_user.id, state=States.default) + await bot.send_message( + chat_id=msg.chat.id, + text=get_queue_stats_text(queue), + reply_markup=keyboards.queue_menu(), + parse_mode="html", + ) + + @bot.callback_query_handler(func=lambda c: c.data == "settings") async def settings(call: types.CallbackQuery): await bot.set_state(user_id=call.from_user.id, state=States.default) @@ -176,9 +210,6 @@ async def settings(call: types.CallbackQuery): ) - - - @bot.callback_query_handler(func=lambda c: c.data == "edit_name") async def edit_name_handler(call: types.CallbackQuery): await bot.set_state(user_id=call.from_user.id, state=States.changing_name) diff --git a/bot/app/keyboards.py b/bot/app/keyboards.py index 739f06a..fda21fd 100644 --- a/bot/app/keyboards.py +++ b/bot/app/keyboards.py @@ -43,6 +43,6 @@ def settings() -> keyboard: def edit_name() -> keyboard: return keyboard( keyboard=[ - [button(text="❌ Отмена", callback_data="settings")], + [button(text="❌ Отмена", callback_data="cancel")], ] ) diff --git a/bot/app/textbook.py b/bot/app/textbook.py index beaa471..86b4500 100644 --- a/bot/app/textbook.py +++ b/bot/app/textbook.py @@ -6,10 +6,12 @@ new_queue_created = ( ) queue_limit = "Ты достиг лимита очередей (4). Удали свои очереди, или воспользуйся другим аккаунтом!" my_queues_list = "У тебя {count} очередь/и/ей" +queue_stats = "Название: {name}\nКоличество участников: {count}" error = "Произошла непредвиденная ошибка!" queue_operational_error = "Произошла ошибка! Либо вы не являетесь владельцем очереди, либо данные устарели и вам следует заново выбрать очередь в меню!" edit_queue_name = "Введи новое имя очереди, имя должно быть не длинее 40 символов и не должно содержать переносов строки" settings = "🛠 Меню настроек" edit_name = "Ты можешь поменять свое имя, которое будет отображаться в очередях. По умолчанию используется твое имя в Телеграме. Имя должно быть не длинее 40 символов и не иметь переносов строки. Пришли мне новое имя, или нажми кнопку \"❌ Отмена\"" edit_name_success = "Имя изменено!" +edit_queue_name_success = "Имя очереди изменено!" edit_name_error = "Новое имя не подходит под условия. Напиши подходящее, или нажми кнопку \"❌ Отмена\""