init commit

This commit is contained in:
2025-08-17 11:44:54 +09:00
commit 5592014530
59 changed files with 3175 additions and 0 deletions

View File

@@ -0,0 +1,84 @@
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()