mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-01-20 11:50:27 +00:00
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) |