Files
postbot/app/bots/editor/router.py
2025-08-19 05:13:16 +09:00

130 lines
4.7 KiB
Python

"""Маршрутизация команд бота."""
from telegram.ext import (
Application, CommandHandler, MessageHandler, CallbackQueryHandler,
ConversationHandler, filters
)
from .states import BotStates
from .handlers.base import start, help_command, cancel
from .handlers.templates import (
start_template_creation,
handle_template_type,
handle_template_name,
handle_template_text,
handle_template_keyboard,
list_templates,
handle_template_selection,
handle_template_vars,
handle_preview_confirmation
)
from .handlers.posts import (
newpost,
choose_channel,
choose_type,
choose_format,
enter_text,
choose_template_open,
choose_template_apply,
choose_template_preview,
choose_template_navigate,
choose_template_cancel,
preview_collect_vars,
preview_confirm,
enter_media,
edit_keyboard,
confirm_send,
enter_schedule
)
def register_handlers(app: Application) -> None:
"""Регистрация обработчиков команд."""
# Базовые команды
app.add_handler(CommandHandler("start", start))
app.add_handler(CommandHandler("help", help_command))
# Шаблоны
template_handler = ConversationHandler(
entry_points=[
CommandHandler("newtemplate", start_template_creation),
CommandHandler("tpl_list", list_templates)
],
states={
BotStates.TPL_TYPE: [
CallbackQueryHandler(handle_template_type)
],
BotStates.TPL_NAME: [
MessageHandler(filters.TEXT & ~filters.COMMAND, handle_template_name)
],
BotStates.TPL_TEXT: [
MessageHandler(filters.TEXT & ~filters.COMMAND, handle_template_text)
],
BotStates.TPL_NEW_KB: [
MessageHandler(filters.TEXT & ~filters.COMMAND, handle_template_keyboard)
],
BotStates.SELECT_TEMPLATE: [
CallbackQueryHandler(handle_template_selection, pattern=r"^template:")
],
BotStates.TEMPLATE_VARS: [
MessageHandler(filters.TEXT & ~filters.COMMAND, handle_template_vars)
],
BotStates.PREVIEW_CONFIRM: [
CallbackQueryHandler(handle_preview_confirmation, pattern=r"^preview:")
]
},
fallbacks=[CommandHandler("cancel", cancel)]
)
app.add_handler(template_handler)
# Создание поста
post_handler = ConversationHandler(
entry_points=[CommandHandler("newpost", newpost)],
states={
BotStates.CHOOSE_CHANNEL: [
CallbackQueryHandler(choose_channel, pattern=r"^channel:")
],
BotStates.CHOOSE_TYPE: [
CallbackQueryHandler(choose_type, pattern=r"^type:")
],
BotStates.CHOOSE_FORMAT: [
CallbackQueryHandler(choose_format, pattern=r"^fmt:")
],
BotStates.ENTER_TEXT: [
MessageHandler(filters.TEXT & ~filters.COMMAND, enter_text),
CallbackQueryHandler(choose_template_open, pattern=r"^tpl:choose$")
],
BotStates.SELECT_TEMPLATE: [
CallbackQueryHandler(choose_template_apply, pattern=r"^tpluse:"),
CallbackQueryHandler(choose_template_preview, pattern=r"^tplprev:"),
CallbackQueryHandler(choose_template_navigate, pattern=r"^tplpage:"),
CallbackQueryHandler(choose_template_cancel, pattern=r"^tpl:cancel$")
],
BotStates.PREVIEW_VARS: [
MessageHandler(filters.TEXT & ~filters.COMMAND, preview_collect_vars)
],
BotStates.PREVIEW_CONFIRM: [
CallbackQueryHandler(preview_confirm, pattern=r"^pv:(use|edit)$"),
CallbackQueryHandler(choose_template_cancel, pattern=r"^tpl:cancel$")
],
BotStates.ENTER_MEDIA: [
MessageHandler(
filters.PHOTO | filters.VIDEO | filters.ANIMATION & ~filters.COMMAND,
enter_media
)
],
BotStates.EDIT_KEYBOARD: [
MessageHandler(filters.TEXT & ~filters.COMMAND, edit_keyboard)
],
BotStates.CONFIRM_SEND: [
CallbackQueryHandler(confirm_send, pattern=r"^send:")
],
BotStates.ENTER_SCHEDULE: [
MessageHandler(filters.TEXT & ~filters.COMMAND, enter_schedule)
]
},
fallbacks=[CommandHandler("cancel", cancel)]
)
app.add_handler(post_handler)
# Просмотр шаблонов
app.add_handler(CommandHandler("templates", list_templates))