Files
Andrey K. Choi 0729e9196b
Some checks reported errors
continuous-integration/drone/push Build encountered an error
i18n, messages are in templates
2025-08-13 05:21:25 +09:00

65 lines
2.9 KiB
Python

from __future__ import annotations
import logging
from telegram.ext import Application, CommandHandler
from app.core.config import settings
from app.handlers.conversation import build_conversation
from app.handlers.profile import my_profile_handler, edit_hint_handler
from app.handlers.admin import (
list_candidates_handler, candlist_pager, callback_router,
view_candidate_handler, list_start, list_gender, list_city, list_verified, list_active, list_results_pager
)
logging.basicConfig(level=logging.INFO, format="%(levelname)s %(name)s: %(message)s")
log = logging.getLogger("bot")
async def start_cmd(update, context):
await update.message.reply_text("Бот запущен. Набери /new, чтобы заполнить анкету.")
def build_app() -> Application:
if not settings.BOT_TOKEN:
raise RuntimeError("BOT_TOKEN is empty. Set it in .env")
app = Application.builder().token(settings.BOT_TOKEN).build()
# визард пользователя
app.add_handler(build_conversation())
# базовые
app.add_handler(CommandHandler("start", start_cmd))
app.add_handler(CommandHandler("my", my_profile_handler))
app.add_handler(CommandHandler("edit", edit_hint_handler))
# админские
app.add_handler(CommandHandler("candidates", list_candidates_handler))
app.add_handler(CommandHandler("view", view_candidate_handler))
app.add_handler(CommandHandler("list", list_start))
app.add_handler(CommandHandler("verify", lambda u, c: None)) # заглушка если где-то есть старая команда
# callback-и
from telegram.ext import CallbackQueryHandler, ConversationHandler, MessageHandler, filters
app.add_handler(CallbackQueryHandler(candlist_pager, pattern=r"^candlist:page:"))
app.add_handler(CallbackQueryHandler(callback_router, pattern=r"^cand:"))
list_conv = ConversationHandler(
entry_points=[CommandHandler("list", list_start)],
states={
0: [CallbackQueryHandler(list_gender, pattern=r"^list:gender:")],
1: [CallbackQueryHandler(list_city, pattern=r"^list:city:"), MessageHandler(filters.TEXT & ~filters.COMMAND, list_city)],
2: [CallbackQueryHandler(list_verified, pattern=r"^list:verified:")],
3: [CallbackQueryHandler(list_active, pattern=r"^list:active:")],
},
fallbacks=[],
allow_reentry=True,
)
app.add_handler(list_conv)
app.add_handler(CallbackQueryHandler(list_results_pager, pattern=r"^listres:page:"))
return app
if __name__ == "__main__":
try:
log.info("Starting bot…")
log.info("DB URL masked is set: %s", "***" if settings.DATABASE_URL else "<empty>")
application = build_app()
application.run_polling(close_loop=False)
except Exception as e:
log.exception("Bot crashed on startup: %s", e)
raise