115 lines
4.1 KiB
Python
115 lines
4.1 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
|
|
)
|
|
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)],
|
|
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)
|
|
]
|
|
},
|
|
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))
|