🔐 Добавлена полная поддержка 2FA авторизации

 Улучшения:
   Расширенная обработка ошибок при вводе пароля 2FA
   Различие между неверным паролем и другими ошибками
   Подробные подсказки для пользователя при ошибках
   Поддержка восстановительных кодов 2FA
   Улучшенное сообщение при запросе пароля 2FA

📖 Документация:
   Создан 2FA_GUIDE.md (подробное руководство)
   Обновлена информация о 2FA в боте (auth_info)
   Добавлены примеры и советы по использованию

🔐 Обработка ошибок:
  • Неверный пароль - ясное сообщение + подсказки
  • Пароль истек - предложение повторить
  • SMS-код истек - инструкция по получению нового
  • Много попыток - информация о ограничениях

📱 Процесс с 2FA:
  1. Номер телефона
  2. SMS-код (5 цифр)
  3. Пароль 2FA (если включена)
  4.  Авторизация успешна

💡 Основные преимущества:
  • Ясные объяснения на каждом этапе
  • Подсказки при забывании пароля
  • Безопасное обращение с паролями (не сохраняются)
  • Поддержка восстановительных кодов
This commit is contained in:
2025-12-21 12:33:29 +09:00
parent b4f86a33cb
commit c849866fbd
7 changed files with 308 additions and 66 deletions

View File

@@ -142,43 +142,25 @@ async def main() -> None:
# Обработчики авторизации UserBot
application.add_handler(CallbackQueryHandler(auth_menu, pattern="^auth_menu$"), group=1)
application.add_handler(CallbackQueryHandler(auth_info, pattern="^auth_info$"), group=1)
application.add_handler(CallbackQueryHandler(start_phone_input, pattern="^auth_start_phone$"), group=1)
# Конверсейшн для ввода номера телефона
auth_phone_conversation = ConversationHandler(
entry_points=[], # Входная точка через callback query выше
# ConversationHandler для полного процесса авторизации
auth_conversation = ConversationHandler(
entry_points=[
CallbackQueryHandler(start_phone_input, pattern="^auth_start_phone$"),
],
states={
2: [MessageHandler(filters.TEXT & ~filters.COMMAND, handle_phone)], # AUTH_PHONE = 2
},
fallbacks=[CallbackQueryHandler(cancel_auth, pattern="^cancel_auth$")],
name="auth_phone",
persistent=False
)
application.add_handler(auth_phone_conversation, group=1)
# Конверсейшн для ввода SMS кода
auth_code_conversation = ConversationHandler(
entry_points=[], # Входная точка через callback query выше
states={
3: [MessageHandler(filters.TEXT & ~filters.COMMAND, handle_code)], # AUTH_CODE = 3
},
fallbacks=[CallbackQueryHandler(cancel_auth, pattern="^cancel_auth$")],
name="auth_code",
persistent=False
)
application.add_handler(auth_code_conversation, group=1)
# Конверсейшн для ввода пароля 2FA
auth_password_conversation = ConversationHandler(
entry_points=[], # Входная точка через callback query выше
states={
3: [MessageHandler(filters.TEXT & ~filters.COMMAND, handle_code)], # AUTH_CODE = 3
4: [MessageHandler(filters.TEXT & ~filters.COMMAND, handle_password)], # AUTH_PASSWORD = 4
},
fallbacks=[CallbackQueryHandler(cancel_auth, pattern="^cancel_auth$")],
name="auth_password",
fallbacks=[
CallbackQueryHandler(cancel_auth, pattern="^cancel_auth$"),
CommandHandler("cancel", cancel_auth),
],
name="userbot_auth",
persistent=False
)
application.add_handler(auth_password_conversation, group=1)
application.add_handler(auth_conversation, group=1)
# Select group callbacks
application.add_handler(CallbackQueryHandler(select_groups, pattern=r"^select_group_\d+$"), group=1)