Пытаюсь сделать юзербота на базе сессий купленных. Новых ни одна не авторизуется, просит номер телефона. Где я ошибся?
import os
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())