[ВОЛК] добавляем httpx
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2025-12-21 17:05:59 +03:00
parent 3cbfc15bfd
commit d493cea3dc
+105 -93
View File
@@ -1,5 +1,6 @@
import os import os
import logging import logging
import httpx
import asyncio import asyncio
import time import time
import sys import sys
@@ -131,17 +132,21 @@ async def test_telegram_publish():
logger.info(final_text) logger.info(final_text)
logger.info("=" * 80) logger.info("=" * 80)
# Создаем бота с отключенным HTTP/2 # Создаем httpx клиент и бота с отключенным HTTP/2
httpx_client = None
try: 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("Создание объекта Bot с отключенным HTTP/2...")
logger.info("Настройка HTTPXRequest с явным указанием HTTP/1.1...") bot = Bot(token=POSTER_BOT_TOKEN, client=httpx_client)
# Создаем 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)
logger.info("Объект Bot успешно создан с отключенным HTTP/2") logger.info("Объект Bot успешно создан с отключенным HTTP/2")
# Получаем информацию о боте # Получаем информацию о боте
@@ -203,98 +208,105 @@ async def test_telegram_publish():
import traceback import traceback
logger.error(f"Трассировка стека:\n{traceback.format_exc()}") logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
except Exception as e: # Публикуем тестовое сообщение
logger.error(f"ОШИБКА при создании объекта Bot: {e}") try:
logger.error(f" Тип ошибки: {type(e).__name__}") logger.info("=" * 80)
logger.error(f" Все атрибуты: {vars(e)}") logger.info("ПОПЫТКА ОТПРАВКИ ТЕСТОВОГО СООБЩЕНИЯ")
return False 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()
try: message = await bot.send_message(
logger.info("=" * 80) chat_id=CHANNEL_ID,
logger.info("ПОПЫТКА ОТПРАВКИ ТЕСТОВОГО СООБЩЕНИЯ") text=final_text,
logger.info("=" * 80) parse_mode="HTML",
logger.info(f"Параметры запроса:") disable_notification=PUBLISH_SILENTLY,
logger.info(f" chat_id: {CHANNEL_ID}") disable_web_page_preview=True
logger.info(f" text_length: {len(final_text)}") )
logger.info(f" parse_mode: HTML") end_time = datetime.now()
logger.info(f" disable_notification: {PUBLISH_SILENTLY}") duration = (end_time - start_time).total_seconds()
logger.info(f" disable_web_page_preview: True")
start_time = datetime.now() logger.info("=" * 80)
message = await bot.send_message( logger.info("СООБЩЕНИЕ УСПЕШНО ОТПРАВЛЕНО!")
chat_id=CHANNEL_ID, logger.info("=" * 80)
text=final_text, logger.info(f"Message ID: {message.message_id}")
parse_mode="HTML", logger.info(f"Chat ID: {message.chat.id}")
disable_notification=PUBLISH_SILENTLY, logger.info(f"Chat type: {message.chat.type}")
disable_web_page_preview=True logger.info(f"Chat title: {message.chat.title if hasattr(message.chat, 'title') else 'N/A'}")
) logger.info(f"Время отправки: {duration:.2f} секунд")
end_time = datetime.now() logger.info(f"Дата сообщения: {message.date}")
duration = (end_time - start_time).total_seconds() logger.info("=" * 80)
logger.info("=" * 80) return True
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 TimedOut as e: except RetryAfter as e:
logger.error("=" * 80) logger.error("=" * 80)
logger.error("ТАЙМАУТ ПРИ ОТПРАВКЕ СООБЩЕНИЯ!") logger.error("ОШИБКА FLOODWAIT (429) ПРИ ОТПРАВКЕ СООБЩЕНИЯ!")
logger.error("=" * 80) logger.error("=" * 80)
logger.error(f"Тип ошибки: {type(e).__name__}") logger.error(f"Тип ошибки: {type(e).__name__}")
logger.error(f"Сообщение: {str(e)}") logger.error(f"Сообщение: {str(e)}")
logger.error(f"Все атрибуты ошибки: {vars(e)}") logger.error(f"Необходимо подождать: {e.retry_after} секунд")
logger.error(f"Полное представление: {repr(e)}") logger.error(f"Все атрибуты ошибки: {vars(e)}")
logger.error(f"Параметры запроса:") logger.error(f"Полное представление: {repr(e)}")
logger.error(f" chat_id: {CHANNEL_ID}") return False
logger.error(f" text_length: {len(final_text)}")
logger.error(f" parse_mode: HTML")
return False
except RetryAfter as e: except TelegramError as e:
logger.error("=" * 80) logger.error("=" * 80)
logger.error("ОШИБКА FLOODWAIT (429) ПРИ ОТПРАВКЕ СООБЩЕНИЯ!") logger.error("ОШИБКА TELEGRAM ПРИ ОТПРАВКЕ СООБЩЕНИЯ!")
logger.error("=" * 80) logger.error("=" * 80)
logger.error(f"Тип ошибки: {type(e).__name__}") logger.error(f"Тип ошибки: {type(e).__name__}")
logger.error(f"Сообщение: {str(e)}") logger.error(f"Сообщение: {str(e)}")
logger.error(f"Необходимо подождать: {e.retry_after} секунд") logger.error(f"Все атрибуты ошибки: {vars(e)}")
logger.error(f"Все атрибуты ошибки: {vars(e)}") logger.error(f"Полное представление: {repr(e)}")
logger.error(f"Полное представление: {repr(e)}") logger.error(f"Параметры запроса:")
return False logger.error(f" chat_id: {CHANNEL_ID}")
logger.error(f" text_length: {len(final_text)}")
logger.error(f" parse_mode: HTML")
return False
except TelegramError as e: except Exception as e:
logger.error("=" * 80) logger.error("=" * 80)
logger.error("ОШИБКА TELEGRAM ПРИ ОТПРАВКЕ СООБЩЕНИЯ!") logger.error("НЕОЖИДАННАЯ ОШИБКА ПРИ ОТПРАВКЕ СООБЩЕНИЯ!")
logger.error("=" * 80) logger.error("=" * 80)
logger.error(f"Тип ошибки: {type(e).__name__}") logger.error(f"Тип ошибки: {type(e).__name__}")
logger.error(f"Сообщение: {str(e)}") logger.error(f"Сообщение: {str(e)}")
logger.error(f"Все атрибуты ошибки: {vars(e)}") logger.error(f"Все атрибуты ошибки: {vars(e) if hasattr(e, '__dict__') else 'N/A'}")
logger.error(f"Полное представление: {repr(e)}") logger.error(f"Полное представление: {repr(e)}")
logger.error(f"Параметры запроса:") import traceback
logger.error(f" chat_id: {CHANNEL_ID}") logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
logger.error(f" text_length: {len(final_text)}") return False
logger.error(f" parse_mode: HTML")
return False
except Exception as e: finally:
logger.error("=" * 80) # Закрываем httpx клиент
logger.error("НЕОЖИДАННАЯ ОШИБКА ПРИ ОТПРАВКЕ СООБЩЕНИЯ!") if httpx_client is not None:
logger.error("=" * 80) try:
logger.error(f"Тип ошибки: {type(e).__name__}") logger.info("Закрытие httpx клиента...")
logger.error(f"Сообщение: {str(e)}") await httpx_client.aclose()
logger.error(f"Все атрибуты ошибки: {vars(e) if hasattr(e, '__dict__') else 'N/A'}") logger.info("httpx клиент успешно закрыт")
logger.error(f"Полное представление: {repr(e)}") except Exception as e:
import traceback logger.error(f"Ошибка при закрытии httpx клиента: {e}")
logger.error(f"Трассировка стека:\n{traceback.format_exc()}") logger.error(f" Тип ошибки: {type(e).__name__}")
return False import traceback
logger.error(f"Трассировка стека:\n{traceback.format_exc()}")
async def main(): async def main():
"""Главная функция""" """Главная функция"""