Files
Touchh/bot/management/commands/run_bot.py

98 lines
3.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,
CommandHandler,
CallbackQueryHandler,
MessageHandler,
filters,
)
from bot.handlers import (
start,
handle_button_click,
manage_hotels,
hotel_actions,
delete_hotel,
check_pms,
setup_rooms,
settings_menu,
toggle_telegram,
toggle_email,
set_notification_time,
handle_notification_time,
schedule_notifications,
show_current_settings,
)
# Настройка Django окружения
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'touchh.settings')
django.setup()
async def start_bot(application):
"""Настройка и запуск Telegram бота."""
print("Настройка Telegram приложения...")
# Регистрация обработчиков команд
print("Регистрация обработчиков команд...")
application.add_handler(CommandHandler("start", start))
# Регистрация обработчиков кнопок
print("Регистрация обработчиков кнопок...")
application.add_handler(CallbackQueryHandler(handle_button_click))
application.add_handler(CallbackQueryHandler(manage_hotels, pattern="^manage_hotels$"))
application.add_handler(CallbackQueryHandler(settings_menu, pattern="^settings$"))
application.add_handler(CallbackQueryHandler(toggle_telegram, pattern="^toggle_telegram$"))
application.add_handler(CallbackQueryHandler(toggle_email, pattern="^toggle_email$"))
application.add_handler(CallbackQueryHandler(set_notification_time, pattern="^set_notification_time$"))
application.add_handler(CallbackQueryHandler(show_current_settings, pattern="^current_settings$"))
application.add_handler(CallbackQueryHandler(hotel_actions, pattern="^hotel_"))
application.add_handler(CallbackQueryHandler(delete_hotel, pattern="^delete_hotel_"))
application.add_handler(CallbackQueryHandler(check_pms, pattern="^check_pms_"))
application.add_handler(CallbackQueryHandler(setup_rooms, pattern="^setup_rooms_"))
# Регистрация обработчиков текстовых сообщений
print("Регистрация обработчиков текстовых сообщений...")
application.add_handler(MessageHandler(filters.TEXT & filters.ChatType.PRIVATE, handle_notification_time))
# Настройка планировщика
print("Настройка планировщика уведомлений...")
scheduler = AsyncIOScheduler()
scheduler.add_job(schedule_notifications, "cron", minute="*")
scheduler.start()
# Запуск бота
print("Запуск Telegram бота...")
await application.initialize()
await application.start()
print("Бот успешно запущен. Ожидание событий...")
await application.updater.start_polling()
class Command(BaseCommand):
help = "Запуск Telegram бота"
def handle(self, *args, **options):
print("Запуск Telegram бота...")
# Получаем текущий цикл событий
loop = asyncio.get_event_loop()
# Создаём экземпляр приложения
application = Application.builder().token("8125171867:AAGxDcSpQxJy3_pmq3TDBWtqaAVCj7b-F5k").build()
# Добавляем задачу для запуска бота
loop.create_task(start_bot(application))
# Запускаем цикл событий
try:
loop.run_forever()
except KeyboardInterrupt:
print("Остановка Telegram бота...")
loop.run_until_complete(application.stop())
scheduler = AsyncIOScheduler()
scheduler.shutdown(wait=False)