/
android113
/
schedule_tg_bot
Обзор
Документация
Войти
/
android113
/
schedule_tg_bot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/apps/main.py
205 строк
7 KB
Скороходов Андрей Андреевич
added /edit command func
14 окт 2025, 16:16
14 окт 2025, 16:16
9562385
Код
Авторство
О чём код?
import os from core.config import BOT_TOKEN, UPLOADS_DIR_PATH, logger from handlers.callbacks import button_callback_handler from handlers.commands import list_command, start_command from handlers.conversation import ( GET_CATCH_PHRASE, GET_CLASS_TIME, GET_DAY, GET_PHOTO, GET_REMINDERS, GET_SUBJECT, GET_TEXT_COLOR, add_command, cancel_command, get_catch_phrase, get_class_time, get_day, get_photo, get_reminders, get_subject, get_text_color_callback, skip_catch_phrase, skip_photo, ) # ИСПРАВЛЕНИЕ: Импортируем все необходимое для нового диалога from handlers.edit_conversation import ( EDIT_CATCH_PHRASE, EDIT_DAY, EDIT_PHOTO, EDIT_REMINDERS, EDIT_SUBJECT, EDIT_TEXT_COLOR, EDIT_TIME, cancel_edit, delete_photo, start_edit, ) from handlers.edit_conversation import ( get_catch_phrase as get_edited_catch_phrase, ) from handlers.edit_conversation import ( get_day as get_edited_day, ) from handlers.edit_conversation import ( get_photo as get_edited_photo, ) from handlers.edit_conversation import ( get_reminders as get_edited_reminders, ) from handlers.edit_conversation import ( get_subject as get_edited_subject, ) from handlers.edit_conversation import ( get_text_color_callback as get_edited_text_color, ) from handlers.edit_conversation import ( get_time as get_edited_time, ) from handlers.edit_conversation import ( skip_step as skip_edit_step, ) from services.schedule_manager import load_schedule_from_json from services.scheduler import setup_jobs from telegram.ext import ( Application, CallbackQueryHandler, CommandHandler, ConversationHandler, MessageHandler, filters, ) from ui.keyboards import cancel_filter, delete_photo_filter, skip_filter def main() -> None: # Создаем папку для загрузок, если её нет os.makedirs(UPLOADS_DIR_PATH, exist_ok=True) if not load_schedule_from_json(): logger.warning("Файл расписания не найден, будет создан новый при добавлении.") # Создаем и настраиваем приложение application = Application.builder().token(BOT_TOKEN).build() # --- ConversationHandler для добавления занятий (остается без изменений) --- add_conv_handler = ConversationHandler( entry_points=[ CommandHandler("add", add_command), MessageHandler(filters.Regex(r"^(➕ Добавить занятие)$"), add_command), ], states={ GET_DAY: [ MessageHandler( filters.TEXT & ~filters.COMMAND & ~cancel_filter, get_day ) ], GET_CLASS_TIME: [ MessageHandler( filters.TEXT & ~filters.COMMAND & ~cancel_filter, get_class_time ) ], GET_SUBJECT: [ MessageHandler( filters.TEXT & ~filters.COMMAND & ~cancel_filter, get_subject ) ], GET_REMINDERS: [ MessageHandler( filters.TEXT & ~filters.COMMAND & ~cancel_filter, get_reminders ) ], GET_CATCH_PHRASE: [ CommandHandler("skip", skip_catch_phrase), MessageHandler(skip_filter, skip_catch_phrase), MessageHandler( filters.TEXT & ~filters.COMMAND & ~cancel_filter, get_catch_phrase ), ], GET_PHOTO: [ CommandHandler("skip", skip_photo), MessageHandler(skip_filter, skip_photo), MessageHandler(filters.PHOTO & ~cancel_filter, get_photo), ], GET_TEXT_COLOR: [ CallbackQueryHandler(get_text_color_callback, pattern="^color_.*") ], }, fallbacks=[ CommandHandler("cancel", cancel_command), MessageHandler(cancel_filter, cancel_command), ], per_user=True, per_chat=True, allow_reentry=True, ) # ИСПРАВЛЕНИЕ: Новый ConversationHandler для редактирования занятий edit_conv_handler = ConversationHandler( entry_points=[CallbackQueryHandler(start_edit, pattern="^edit_lesson:.*")], states={ EDIT_DAY: [ MessageHandler( filters.TEXT & ~filters.COMMAND & ~cancel_filter, get_edited_day ) ], EDIT_TIME: [ MessageHandler( filters.TEXT & ~filters.COMMAND & ~cancel_filter, get_edited_time ) ], EDIT_SUBJECT: [ MessageHandler( filters.TEXT & ~filters.COMMAND & ~cancel_filter, get_edited_subject ) ], EDIT_REMINDERS: [ MessageHandler( filters.TEXT & ~filters.COMMAND & ~cancel_filter, get_edited_reminders, ) ], EDIT_CATCH_PHRASE: [ MessageHandler( filters.TEXT & ~filters.COMMAND & ~cancel_filter, get_edited_catch_phrase, ) ], EDIT_PHOTO: [ MessageHandler(filters.PHOTO & ~cancel_filter, get_edited_photo), MessageHandler(delete_photo_filter, delete_photo), ], EDIT_TEXT_COLOR: [ CallbackQueryHandler(get_edited_text_color, pattern="^color_.*") ], }, fallbacks=[ CommandHandler("cancel", cancel_edit), MessageHandler(cancel_filter, cancel_edit), MessageHandler(skip_filter, skip_edit_step), ], per_user=True, per_chat=True, allow_reentry=True, ) # --- Добавляем все обработчики в приложение --- application.add_handler(CommandHandler("start", start_command)) application.add_handler(CommandHandler("list", list_command)) application.add_handler( MessageHandler(filters.Regex(r"^(📊 Посмотреть расписание)$"), list_command) ) application.add_handler(add_conv_handler) application.add_handler(edit_conv_handler) # <-- Добавляем новый обработчик application.add_handler( CallbackQueryHandler(button_callback_handler) ) # Этот для удаления setup_jobs(application) logger.info("Запускаю бота...") application.run_polling() if __name__ == "__main__": main()