Почему не авторизуется в сессии телеграм?
Пытаюсь сделать юзербота на базе сессий купленных. Новых ни одна не авторизуется, просит номер телефона. Где я ошибся?
import json
import asyncio
from pyrogram import Client
from pyrogram.errors import Unauthorized, SessionPasswordNeeded
# Папка с сессиями
SESSION_FOLDER = "session"
def get_sessions():
""" Получает список всех доступных сессий в папке session/ """
sessions = []
for folder in os.listdir(SESSION_FOLDER):
folder_path = os.path.join(SESSION_FOLDER, folder)
if os.path.isdir(folder_path):
session_file = os.path.join(folder_path, f"{folder}.session")
json_file = os.path.join(folder_path, f"{folder}.json")
if os.path.exists(session_file) and os.path.exists(json_file):
sessions.append(folder)
return sessions
async def check_session(phone_number):
""" Проверяет валидность Telegram-сессии и вводит 2FA, если нужно. """
session_path = os.path.join(SESSION_FOLDER, phone_number)
json_file = os.path.join(session_path, f"{phone_number}.json")
session_file = os.path.join(session_path, f"{phone_number}.session")
# Загружаем данные из JSON
try:
with open(json_file, "r", encoding="utf-8") as f:
data = json.load(f)
except json.JSONDecodeError:
print(f"❌ Ошибка чтения JSON {json_file}! Проверьте формат.")
return
api_id = data.get("app_id")
api_hash = data.get("app_hash")
password_2fa = data.get("twoFA", None)
if not api_id or not api_hash:
print(f"⚠️ В JSON {json_file} отсутствует app_id или app_hash!")
return
# Подключаемся через Pyrogram
try:
async with Client(
name=session_file,
api_id=api_id,
api_hash=api_hash,
device_model=data.get("device", "Unknown Device"),
app_version=data.get("app_version", "Unknown Version"),
system_version=data.get("sdk", "Unknown SDK"),
lang_code=data.get("lang_code", "en")
) as app:
me = await app.get_me()
print(f"\n✅ Сессия {phone_number} валидна!")
print(f"? ID: {me.id}")
print(f"? Имя: {me.first_name} {me.last_name or ''}")
print(f"? Username: @{me.username}" if me.username else "? Username: отсутствует")
print(f"? Номер телефона: {me.phone_number}")
print(f"? Premium: {'Да' if me.is_premium else 'Нет'}")
except SessionPasswordNeeded:
if password_2fa:
try:
async with Client(
name=session_file,
api_id=api_id,
api_hash=api_hash
) as app:
await app.check_password(password_2fa)
me = await app.get_me()
print(f"\n✅ Сессия {phone_number} успешно вошла после 2FA!")
except Exception as e:
print(f"❌ Ошибка при вводе 2FA для {phone_number}: {e}")
else:
print(f"❌ Требуется ввод 2FA для {phone_number}, но пароль отсутствует в JSON!")
except Unauthorized:
print(f"❌ Сессия {phone_number} недействительна! Требуется повторная авторизация.")
except Exception as e:
print(f"❌ Ошибка при проверке {phone_number}: {e}")
async def main():
""" Главное меню выбора сессии и проверка. """
while True:
os.system('cls' if os.name == 'nt' else 'clear')
print("? Выберите сессию для проверки:\n")
sessions = get_sessions()
if not sessions:
print("⚠️ Нет доступных сессий! Добавьте их в папку session/")
break
for i, session in enumerate(sessions):
print(f"[{i}] {session}")
print("\n[e] Выход")
choice = input("\nВведите номер сессии: ")
if choice.lower() == 'e':
break
try:
session_index = int(choice)
if session_index < 0 or session_index >= len(sessions):
print("❌ Неверный номер! Попробуйте снова.")
continue
await check_session(sessions[session_index])
except ValueError:
print("❌ Введите число или 'e' для выхода!")
if __name__ == "__main__":
asyncio.run(main())
Ответы (1 шт):
В первую очередь попробуйте авторизоваться со своего аккаунта и посмотреть как и куда сохраняется файл сессии. Вполне вероятно что есть ошибка при её считывании. Так же немного покопал код и нашёл странность в функции: get_sessions(), а именно в именах файлов. Функция читает имена файлов правильно, но потом дописывает туда ещё данные и на выходе получается путь: session/z.session.session Эта функция в целом криво устроена, ибо я как понимаю у вас сессия в 2-х файлах .session и .json, а цикл прогоняете по всем файлам папки, как следствие, вы дважды проверяете одну и туже сессию. Так же нет импорта: OS
Я бы предложил следующую реализацию:
import os
def get_sessions():
sessions = []
for folder in os.listdir(SESSION_FOLDER):
if folder.endswith('.session'):
folder = folder.split('.')[0]
session_file = os.path.join(SESSION_FOLDER, f"{folder}.session")
json_file = os.path.join(SESSION_FOLDER, f"{folder}.json")
if os.path.isfile(session_file) and os.path.isfile(session_file):
sessions.append(folder)
return sessions
А так же корректировка в функции: check_session
Вместо:
async def check_session(phone_number):
""" Проверяет валидность Telegram-сессии и вводит 2FA, если нужно. """
session_path = os.path.join(SESSION_FOLDER, phone_number)
json_file = os.path.join(session_path, f"{phone_number}.json")
session_file = os.path.join(session_path, f"{phone_number}.session")
Это:
async def check_session(phone_number):
""" Проверяет валидность Telegram-сессии и вводит 2FA, если нужно. """
json_file = os.path.join(SESSION_FOLDER, f"{phone_number}.json")
session_file = os.path.join(SESSION_FOLDER, f"{phone_number}.session")
Подставил свою сессию, сгенерировал JSON и сессию прочитало, думаю и вам поможет