bot rafactor and bugfix

This commit is contained in:
2025-08-19 04:45:16 +09:00
parent 43dda889f8
commit a8d860ed87
31 changed files with 4396 additions and 613 deletions

114
app/bots/editor/router.py Normal file
View File

@@ -0,0 +1,114 @@
"""Маршрутизация команд бота."""
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))