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, statistics, generate_statistics, stats_select_period, ) # Настройка 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_")) application.add_handler(CallbackQueryHandler(statistics, pattern="^stats$")) application.add_handler(CallbackQueryHandler(stats_select_period, pattern="^stats_hotel_")) application.add_handler(CallbackQueryHandler(generate_statistics, pattern="^stats_period_")) # Регистрация обработчиков текстовых сообщений 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)