61 lines
2.3 KiB
Python
61 lines
2.3 KiB
Python
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()
|