68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
"""
|
|
首次登录脚本 —— 完成 Telegram 手机号 + 验证码认证,生成 session 文件。
|
|
只需运行一次,之后重启容器无需重新登录。
|
|
|
|
用法:
|
|
docker exec -it <容器名> python3 /app/do_login.py
|
|
"""
|
|
|
|
import asyncio
|
|
import os
|
|
import sys
|
|
|
|
import yaml
|
|
from pyrogram import Client
|
|
|
|
|
|
def load_config(path: str = "config.yaml") -> dict:
|
|
with open(path, "r", encoding="utf-8") as f:
|
|
return yaml.safe_load(f) or {}
|
|
|
|
|
|
async def main():
|
|
config_path = os.path.join(os.path.abspath("."), "config.yaml")
|
|
if not os.path.exists(config_path):
|
|
print(f"错误:找不到配置文件 {config_path}")
|
|
sys.exit(1)
|
|
|
|
cfg = load_config(config_path)
|
|
api_id = cfg.get("api_id")
|
|
api_hash = cfg.get("api_hash")
|
|
|
|
if not api_id or not api_hash:
|
|
print("错误:config.yaml 中缺少 api_id 或 api_hash")
|
|
sys.exit(1)
|
|
|
|
session_dir = os.path.join(os.path.abspath("."), "sessions")
|
|
os.makedirs(session_dir, exist_ok=True)
|
|
session_file = os.path.join(session_dir, "media_downloader")
|
|
|
|
proxy_cfg = cfg.get("proxy")
|
|
proxy = None
|
|
if proxy_cfg:
|
|
proxy = {
|
|
"scheme": proxy_cfg.get("scheme", "socks5"),
|
|
"hostname": proxy_cfg.get("hostname", "127.0.0.1"),
|
|
"port": proxy_cfg.get("port", 1080),
|
|
}
|
|
|
|
print("=== Telegram 首次登录 ===")
|
|
print(f"Session 文件将保存到:{session_file}.session")
|
|
print()
|
|
|
|
client = Client(
|
|
session_file,
|
|
api_id=api_id,
|
|
api_hash=api_hash,
|
|
proxy=proxy,
|
|
)
|
|
|
|
async with client:
|
|
me = await client.get_me()
|
|
print(f"\n登录成功!账号:{me.first_name} (@{me.username})")
|
|
print("Session 文件已保存,后续启动无需重新登录。")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|