import os import django import asyncio from apscheduler.schedulers.asyncio import AsyncIOScheduler from django.core.management.base import BaseCommand from telegram.ext import Application from bot.utils.bot_setup import setup_bot from bot.utils.scheduler import setup_scheduler from dotenv import load_dotenv from bot.operations.users import show_users # Загрузка переменных окружения load_dotenv() class Command(BaseCommand): help = "Запуск Telegram бота" def handle(self, *args, **options): print("Запуск Telegram бота...") # Настройка Django окружения os.environ.setdefault("DJANGO_SETTINGS_MODULE", "touchh.settings") django.setup() # Создание приложения Telegram bot_token = os.getenv("TELEGRAM_BOT_TOKEN") if not bot_token: raise ValueError("Токен бота не найден в переменных окружения.") application = Application.builder().token(bot_token).build() # Настройка бота и обработчиков setup_bot(application) async def main(): print("Настройка планировщика...") scheduler = setup_scheduler() scheduler.start() try: print("Инициализация Telegram бота...") await application.initialize() # Инициализация приложения print("Бот запущен. Ожидание сообщений...") await application.start() # Запуск приложения await application.updater.start_polling() # Запуск обработки сообщений # Бесконечный цикл для удержания приложения активным while True: await asyncio.sleep(3600) # Ожидание 1 час except Exception as e: print(f"Ошибка во время работы бота: {e}") finally: print("Остановка Telegram бота...") await application.stop() # Завершаем приложение перед shutdown print("Остановка планировщика...") scheduler.shutdown(wait=False) print("Планировщик остановлен.") try: asyncio.run(main()) except RuntimeError as e: if str(e) == "This event loop is already running": print("Цикл событий уже запущен. Используем другой подход для запуска.") loop = asyncio.get_event_loop() loop.run_until_complete(main()) else: raise