From 72691307776ea3da860ebf5064af3749f1788d44 Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 23 Jan 2026 14:02:53 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=86=D0=B5=D1=81=D1=81=D0=B0=20=D0=B1=D0=BB=D0=BE=D0=BA=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=BA=D0=B8=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D0=B5=D0=B9=20=D0=B2=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=87=D0=B8=D0=BA?= =?UTF-8?q?=D0=B0=D1=85=20callback?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Обновлена ​​функция `process_ban_user`, теперь в качестве параметра для получения сведений о пользователе используется `bot_db`. - Улучшена обработка ошибок в сценариях, когда пользователь не найден. - Введен единый формат отображения информации о пользователе с помощью `format_user_info`. - Изменено управление состоянием в соответствии с новым алгоритмом ожидания сведений о блокировке. --- .../handlers/callback/callback_handlers.py | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/helper_bot/handlers/callback/callback_handlers.py b/helper_bot/handlers/callback/callback_handlers.py index f9c073e..198a9b2 100644 --- a/helper_bot/handlers/callback/callback_handlers.py +++ b/helper_bot/handlers/callback/callback_handlers.py @@ -13,6 +13,7 @@ from helper_bot.handlers.voice.services import AudioFileService from helper_bot.keyboards.keyboards import create_keyboard_with_pagination, get_reply_keyboard_admin, \ create_keyboard_for_ban_reason from helper_bot.utils.helper_func import get_banned_users_list, get_banned_users_buttons +from helper_bot.handlers.admin.utils import format_user_info from helper_bot.utils.base_dependency_factory import get_global_instance from .dependency_factory import get_post_publish_service, get_ban_service from .exceptions import UserBlockedBotError, PostNotFoundError, UserNotFoundError, PublishError, BanError @@ -125,7 +126,7 @@ async def ban_user_from_post(call: CallbackQuery, **kwargs): @callback_router.callback_query(F.data.contains(CALLBACK_BAN)) @track_time("process_ban_user", "callback_handlers") @track_errors("callback_handlers", "process_ban_user") -async def process_ban_user(call: CallbackQuery, state: FSMContext, **kwargs): +async def process_ban_user(call: CallbackQuery, state: FSMContext, bot_db: MagicData("bot_db"), **kwargs): ban_service = get_ban_service() # TODO: переделать на MagicData user_id = call.data[4:] @@ -140,17 +141,33 @@ async def process_ban_user(call: CallbackQuery, state: FSMContext, **kwargs): return try: - user_name = await ban_service.ban_user(str(user_id_int), "") - await state.update_data(user_id=user_id_int, user_name=user_name, message_for_user=None, date_to_unban=None) + # Получаем username пользователя + username = await ban_service.ban_user(str(user_id_int), "") + if not username: + raise UserNotFoundError(f"Пользователь с ID {user_id_int} не найден в базе") + + # Получаем full_name пользователя из базы данных + full_name = await bot_db.get_full_name_by_id(user_id_int) + if not full_name: + full_name = 'Неизвестно' + + # Сохраняем данные в формате, совместимом с admin_handlers + await state.update_data( + target_user_id=user_id_int, + target_username=username, + target_full_name=full_name + ) + + # Используем единый формат отображения информации о пользователе + user_info = format_user_info(user_id_int, username, full_name) markup = create_keyboard_for_ban_reason() - user_name_escaped = html.escape(str(user_name)) - full_name_escaped = html.escape(str(call.message.from_user.full_name)) await call.message.answer( - text=f"Выбран пользователь:\nid: {user_id_int}\nusername: {user_name_escaped}\nИмя:{full_name_escaped}\nВыбери причину бана из списка или напиши ее в чат", + text=f"{user_info}\n\nВыбери причину бана из списка или напиши ее в чат", reply_markup=markup ) - await state.set_state('BAN_2') + await state.set_state('AWAIT_BAN_DETAILS') + logger.info(f"process_ban_user: Состояние изменено на AWAIT_BAN_DETAILS для пользователя {user_id_int}") except UserNotFoundError: markup = get_reply_keyboard_admin() await call.message.answer(text='Пользователь с таким ID не найден в базе', reply_markup=markup)