85 lines
3.7 KiB
Python
85 lines
3.7 KiB
Python
from __future__ import annotations
|
|
from telegram import Update
|
|
from telegram.ext import (
|
|
Application, CommandHandler, MessageHandler, ConversationHandler,
|
|
CallbackQueryHandler, CallbackContext, filters,
|
|
)
|
|
|
|
from app.core.config import settings
|
|
from .states import States
|
|
from .session import SessionStore
|
|
from .wizard import EditorWizard
|
|
|
|
|
|
def build_app() -> Application:
|
|
sessions = SessionStore()
|
|
wizard = EditorWizard(sessions)
|
|
|
|
app = Application.builder().token(settings.editor_bot_token).build()
|
|
|
|
# Мастер поста
|
|
post_conv = ConversationHandler(
|
|
entry_points=[CommandHandler("newpost", wizard.newpost)],
|
|
states={
|
|
States.CHOOSE_CHANNEL: [CallbackQueryHandler(wizard.choose_channel, pattern=r"^channel:")],
|
|
States.CHOOSE_TYPE: [CallbackQueryHandler(wizard.choose_type, pattern=r"^type:")],
|
|
States.CHOOSE_FORMAT: [CallbackQueryHandler(wizard.choose_format, pattern=r"^fmt:")],
|
|
|
|
States.ENTER_TEXT: [
|
|
MessageHandler(filters.TEXT & ~filters.COMMAND, wizard.enter_text),
|
|
CallbackQueryHandler(wizard.choose_template_open, pattern=r"^tpl:choose$"),
|
|
],
|
|
States.SELECT_TEMPLATE: [
|
|
CallbackQueryHandler(wizard.choose_template_apply, pattern=r"^tpluse:"),
|
|
CallbackQueryHandler(wizard.choose_template_preview, pattern=r"^tplprev:"),
|
|
CallbackQueryHandler(wizard.choose_template_navigate, pattern=r"^tplpage:"),
|
|
CallbackQueryHandler(wizard.choose_template_cancel, pattern=r"^tpl:cancel$"),
|
|
],
|
|
States.PREVIEW_VARS: [MessageHandler(filters.TEXT & ~filters.COMMAND, wizard.preview_collect_vars)],
|
|
States.PREVIEW_CONFIRM: [
|
|
CallbackQueryHandler(wizard.preview_confirm, pattern=r"^pv:(use|edit)$"),
|
|
CallbackQueryHandler(wizard.choose_template_cancel, pattern=r"^tpl:cancel$"),
|
|
],
|
|
|
|
States.ENTER_MEDIA: [MessageHandler(filters.TEXT & ~filters.COMMAND, wizard.enter_media)],
|
|
States.EDIT_KEYBOARD: [MessageHandler(filters.TEXT & ~filters.COMMAND, wizard.edit_keyboard)],
|
|
|
|
States.CONFIRM_SEND: [CallbackQueryHandler(wizard.confirm_send, pattern=r"^send:")],
|
|
States.ENTER_SCHEDULE: [MessageHandler(filters.TEXT & ~filters.COMMAND, wizard.enter_schedule)],
|
|
},
|
|
fallbacks=[CommandHandler("start", wizard.start)],
|
|
)
|
|
|
|
# Мастер шаблонов
|
|
tpl_conv = ConversationHandler(
|
|
entry_points=[CommandHandler("tpl_new", wizard.tpl_new_start)],
|
|
states={
|
|
States.TPL_NEW_NAME: [MessageHandler(filters.TEXT & ~filters.COMMAND, wizard.tpl_new_name)],
|
|
States.TPL_NEW_TYPE: [CallbackQueryHandler(wizard.tpl_new_type, pattern=r"^tpltype:")],
|
|
States.TPL_NEW_FORMAT: [CallbackQueryHandler(wizard.tpl_new_format, pattern=r"^tplfmt:")],
|
|
States.TPL_NEW_CONTENT: [MessageHandler(filters.TEXT & ~filters.COMMAND, wizard.tpl_new_content)],
|
|
States.TPL_NEW_KB: [MessageHandler(filters.TEXT & ~filters.COMMAND, wizard.tpl_new_kb)],
|
|
States.TPL_CONFIRM_DELETE: [
|
|
CallbackQueryHandler(wizard.tpl_delete_ok, pattern=r"^tpldelok:"),
|
|
CallbackQueryHandler(wizard.choose_template_cancel, pattern=r"^tpl:cancel$"),
|
|
],
|
|
},
|
|
fallbacks=[CommandHandler("start", wizard.start)],
|
|
)
|
|
|
|
app.add_handler(CommandHandler("start", wizard.start))
|
|
app.add_handler(post_conv)
|
|
app.add_handler(tpl_conv)
|
|
app.add_handler(CommandHandler("tpl_list", wizard.tpl_list))
|
|
|
|
return app
|
|
|
|
|
|
def main():
|
|
app = build_app()
|
|
app.run_polling(allowed_updates=Update.ALL_TYPES)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|