Files
Touchh/bot/management/commands/run_bot.py
2024-12-07 17:41:27 +09:00

68 lines
2.9 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 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