736e4c6cae
NEW VERSION
81 lines
2.7 KiB
Python
81 lines
2.7 KiB
Python
import asyncio
|
|
import logging
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
sys.path.append(str(Path(__file__).parent))
|
|
|
|
from app.bot import setup_bot
|
|
from app.config import settings
|
|
from app.database.database import init_db
|
|
from app.services.monitoring_service import monitoring_service
|
|
from app.external.webhook_server import WebhookServer
|
|
|
|
|
|
async def main():
|
|
logging.basicConfig(
|
|
level=getattr(logging, settings.LOG_LEVEL),
|
|
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
|
handlers=[
|
|
logging.FileHandler(settings.LOG_FILE, encoding='utf-8'),
|
|
logging.StreamHandler(sys.stdout)
|
|
]
|
|
)
|
|
|
|
logger = logging.getLogger(__name__)
|
|
logger.info("🚀 Запуск VPN бота...")
|
|
|
|
webhook_server = None
|
|
|
|
try:
|
|
logger.info("📊 Инициализация базы данных...")
|
|
await init_db()
|
|
|
|
logger.info("🤖 Настройка бота...")
|
|
bot, dp = await setup_bot()
|
|
|
|
monitoring_service.bot = bot
|
|
|
|
# Инициализируем webhook сервер если Tribute включен
|
|
if settings.TRIBUTE_ENABLED:
|
|
logger.info("🌐 Запуск webhook сервера для Tribute...")
|
|
webhook_server = WebhookServer(bot)
|
|
await webhook_server.start()
|
|
else:
|
|
logger.info("ℹ️ Tribute отключен, webhook сервер не запускается")
|
|
|
|
logger.info("🔍 Запуск службы мониторинга...")
|
|
monitoring_task = asyncio.create_task(monitoring_service.start_monitoring())
|
|
|
|
logger.info("🔄 Запуск polling...")
|
|
|
|
try:
|
|
await asyncio.gather(
|
|
dp.start_polling(bot),
|
|
monitoring_task
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"Ошибка в основном цикле: {e}")
|
|
monitoring_service.stop_monitoring()
|
|
if webhook_server:
|
|
await webhook_server.stop()
|
|
raise
|
|
|
|
except Exception as e:
|
|
logger.error(f"❌ Критическая ошибка при запуске: {e}")
|
|
raise
|
|
finally:
|
|
logger.info("🛑 Завершение работы бота")
|
|
monitoring_service.stop_monitoring()
|
|
if webhook_server:
|
|
await webhook_server.stop()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
asyncio.run(main())
|
|
except KeyboardInterrupt:
|
|
print("\n🛑 Бот остановлен пользователем")
|
|
except Exception as e:
|
|
print(f"❌ Критическая ошибка: {e}")
|
|
sys.exit(1) |