Compare commits
2
Commits
df45f6c83c
...
064d22cfd8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
064d22cfd8 | ||
|
|
0b5f20b748 |
@@ -10,22 +10,21 @@ WORKMODE = "ZILANT"
|
|||||||
|
|
||||||
|
|
||||||
# Telegram API через internal_relay (retransbot) — обязательно
|
# Telegram API через internal_relay (retransbot) — обязательно
|
||||||
# Локально: http://127.0.0.1:8081
|
# Нужна схема http:// или https:// (если без схемы — подставится http://)
|
||||||
|
# Локально: http://127.0.0.1:5100 или http://192.168.0.109:5100
|
||||||
# Через nginx: https://rbin.aabpro.ru
|
# Через nginx: https://rbin.aabpro.ru
|
||||||
RELAY_URL = "https://rbin.aabpro.ru"
|
RELAY_URL = "http://192.168.0.109:5100"
|
||||||
|
|
||||||
# Webhook Responder-bot
|
# Webhook Responder-bot
|
||||||
# WEBHOOK_URL — адрес, по которому internal_relay доставляет апдейты боту
|
# WEBHOOK_URL — адрес локальной доставки апдейтов от internal_relay к gunicorn-боту
|
||||||
# (должен быть доступен с машины internal_relay). Не публичный URL для Telegram:
|
# (должен быть доступен с машины internal_relay). Не URL для Telegram.
|
||||||
# Telegram ходит на external_relay; setWebhook перехватывается relay.
|
# gunicorn слушает 192.168.0.109:5005 — указываем его напрямую.
|
||||||
# WEBHOOK_URL = "http://127.0.0.1:5010/volk_bot"
|
# WEBHOOK_URL = "http://192.168.0.109:5010/volk_bot"
|
||||||
# WEBHOOK_PORT = 5010
|
# WEBHOOK_PORT = 5010
|
||||||
# WEBHOOK_SECRET = "cc0dbc1841660da0b14d7df86ab5e0ed973c"
|
# WEBHOOK_SECRET = "cc0dbc1841660da0b14d7df86ab5e0ed973c"
|
||||||
|
|
||||||
# Webhook Responder-bot
|
# Webhook Responder-bot
|
||||||
# Пример: бот и relay на одной машине — http://127.0.0.1:5005/testbot
|
WEBHOOK_URL = "http://192.168.0.109:5005/testbot"
|
||||||
# Или URL через nginx, если internal_relay достучится до него
|
|
||||||
WEBHOOK_URL = "https://bot.aabpro.ru/testbot"
|
|
||||||
WEBHOOK_PORT = 5005
|
WEBHOOK_PORT = 5005
|
||||||
WEBHOOK_SECRET = "cc0dbc1841660da0b14d7df86ab5e0ed973c"
|
WEBHOOK_SECRET = "cc0dbc1841660da0b14d7df86ab5e0ed973c"
|
||||||
|
|
||||||
|
|||||||
+4
-1
@@ -13,12 +13,15 @@ from dotenv import load_dotenv
|
|||||||
def get_relay_url() -> str:
|
def get_relay_url() -> str:
|
||||||
"""Базовый URL internal_relay без завершающего слэша."""
|
"""Базовый URL internal_relay без завершающего слэша."""
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
relay = (os.getenv("RELAY_URL") or "").rstrip("/")
|
relay = (os.getenv("RELAY_URL") or "").strip().rstrip("/")
|
||||||
if not relay:
|
if not relay:
|
||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
"Требуется переменная окружения RELAY_URL "
|
"Требуется переменная окружения RELAY_URL "
|
||||||
"(базовый URL internal_relay, например http://127.0.0.1:8081)"
|
"(базовый URL internal_relay, например http://127.0.0.1:8081)"
|
||||||
)
|
)
|
||||||
|
# Допускаем host:port без схемы — httpx требует http:// или https://
|
||||||
|
if "://" not in relay:
|
||||||
|
relay = f"http://{relay}"
|
||||||
return relay
|
return relay
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+9
-4
@@ -1433,13 +1433,15 @@ def handle_callback(call):
|
|||||||
bot.answer_callback_query(call.id, "Произошла ошибка. Пожалуйста, попробуйте позже.")
|
bot.answer_callback_query(call.id, "Произошла ошибка. Пожалуйста, попробуйте позже.")
|
||||||
|
|
||||||
def setup_webhook():
|
def setup_webhook():
|
||||||
"""Настройка вебхука"""
|
"""Настройка вебхука через ретранслятор (доставка на WEBHOOK_URL)."""
|
||||||
logger.info(f"starting setup_webhook")
|
logger.info(f"starting setup_webhook")
|
||||||
try:
|
try:
|
||||||
# Удаляем предыдущий вебхук
|
# Удаляем предыдущий вебхук
|
||||||
bot.remove_webhook()
|
bot.remove_webhook()
|
||||||
|
|
||||||
# Устанавливаем новый вебхук
|
# Устанавливаем новый вебхук:
|
||||||
|
# relay сохранит WEBHOOK_URL как адрес локальной доставки и зарегистрирует
|
||||||
|
# внешний URL на Telegram (external_relay).
|
||||||
bot.set_webhook(
|
bot.set_webhook(
|
||||||
url=WEBHOOK_URL,
|
url=WEBHOOK_URL,
|
||||||
secret_token=WEBHOOK_SECRET,
|
secret_token=WEBHOOK_SECRET,
|
||||||
@@ -1457,7 +1459,7 @@ def setup_webhook():
|
|||||||
error_msg = f"Ошибка настройка вебхука: {e}"
|
error_msg = f"Ошибка настройка вебхука: {e}"
|
||||||
logger.error(error_msg)
|
logger.error(error_msg)
|
||||||
log_event("error", "system", message=error_msg)
|
log_event("error", "system", message=error_msg)
|
||||||
exit(1)
|
raise RuntimeError(error_msg) from e
|
||||||
|
|
||||||
# Используем путь из WEBHOOK_URL
|
# Используем путь из WEBHOOK_URL
|
||||||
@app.route(WEBHOOK_PATH, methods=['POST'])
|
@app.route(WEBHOOK_PATH, methods=['POST'])
|
||||||
@@ -1532,7 +1534,10 @@ if __name__ == '__main__':
|
|||||||
log_event("system", "system", message="Бот запущен")
|
log_event("system", "system", message="Бот запущен")
|
||||||
|
|
||||||
# Настраиваем вебхук
|
# Настраиваем вебхук
|
||||||
setup_webhook()
|
try:
|
||||||
|
setup_webhook()
|
||||||
|
except Exception:
|
||||||
|
exit(1)
|
||||||
|
|
||||||
# Логируем запуск Flask
|
# Логируем запуск Flask
|
||||||
logger.info(f"starting Flask")
|
logger.info(f"starting Flask")
|
||||||
|
|||||||
+23
-1
@@ -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__":
|
if __name__ == "__main__":
|
||||||
app.run()
|
app.run()
|
||||||
|
|||||||
Reference in New Issue
Block a user