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 scheduler.tasks import load_tasks_to_scheduler class Command(BaseCommand): help = "Запуск Telegram бота и планировщика" def handle(self, *args, **options): # Установка Django окружения os.environ.setdefault("DJANGO_SETTINGS_MODULE", "touchh.settings") django.setup() # Создаем новый цикл событий loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) # Настройка планировщика scheduler = AsyncIOScheduler(event_loop=loop) scheduler.start() # Загрузка задач в планировщик try: load_tasks_to_scheduler(scheduler) except Exception as e: self.stderr.write(f"Ошибка при загрузке задач в планировщик: {e}") return # Настройка 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(): await application.initialize() await application.start() await application.updater.start_polling() self.stdout.write(self.style.SUCCESS("Telegram бот и планировщик успешно запущены.")) try: while True: await asyncio.sleep(3600) except asyncio.CancelledError: await application.stop() scheduler.shutdown() # Запуск асинхронной программы try: loop.run_until_complete(main()) except KeyboardInterrupt: self.stdout.write(self.style.ERROR("Завершение работы Telegram бота и планировщика")) finally: loop.close()