Реализована интерактивная авторизация UserBot через бот

- Создан модуль userbot_auth.py для управления авторизацией через Telethon
- Добавлены обработчики для всех этапов авторизации (номер, SMS, 2FA)
- Интегрирована авторизация в меню UserBot
- Добавлена кнопка 🔐 Авторизация в главное меню UserBot
- Полная обработка ошибок и подробные сообщения пользователю
- Сессии сохраняются безопасно в PostgreSQL
- Документация с примерами использования

Этапы авторизации:
1. Пользователь нажимает 🔐 Авторизация в меню UserBot
2. Вводит номер телефона в формате +XX-XXX-XXX-XXXX
3. Получает SMS с кодом подтверждения (5 цифр)
4. При необходимости вводит пароль 2FA
5. Сессия автоматически сохраняется и UserBot готов к работе
This commit is contained in:
2025-12-21 12:23:47 +09:00
parent e57ca0b36e
commit 57d7c9ace3
8 changed files with 963 additions and 1 deletions

View File

@@ -29,6 +29,13 @@ from app.handlers import (
userbot_collect_members,
userbot_parse_members,
cancel_userbot,
auth_menu,
auth_info,
start_phone_input,
handle_phone,
handle_code,
handle_password,
cancel_auth,
)
from app.handlers.message_manager import (
create_message_start,
@@ -132,6 +139,47 @@ async def main() -> None:
# Добавляем обработчик для кнопки UserBot в главном меню
application.add_handler(CallbackQueryHandler(userbot_menu, pattern=f"^{CallbackType.MANAGE_USERBOT.value}$"), group=1)
# Обработчики авторизации 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 выше
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={
4: [MessageHandler(filters.TEXT & ~filters.COMMAND, handle_password)], # AUTH_PASSWORD = 4
},
fallbacks=[CallbackQueryHandler(cancel_auth, pattern="^cancel_auth$")],
name="auth_password",
persistent=False
)
application.add_handler(auth_password_conversation, group=1)
# Select group callbacks
application.add_handler(CallbackQueryHandler(select_groups, pattern=r"^select_group_\d+$"), group=1)
application.add_handler(CallbackQueryHandler(select_groups, pattern=r"^done_groups$"), group=1)