diff --git a/helper_bot/handlers/callback/callback_handlers.py b/helper_bot/handlers/callback/callback_handlers.py index ee0b2f4..f9c073e 100644 --- a/helper_bot/handlers/callback/callback_handlers.py +++ b/helper_bot/handlers/callback/callback_handlers.py @@ -219,14 +219,14 @@ async def change_page( reply_markup=keyboard ) else: - message_user = get_banned_users_list(int(page_number) * 7 - 7, bot_db) + message_user = await get_banned_users_list(int(page_number) * 7 - 7, bot_db) await call.bot.edit_message_text( chat_id=call.message.chat.id, message_id=call.message.message_id, text=message_user ) - buttons = get_banned_users_buttons(bot_db) + buttons = await get_banned_users_buttons(bot_db) keyboard = create_keyboard_with_pagination(page_number, len(buttons), buttons, 'unlock') await call.bot.edit_message_reply_markup( chat_id=call.message.chat.id, diff --git a/helper_bot/utils/helper_func.py b/helper_bot/utils/helper_func.py index 455a6d9..078bb1b 100644 --- a/helper_bot/utils/helper_func.py +++ b/helper_bot/utils/helper_func.py @@ -696,9 +696,22 @@ async def get_banned_users_list(offset: int, bot_db): if isinstance(unban_date, (int, float)): unban_datetime = datetime.fromtimestamp(unban_date) safe_unban_date = unban_datetime.strftime("%d-%m-%Y %H:%M") - else: - # Если это уже datetime объект + elif isinstance(unban_date, str): + # Если это строка, попытаемся её обработать + try: + # Попробуем преобразовать строку в timestamp + timestamp = int(unban_date) + unban_datetime = datetime.fromtimestamp(timestamp) + safe_unban_date = unban_datetime.strftime("%d-%m-%Y %H:%M") + except (ValueError, TypeError): + # Если не удалось, показываем как есть + safe_unban_date = html.escape(str(unban_date)) + elif hasattr(unban_date, 'strftime'): + # Если это datetime объект safe_unban_date = unban_date.strftime("%d-%m-%Y %H:%M") + else: + # Для всех остальных случаев + safe_unban_date = html.escape(str(unban_date)) except (ValueError, TypeError, OSError): # В случае ошибки показываем исходное значение safe_unban_date = html.escape(str(unban_date)) diff --git a/tests/test_utils.py b/tests/test_utils.py index 7d388d5..9befce0 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -599,6 +599,24 @@ class TestUtilityFunctions: assert "Spam" in result assert "Violation" in result + @pytest.mark.asyncio + async def test_get_banned_users_list_with_string_timestamp(self): + """Тест получения списка заблокированных пользователей со строковым timestamp""" + mock_db = AsyncMock() + mock_db.get_banned_users_from_db_with_limits.return_value = [ + (123, "Spam", "1704067200"), # user_id, ban_reason, unban_date (string timestamp) + (456, "Violation", "1704153600") + ] + mock_db.get_username.return_value = None + mock_db.get_full_name_by_id.return_value = "Test User" + + result = await get_banned_users_list(0, mock_db) + + assert "Список заблокированных пользователей:" in result + assert "Test User" in result + assert "Spam" in result + assert "Violation" in result + @pytest.mark.asyncio async def test_get_banned_users_buttons(self): """Тест получения кнопок заблокированных пользователей"""