83 lines
2.4 KiB
Python
Executable File
83 lines
2.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Generate a Telethon StringSession for TELETHON_TOKEN.
|
|
|
|
Examples:
|
|
TELETHON_API_ID=123456 TELETHON_API_HASH=abc123 \
|
|
python3 scripts/generate_telegram_session.py
|
|
|
|
python3 scripts/generate_telegram_session.py \
|
|
--api-id 123456 \
|
|
--api-hash abc123 \
|
|
--phone +391234567890
|
|
"""
|
|
|
|
import argparse
|
|
import asyncio
|
|
import os
|
|
import sys
|
|
|
|
|
|
def parse_args() -> argparse.Namespace:
|
|
parser = argparse.ArgumentParser(
|
|
description="Generate a Telethon StringSession for the TELETHON_TOKEN secret."
|
|
)
|
|
parser.add_argument(
|
|
"--api-id",
|
|
default=os.environ.get("TELETHON_API_ID"),
|
|
help="Telegram API ID. Defaults to TELETHON_API_ID.",
|
|
)
|
|
parser.add_argument(
|
|
"--api-hash",
|
|
default=os.environ.get("TELETHON_API_HASH"),
|
|
help="Telegram API hash. Defaults to TELETHON_API_HASH.",
|
|
)
|
|
parser.add_argument(
|
|
"--phone",
|
|
default=os.environ.get("TELETHON_PHONE"),
|
|
help="Telegram user phone number. Defaults to TELETHON_PHONE.",
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
if not args.api_id:
|
|
parser.error("--api-id or TELETHON_API_ID is required")
|
|
try:
|
|
args.api_id = int(args.api_id)
|
|
except ValueError:
|
|
parser.error("--api-id or TELETHON_API_ID must be an integer")
|
|
if not args.api_hash:
|
|
parser.error("--api-hash or TELETHON_API_HASH is required")
|
|
return args
|
|
|
|
|
|
async def generate_session(args: argparse.Namespace) -> str:
|
|
from telethon import TelegramClient
|
|
from telethon.sessions import StringSession
|
|
|
|
client = TelegramClient(StringSession(), args.api_id, args.api_hash)
|
|
try:
|
|
phone = args.phone or input("Telegram phone number, including country code: ")
|
|
await client.start(phone=phone)
|
|
return client.session.save()
|
|
finally:
|
|
await client.disconnect()
|
|
|
|
|
|
def main() -> int:
|
|
args = parse_args()
|
|
print(
|
|
"Starting Telegram user login. The final stdout line is the TELETHON_TOKEN value.",
|
|
file=sys.stderr,
|
|
)
|
|
session_string = asyncio.run(generate_session(args))
|
|
if not session_string:
|
|
print("Failed to generate a session string.", file=sys.stderr)
|
|
return 1
|
|
|
|
print(session_string)
|
|
print("Store this value as TELETHON_TOKEN in the Kubernetes Secret.", file=sys.stderr)
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|