From 8d51373ec48454c6921c6486a4c256c8a88e9f0d Mon Sep 17 00:00:00 2001 From: vrubel Date: Thu, 27 Aug 2026 20:07:32 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=D1=82=D0=B0=D0=B9=D0=BC=D0=B0=D1=83?= =?UTF-8?q?=D1=82=20=D0=BD=D0=B0=20TTS-=D0=B7=D0=B0=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=81,=20=D1=87=D1=82=D0=BE=D0=B1=D1=8B=20=D0=B7=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=81=D1=88=D0=B8=D0=B9=20edge-tts=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=88=D0=B0=D0=BB=20=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B2=D1=81=D0=B5=D0=B3=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit При concurrent_updates=False (дефолт PTB) зависший без таймаута вызов edge_tts.save() блокировал всю очередь апдейтов — бот переставал отвечать до ручного перезапуска контейнера. Особенно проявлялось на проде при пачке из нескольких сообщений подряд. --- app/bot.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/bot.py b/app/bot.py index 3ab3813..ece90a8 100644 --- a/app/bot.py +++ b/app/bot.py @@ -21,6 +21,7 @@ logger = logging.getLogger(__name__) USER_TOKEN = os.environ['USER_BOT_TOKEN'] ADMIN_TOKEN = os.environ['ADMIN_BOT_TOKEN'] TTS_VOICE = os.environ.get('TTS_VOICE', 'ru-RU-DmitryNeural') +TTS_TIMEOUT = int(os.environ.get('TTS_TIMEOUT', '30')) DATA_DIR = os.environ.get('DATA_DIR', '/app/data') os.makedirs(DATA_DIR, exist_ok=True) @@ -160,7 +161,14 @@ async def handle_user_message(update: Update, context): try: communicate = edge_tts.Communicate(text, voice=TTS_VOICE) - await communicate.save(tmp_path) + try: + await asyncio.wait_for(communicate.save(tmp_path), timeout=TTS_TIMEOUT) + except asyncio.TimeoutError: + logger.error(f"TTS timed out after {TTS_TIMEOUT}s for user {user.id}") + await update.message.reply_text( + '⚠️ Сервис озвучки не отвечает. Попробуй ещё раз через минуту.' + ) + return # ── 1. Send voice back to user ── duration = get_ogg_duration(tmp_path)