From d493cea3dc4bf96ac051974081134ebfc6e240c4 Mon Sep 17 00:00:00 2001 From: gitadmin Date: Sun, 21 Dec 2025 17:05:59 +0300 Subject: [PATCH] =?UTF-8?q?[=D0=92=D0=9E=D0=9B=D0=9A]=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D1=8F=D0=B5=D0=BC=20httpx?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- volk_telegram_testing.py | 212 +++++++++++++++++++++------------------ 1 file changed, 112 insertions(+), 100 deletions(-) diff --git a/volk_telegram_testing.py b/volk_telegram_testing.py index 6142401..2807192 100644 --- a/volk_telegram_testing.py +++ b/volk_telegram_testing.py @@ -1,5 +1,6 @@ import os import logging +import httpx import asyncio import time import sys @@ -131,17 +132,21 @@ async def test_telegram_publish(): logger.info(final_text) logger.info("=" * 80) - # Создаем бота с отключенным HTTP/2 + # Создаем httpx клиент и бота с отключенным HTTP/2 + httpx_client = None try: + # Создаём клиент БЕЗ HTTP/2 + logger.info("Создание httpx клиента с отключенным HTTP/2...") + httpx_client = httpx.AsyncClient( + http2=False, # ← отключаем HTTP/2 + timeout=20.0, # явный таймаут + follow_redirects=True + ) + logger.info("httpx клиент успешно создан с http2=False") + + # Создаем бота с отключенным HTTP/2 logger.info("Создание объекта Bot с отключенным HTTP/2...") - logger.info("Настройка HTTPXRequest с явным указанием HTTP/1.1...") - - # Создаем HTTPXRequest с явным указанием HTTP/1.1 (отключаем HTTP/2) - request = HTTPXRequest(http_version="1.1") - logger.info("HTTPXRequest создан с http_version='1.1' (HTTP/2 отключен)") - - # Создаем Bot с кастомным request - bot = Bot(token=POSTER_BOT_TOKEN, request=request) + bot = Bot(token=POSTER_BOT_TOKEN, client=httpx_client) logger.info("Объект Bot успешно создан с отключенным HTTP/2") # Получаем информацию о боте @@ -203,98 +208,105 @@ async def test_telegram_publish(): import traceback logger.error(f"Трассировка стека:\n{traceback.format_exc()}") - except Exception as e: - logger.error(f"ОШИБКА при создании объекта Bot: {e}") - logger.error(f" Тип ошибки: {type(e).__name__}") - logger.error(f" Все атрибуты: {vars(e)}") - return False + # Публикуем тестовое сообщение + try: + logger.info("=" * 80) + logger.info("ПОПЫТКА ОТПРАВКИ ТЕСТОВОГО СООБЩЕНИЯ") + logger.info("=" * 80) + logger.info(f"Параметры запроса:") + logger.info(f" chat_id: {CHANNEL_ID}") + logger.info(f" text_length: {len(final_text)}") + logger.info(f" parse_mode: HTML") + logger.info(f" disable_notification: {PUBLISH_SILENTLY}") + logger.info(f" disable_web_page_preview: True") + + start_time = datetime.now() + message = await bot.send_message( + chat_id=CHANNEL_ID, + text=final_text, + parse_mode="HTML", + disable_notification=PUBLISH_SILENTLY, + disable_web_page_preview=True + ) + end_time = datetime.now() + duration = (end_time - start_time).total_seconds() + + logger.info("=" * 80) + logger.info("СООБЩЕНИЕ УСПЕШНО ОТПРАВЛЕНО!") + logger.info("=" * 80) + logger.info(f"Message ID: {message.message_id}") + logger.info(f"Chat ID: {message.chat.id}") + logger.info(f"Chat type: {message.chat.type}") + logger.info(f"Chat title: {message.chat.title if hasattr(message.chat, 'title') else 'N/A'}") + logger.info(f"Время отправки: {duration:.2f} секунд") + logger.info(f"Дата сообщения: {message.date}") + logger.info("=" * 80) + + return True + + except TimedOut as e: + logger.error("=" * 80) + logger.error("ТАЙМАУТ ПРИ ОТПРАВКЕ СООБЩЕНИЯ!") + logger.error("=" * 80) + logger.error(f"Тип ошибки: {type(e).__name__}") + logger.error(f"Сообщение: {str(e)}") + logger.error(f"Все атрибуты ошибки: {vars(e)}") + logger.error(f"Полное представление: {repr(e)}") + logger.error(f"Параметры запроса:") + logger.error(f" chat_id: {CHANNEL_ID}") + logger.error(f" text_length: {len(final_text)}") + logger.error(f" parse_mode: HTML") + return False + + except RetryAfter as e: + logger.error("=" * 80) + logger.error("ОШИБКА FLOODWAIT (429) ПРИ ОТПРАВКЕ СООБЩЕНИЯ!") + logger.error("=" * 80) + logger.error(f"Тип ошибки: {type(e).__name__}") + logger.error(f"Сообщение: {str(e)}") + logger.error(f"Необходимо подождать: {e.retry_after} секунд") + logger.error(f"Все атрибуты ошибки: {vars(e)}") + logger.error(f"Полное представление: {repr(e)}") + return False + + except TelegramError as e: + logger.error("=" * 80) + logger.error("ОШИБКА TELEGRAM ПРИ ОТПРАВКЕ СООБЩЕНИЯ!") + logger.error("=" * 80) + logger.error(f"Тип ошибки: {type(e).__name__}") + logger.error(f"Сообщение: {str(e)}") + logger.error(f"Все атрибуты ошибки: {vars(e)}") + logger.error(f"Полное представление: {repr(e)}") + logger.error(f"Параметры запроса:") + logger.error(f" chat_id: {CHANNEL_ID}") + logger.error(f" text_length: {len(final_text)}") + logger.error(f" parse_mode: HTML") + return False + + except Exception as e: + logger.error("=" * 80) + logger.error("НЕОЖИДАННАЯ ОШИБКА ПРИ ОТПРАВКЕ СООБЩЕНИЯ!") + logger.error("=" * 80) + logger.error(f"Тип ошибки: {type(e).__name__}") + logger.error(f"Сообщение: {str(e)}") + logger.error(f"Все атрибуты ошибки: {vars(e) if hasattr(e, '__dict__') else 'N/A'}") + logger.error(f"Полное представление: {repr(e)}") + import traceback + logger.error(f"Трассировка стека:\n{traceback.format_exc()}") + return False - # Публикуем тестовое сообщение - try: - logger.info("=" * 80) - logger.info("ПОПЫТКА ОТПРАВКИ ТЕСТОВОГО СООБЩЕНИЯ") - logger.info("=" * 80) - logger.info(f"Параметры запроса:") - logger.info(f" chat_id: {CHANNEL_ID}") - logger.info(f" text_length: {len(final_text)}") - logger.info(f" parse_mode: HTML") - logger.info(f" disable_notification: {PUBLISH_SILENTLY}") - logger.info(f" disable_web_page_preview: True") - - start_time = datetime.now() - message = await bot.send_message( - chat_id=CHANNEL_ID, - text=final_text, - parse_mode="HTML", - disable_notification=PUBLISH_SILENTLY, - disable_web_page_preview=True - ) - end_time = datetime.now() - duration = (end_time - start_time).total_seconds() - - logger.info("=" * 80) - logger.info("СООБЩЕНИЕ УСПЕШНО ОТПРАВЛЕНО!") - logger.info("=" * 80) - logger.info(f"Message ID: {message.message_id}") - logger.info(f"Chat ID: {message.chat.id}") - logger.info(f"Chat type: {message.chat.type}") - logger.info(f"Chat title: {message.chat.title if hasattr(message.chat, 'title') else 'N/A'}") - logger.info(f"Время отправки: {duration:.2f} секунд") - logger.info(f"Дата сообщения: {message.date}") - logger.info("=" * 80) - - return True - - except TimedOut as e: - logger.error("=" * 80) - logger.error("ТАЙМАУТ ПРИ ОТПРАВКЕ СООБЩЕНИЯ!") - logger.error("=" * 80) - logger.error(f"Тип ошибки: {type(e).__name__}") - logger.error(f"Сообщение: {str(e)}") - logger.error(f"Все атрибуты ошибки: {vars(e)}") - logger.error(f"Полное представление: {repr(e)}") - logger.error(f"Параметры запроса:") - logger.error(f" chat_id: {CHANNEL_ID}") - logger.error(f" text_length: {len(final_text)}") - logger.error(f" parse_mode: HTML") - return False - - except RetryAfter as e: - logger.error("=" * 80) - logger.error("ОШИБКА FLOODWAIT (429) ПРИ ОТПРАВКЕ СООБЩЕНИЯ!") - logger.error("=" * 80) - logger.error(f"Тип ошибки: {type(e).__name__}") - logger.error(f"Сообщение: {str(e)}") - logger.error(f"Необходимо подождать: {e.retry_after} секунд") - logger.error(f"Все атрибуты ошибки: {vars(e)}") - logger.error(f"Полное представление: {repr(e)}") - return False - - except TelegramError as e: - logger.error("=" * 80) - logger.error("ОШИБКА TELEGRAM ПРИ ОТПРАВКЕ СООБЩЕНИЯ!") - logger.error("=" * 80) - logger.error(f"Тип ошибки: {type(e).__name__}") - logger.error(f"Сообщение: {str(e)}") - logger.error(f"Все атрибуты ошибки: {vars(e)}") - logger.error(f"Полное представление: {repr(e)}") - logger.error(f"Параметры запроса:") - logger.error(f" chat_id: {CHANNEL_ID}") - logger.error(f" text_length: {len(final_text)}") - logger.error(f" parse_mode: HTML") - return False - - except Exception as e: - logger.error("=" * 80) - logger.error("НЕОЖИДАННАЯ ОШИБКА ПРИ ОТПРАВКЕ СООБЩЕНИЯ!") - logger.error("=" * 80) - logger.error(f"Тип ошибки: {type(e).__name__}") - logger.error(f"Сообщение: {str(e)}") - logger.error(f"Все атрибуты ошибки: {vars(e) if hasattr(e, '__dict__') else 'N/A'}") - logger.error(f"Полное представление: {repr(e)}") - import traceback - logger.error(f"Трассировка стека:\n{traceback.format_exc()}") - return False + finally: + # Закрываем httpx клиент + if httpx_client is not None: + try: + logger.info("Закрытие httpx клиента...") + await httpx_client.aclose() + logger.info("httpx клиент успешно закрыт") + except Exception as e: + logger.error(f"Ошибка при закрытии httpx клиента: {e}") + logger.error(f" Тип ошибки: {type(e).__name__}") + import traceback + logger.error(f"Трассировка стека:\n{traceback.format_exc()}") async def main(): """Главная функция"""