Реализована интерактивная авторизация 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

@@ -8,7 +8,21 @@ from app.database import AsyncSessionLocal
from app.database.repository import GroupRepository
from app.database.member_repository import GroupMemberRepository
from app.utils.keyboards import CallbackType
from app.handlers.userbot_auth import (
auth_menu,
auth_info,
start_phone_input,
handle_phone,
handle_code,
handle_password,
cancel_auth,
AUTH_START,
AUTH_PHONE,
AUTH_CODE,
AUTH_PASSWORD,
)
import logging
import os
logger = logging.getLogger(__name__)
@@ -34,6 +48,7 @@ async def userbot_menu(update: Update, context: ContextTypes.DEFAULT_TYPE) -> in
<i>UserBot собирает информацию о группах и их участниках от имени пользователя</i>"""
keyboard = [
[InlineKeyboardButton("🔐 Авторизация", callback_data="auth_menu")],
[InlineKeyboardButton("⚙️ Настройки", callback_data="userbot_settings")],
[InlineKeyboardButton("📥 Собрать группы", callback_data="userbot_collect_groups")],
[InlineKeyboardButton("👥 Собрать участников", callback_data="userbot_collect_members")],
@@ -435,6 +450,25 @@ async def userbot_parse_members(update: Update, context: ContextTypes.DEFAULT_TY
return USERBOT_COLLECTING_MEMBERS
# Экспорт функций авторизации для использования в других модулях
__all__ = [
'userbot_menu',
'userbot_settings',
'userbot_init',
'userbot_collect_groups',
'userbot_collect_members',
'userbot_parse_members',
'cancel_userbot',
'auth_menu',
'auth_info',
'start_phone_input',
'handle_phone',
'handle_code',
'handle_password',
'cancel_auth',
]
async def cancel_userbot(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
"""Отмена диалога"""
query = update.callback_query