58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
"""
|
||
Точка входа 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()
|