50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
import os
|
|
import django
|
|
import asyncio
|
|
from django.core.management.base import BaseCommand
|
|
from telegram.ext import Application
|
|
from bot.utils.bot_setup import setup_bot
|
|
from app_settings.models import TelegramSettings
|
|
from touchh.utils.log import CustomLogger
|
|
|
|
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)
|
|
|
|
# Настройка Telegram бота
|
|
bot_token = TelegramSettings.objects.first().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()
|
|
|
|
# Запуск асинхронной программы
|
|
try:
|
|
loop.run_until_complete(main())
|
|
except KeyboardInterrupt:
|
|
self.stdout.write(self.style.ERROR("Завершение работы Telegram бота"))
|
|
finally:
|
|
loop.close()
|