Files
AnonBot/bot.py

77 lines
2.9 KiB
Python

"""
Основной файл для запуска Telegram бота анонимных вопросов
"""
import asyncio
import sys
from pathlib import Path
# Добавляем корневую директорию в путь для импортов
sys.path.append(str(Path(__file__).parent))
from config import config
from loader import loader
from services.infrastructure.http_server import start_http_server, stop_http_server
from services.infrastructure.logger import get_logger
from services.infrastructure.metrics_updater import start_metrics_updater, stop_metrics_updater
from config.constants import DEFAULT_HTTP_HOST, DEFAULT_HTTP_PORT
# Настройка логирования
logger = get_logger(__name__)
async def main():
"""Главная функция для запуска бота"""
http_runner = None
try:
logger.info("🤖 Запуск бота анонимных вопросов...")
logger.info(f"📊 Режим отладки: {'Включен' if config.DEBUG else 'Выключен'}")
logger.info(f"💾 База данных: {config.DATABASE_PATH}")
logger.info(f"👑 Администраторы: {config.ADMINS}")
# Запускаем HTTP сервер для метрик и health check
logger.info("🌐 Запуск HTTP сервера для метрик...")
http_runner = await start_http_server(host=DEFAULT_HTTP_HOST, port=DEFAULT_HTTP_PORT)
# Запускаем обновление метрик
logger.info("📊 Запуск обновления метрик...")
await start_metrics_updater(update_interval=30, db_path=config.DATABASE_PATH)
# Запускаем бота
await loader.start_polling()
except KeyboardInterrupt:
logger.info("⏹️ Получен сигнал остановки (Ctrl+C)")
except Exception as e:
logger.error(f"💥 Критическая ошибка: {e}")
raise
finally:
# Останавливаем обновление метрик
logger.info("📊 Остановка обновления метрик...")
await stop_metrics_updater()
# Останавливаем HTTP сервер
if http_runner:
logger.info("🛑 Остановка HTTP сервера...")
await stop_http_server(http_runner)
logger.info("🛑 Бот остановлен")
if __name__ == "__main__":
try:
# Проверяем конфигурацию перед запуском
config.validate()
# Запускаем бота
asyncio.run(main())
except ValueError as e:
logger.error(f"❌ Ошибка конфигурации: {e}")
sys.exit(1)
except Exception as e:
logger.error(f"💥 Неожиданная ошибка: {e}")
sys.exit(1)