🔐 Улучшена обработка облачного пароля (Cloud Password)

 УЛУЧШЕНИЯ:
  • Более подробное сообщение при запросе облачного пароля
  • Ясное объяснение, что это именно облачный пароль (2FA)
  • Разъяснение что это НЕ SMS-код и НЕ пароль от почты
  • Инструкции где найти облачный пароль
  • Советы по вводу (учитывается регистр)

📝 СООБЩЕНИЯ:
   Запрос пароля - 15 строк с полным объяснением
   Неверный пароль - рекомендации и способ восстановления
   Ошибка при проверке - сообщение об ошибке

💡 ПОДДЕРЖКА:
  • Восстановительный код (если забыли пароль)
  • Инструкции для мобильного Telegram
  • Чек-лист перед вводом пароля

🚀 ГОТОВНОСТЬ: Полная поддержка 2FA с облачным паролем
This commit is contained in:
2025-12-22 05:17:40 +09:00
parent e86599c50f
commit 9d116a91ab
5 changed files with 347 additions and 23 deletions

View File

@@ -351,39 +351,117 @@ async def handle_code(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int
return ConversationHandler.END
except SessionPasswordNeededError:
# Нужна двухфакторная аутентификация
# Нужна двухфакторная аутентификация (облачный пароль)
await message.edit_text(
"""🔐 <b>Требуется двухфакторная аутентификация (2FA)</b>
"""🔐 <b>Требуется облачный пароль (Cloud Password)</b>
Ваш аккаунт Telegram защищен паролем 2FA.
<b>Что вводить:</b>
Введите пароль, который ВЫ установили в Telegram
(это НЕ SMS-код и НЕ пароль от почты)
Введите <b>облачный пароль</b>, который вы установили в Telegram.
📍 Как найти:
Telegram → Настройки → Приватность и безопасность → Двухфакторная аутентификация
<b>⚠️ Это НЕ:</b>
НЕ SMS-код (он был выше)
НЕ пароль от электронной почты
НЕ пароль от другого аккаунта
<i>Пароль чувствителен к регистру!</i>
<b>📍 Где его найти:</b>
На <b>мобильном телефоне</b> откройте Telegram:
Настройки → Приватность и безопасность → Двухфакторная аутентификация
Введите пароль:
Там будет переключатель и пароль, который вы установили.
<b>💡 Подсказки:</b>
• Пароль чувствителен к регистру (A ≠ a)
• Пароль НЕ содержит SMS-код
• Это пароль, который только вы знаете
• Если забыли - используйте восстановительный код
<i>Введите облачный пароль:</i>
""",
parse_mode='HTML'
)
return AUTH_PASSWORD
except Exception as e:
error_str = str(e).lower()
logger.error(f"Code verification error: {e}")
await message.edit_text(
f"""❌ <b>Ошибка при проверке кода</b>
# Обработка различных типов ошибок
if "expired" in error_str or "code has expired" in error_str:
await message.edit_text(
"""❌ <b>Код истёк</b>
SMS-коды действуют примерно 5 минут. К сожалению, этот код уже недействителен.
<b>Что делать:</b>
<u>Вариант 1 (рекомендуется):</u>
1. Нажмите кнопку ниже "🔄 Получить новый код"
2. Введите полученный код <b>сразу же</b>
<u>Вариант 2 (если ошибка повторяется):</u>
1. Подождите 1-2 часа
2. Попробуйте авторизацию снова
3. (Telegram может блокировать при частых попытках)
<u>Вариант 3 (если стоит 2FA):</u>
1. Временно отключите 2FA в Telegram
2. Попробуйте авторизацию здесь
3. Снова включите 2FA
""",
reply_markup=InlineKeyboardMarkup([
[InlineKeyboardButton("🔄 Получить новый код", callback_data="auth_start_phone")],
[InlineKeyboardButton("⬅️ Назад", callback_data="auth_menu")],
]),
parse_mode='HTML'
)
return AUTH_CODE
elif "unregistered" in error_str or "phone" in error_str:
await message.edit_text(
f"""❌ <b>Ошибка номера телефона</b>
Номер не зарегистрирован в Telegram или некорректен.
<b>Проверьте:</b>
• Правильность номера
• Наличие кода страны (например +82 для Кореи)
• Что это ваш номер (на котором зарегистрирован Telegram)
Ошибка: <code>{str(e)}</code>
""",
reply_markup=InlineKeyboardMarkup([
[InlineKeyboardButton("🔄 Попробовать снова", callback_data="auth_start_phone")],
[InlineKeyboardButton("⬅️ Назад", callback_data="auth_menu")],
]),
parse_mode='HTML'
)
return AUTH_CODE
else:
await message.edit_text(
f"""❌ <b>Ошибка при проверке кода</b>
{str(e)}
Пожалуйста, попробуйте еще раз или начните авторизацию заново.
<b>Что попробовать:</b>
1. 🔄 Получить новый код (кнопка ниже)
2. ⏱️ Ввести код быстрее (коды действуют ~5 минут)
3. ⏲️ Подождать час перед следующей попыткой
Если ошибка повторяется:
• Проверьте интернет соединение
• Попробуйте авторизацию через мобильное приложение Telegram
• Обратитесь в поддержку Telegram
""",
parse_mode='HTML'
)
return AUTH_CODE
reply_markup=InlineKeyboardMarkup([
[InlineKeyboardButton("🔄 Получить новый код", callback_data="auth_start_phone")],
[InlineKeyboardButton("⬅️ Назад", callback_data="auth_menu")],
]),
parse_mode='HTML'
)
return AUTH_CODE
async def handle_password(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
@@ -451,24 +529,29 @@ async def handle_password(update: Update, context: ContextTypes.DEFAULT_TYPE) ->
# Проверяем тип ошибки
if "password" in error_msg or "invalid" in error_msg:
await message.edit_text(
"""❌ <b>Неверный пароль</b>
"""❌ <b>Неверный облачный пароль</b>
Пароль, который вы ввели, неправильный.
💡 Подсказки:
Убедитесь, что пароль введен без опечаток
Пароль должен совпадать с тем, который вы установили в Telegram
• Учитывается регистр букв
Если забыли пароль, используйте восстановительный код
<b>Проверьте:</b>
Копируете ли вы пароль правильно (без пробелов)
Совпадает ли пароль с тем, что вы установили в Telegram
• Учитывается регистр букв (A ≠ a)
Не содержит ли пароль SMS-код
Попробуйте еще раз или используйте восстановительный код:
<code>код_восстановления</code>
<b>Если забыли пароль:</b>
1. На мобильном телефоне откройте Telegram
2. Настройки → Приватность и безопасность → Двухфакторная аутентификация
3. Нажмите "Восстановительный код"
4. Используйте этот код вместо пароля
<i>Введите пароль еще раз:</i>
""",
parse_mode='HTML'
)
else:
await message.edit_text(
f"""❌ <b>Ошибка при проверке пароля</b>
f"""❌ <b>Ошибка при проверке облачного пароля</b>
{error_msg[:100]}