Files
telegram-downloader/do_login.py
T
yuming cf40343c51
部署到群晖 / deploy (push) Failing after 10m45s
初始化 telegram-downloader 并接入群晖 CI/CD
2026-04-22 21:29:03 +08:00

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())