Some checks reported errors
continuous-integration/drone/push Build encountered an error
65 lines
2.9 KiB
Python
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
|