""" Точка входа IntradBot. Запускает три компонента: 1. Telegram бот (polling) — в отдельном потоке 2. Flask веб-сервер (dev) или Gunicorn (prod) — в отдельном потоке 3. Шедулер обновления справочников — в главном потоке В продакшене (Docker) HTTP обслуживает Gunicorn напрямую через web.server:create_app, а этот процесс запускает только бота и шедулер. """ import logging import os import threading import time import schedule import config import database from intradesk import reference from bot.telegram import start_bot from web.server import start_server os.makedirs(os.path.dirname(config.DB_FILE), exist_ok=True) logging.basicConfig( level=logging.INFO, format="%(asctime)s [%(levelname)s] %(name)s: %(message)s", handlers=[ logging.StreamHandler(), logging.FileHandler(os.path.join(os.path.dirname(config.DB_FILE), "bot.log")), ], ) log = logging.getLogger(__name__) def main(): log.info("Starting IntradBot...") database.init_db() reference.seed_static() reference.load_all() threading.Thread(target=start_bot, daemon=True, name="telegram-bot").start() threading.Thread(target=start_server, daemon=True, name="web-server").start() # Обновляем справочники каждый понедельник (новые сотрудники, группы и т.д.) schedule.every().monday.at("10:00").do(reference.load_all) log.info("IntradBot is running. Waiting for webhooks...") while True: schedule.run_pending() time.sleep(1) if __name__ == "__main__": main()