84 lines
3.2 KiB
Python
84 lines
3.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Generate a Telethon StringSession for OverUB.
|
|
"""
|
|
|
|
import argparse
|
|
import asyncio
|
|
import os
|
|
|
|
from telethon import TelegramClient
|
|
from telethon.errors import SessionPasswordNeededError
|
|
from telethon.tl import functions, types
|
|
from telethon.sessions import StringSession
|
|
|
|
|
|
async def generate(args: argparse.Namespace) -> None:
|
|
if os.path.exists(".env"):
|
|
with open(".env", "r", encoding="utf-8") as handle:
|
|
for line in handle:
|
|
line = line.strip()
|
|
if not line or line.startswith("#") or "=" not in line:
|
|
continue
|
|
key, value = line.split("=", 1)
|
|
os.environ.setdefault(key.strip(), value.strip().strip('"').strip("'"))
|
|
|
|
api_id = os.getenv("OVERUB_API_ID") or os.getenv("API_ID")
|
|
api_hash = os.getenv("OVERUB_API_HASH") or os.getenv("API_HASH")
|
|
if not api_id or not api_hash:
|
|
print("API_ID/API_HASH required (set OVERUB_API_ID/OVERUB_API_HASH or API_ID/API_HASH).")
|
|
return
|
|
try:
|
|
api_id = int(api_id)
|
|
except ValueError:
|
|
print("API_ID must be an integer")
|
|
return
|
|
|
|
print("Starting session generation. You will be prompted to log in.")
|
|
client = TelegramClient(StringSession(), api_id, api_hash)
|
|
await client.connect()
|
|
if await client.is_user_authorized():
|
|
session_string = client.session.save()
|
|
await client.disconnect()
|
|
print("\nSession string:")
|
|
print(session_string)
|
|
print("\nAdd to .env as OVERUB_SESSION_STRING=" + session_string)
|
|
return
|
|
phone = args.phone or os.getenv("OVERUB_PHONE") or os.getenv("PHONE")
|
|
if not phone:
|
|
phone = input("Phone number (+123456789): ").strip()
|
|
sent = await client.send_code_request(phone, force_sms=args.sms)
|
|
code_type = getattr(sent, "type", None)
|
|
print(f"Code delivery type: {type(code_type).__name__ if code_type else 'unknown'}")
|
|
if isinstance(code_type, types.auth.SentCodeTypeSetUpEmailRequired):
|
|
print("Telegram requires login email verification, sending email code...")
|
|
sent = await client(functions.auth.ResetLoginEmailRequest(phone, sent.phone_code_hash))
|
|
code_type = getattr(sent, "type", None)
|
|
print(f"Code delivery type: {type(code_type).__name__ if code_type else 'unknown'}")
|
|
if isinstance(code_type, types.auth.SentCodeTypeEmailCode):
|
|
print("Check your email for the login code.")
|
|
code = input("Enter the code you received: ").strip()
|
|
try:
|
|
await client.sign_in(phone=phone, code=code, phone_code_hash=sent.phone_code_hash)
|
|
except SessionPasswordNeededError:
|
|
password = input("Two-step verification password: ").strip()
|
|
await client.sign_in(password=password)
|
|
session_string = client.session.save()
|
|
await client.disconnect()
|
|
|
|
print("\nSession string:")
|
|
print(session_string)
|
|
print("\nAdd to .env as OVERUB_SESSION_STRING=" + session_string)
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser(description="Generate Telethon StringSession for OverUB")
|
|
parser.add_argument("--phone", default="")
|
|
parser.add_argument("--sms", action="store_true", help="Force SMS delivery")
|
|
args = parser.parse_args()
|
|
asyncio.run(generate(args))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|