From 064d22cfd838edf745ba8ad6f9068d226a261b01 Mon Sep 17 00:00:00 2001 From: gitadmin Date: Sun, 2 Aug 2026 14:28:57 +0300 Subject: [PATCH] =?UTF-8?q?[ZILANT]=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D0=B0=20=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=80=D0=B5=D1=81=D0=BF=D0=BE=D0=BD=D0=B4=D0=B5=D1=80-?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=B0=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 12 +++++------- tg_mainbot.py | 13 +++++++++---- wsgi_bot.py | 24 +++++++++++++++++++++++- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/.env b/.env index a88ebbf..08e59b9 100644 --- a/.env +++ b/.env @@ -16,17 +16,15 @@ WORKMODE = "ZILANT" RELAY_URL = "http://192.168.0.109:5100" # Webhook Responder-bot -# WEBHOOK_URL — адрес, по которому internal_relay доставляет апдейты боту -# (должен быть доступен с машины internal_relay). Не публичный URL для Telegram: -# Telegram ходит на external_relay; setWebhook перехватывается relay. -# WEBHOOK_URL = "http://127.0.0.1:5010/volk_bot" +# WEBHOOK_URL — адрес локальной доставки апдейтов от internal_relay к gunicorn-боту +# (должен быть доступен с машины internal_relay). Не URL для Telegram. +# gunicorn слушает 192.168.0.109:5005 — указываем его напрямую. +# WEBHOOK_URL = "http://192.168.0.109:5010/volk_bot" # WEBHOOK_PORT = 5010 # WEBHOOK_SECRET = "cc0dbc1841660da0b14d7df86ab5e0ed973c" # Webhook Responder-bot -# Пример: бот и relay на одной машине — http://127.0.0.1:5005/testbot -# Или URL через nginx, если internal_relay достучится до него -WEBHOOK_URL = "https://bot.aabpro.ru/testbot" +WEBHOOK_URL = "http://192.168.0.109:5005/testbot" WEBHOOK_PORT = 5005 WEBHOOK_SECRET = "cc0dbc1841660da0b14d7df86ab5e0ed973c" diff --git a/tg_mainbot.py b/tg_mainbot.py index 8374510..9c43301 100644 --- a/tg_mainbot.py +++ b/tg_mainbot.py @@ -1433,13 +1433,15 @@ def handle_callback(call): bot.answer_callback_query(call.id, "Произошла ошибка. Пожалуйста, попробуйте позже.") def setup_webhook(): - """Настройка вебхука""" + """Настройка вебхука через ретранслятор (доставка на WEBHOOK_URL).""" logger.info(f"starting setup_webhook") try: # Удаляем предыдущий вебхук bot.remove_webhook() - # Устанавливаем новый вебхук + # Устанавливаем новый вебхук: + # relay сохранит WEBHOOK_URL как адрес локальной доставки и зарегистрирует + # внешний URL на Telegram (external_relay). bot.set_webhook( url=WEBHOOK_URL, secret_token=WEBHOOK_SECRET, @@ -1457,7 +1459,7 @@ def setup_webhook(): error_msg = f"Ошибка настройка вебхука: {e}" logger.error(error_msg) log_event("error", "system", message=error_msg) - exit(1) + raise RuntimeError(error_msg) from e # Используем путь из WEBHOOK_URL @app.route(WEBHOOK_PATH, methods=['POST']) @@ -1532,7 +1534,10 @@ if __name__ == '__main__': log_event("system", "system", message="Бот запущен") # Настраиваем вебхук - setup_webhook() + try: + setup_webhook() + except Exception: + exit(1) # Логируем запуск Flask logger.info(f"starting Flask") diff --git a/wsgi_bot.py b/wsgi_bot.py index ed8efee..3feab50 100644 --- a/wsgi_bot.py +++ b/wsgi_bot.py @@ -1,4 +1,26 @@ -from tg_mainbot import app # Импортируйте ваше приложение +import fcntl +import os + +from tg_mainbot import app, setup_webhook + + +def _setup_webhook_once(): + """ + Регистрируем webhook один раз при старте gunicorn. + Без этого (__main__ не вызывается) Telegram не шлёт апдейты через relay — + ссылка «Подписка» (/start) молчит. + """ + lock_path = os.path.join(os.getenv("TMPDIR", "/tmp"), "zilant_webhook_setup.lock") + with open(lock_path, "w") as lock_file: + try: + fcntl.flock(lock_file.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB) + except BlockingIOError: + # Другой воркер уже ставит webhook + return + setup_webhook() + + +_setup_webhook_once() if __name__ == "__main__": app.run()