# -*- coding: utf-8 -*- """list_roles.py — 拉取账号在指定区的实时角色列表(不进游戏)。 用法: .venv/bin/python list_roles.py --zone 14492170 [-u longwu988 -p Longwu1988] """ import argparse import sys import requests as rq import urllib3 urllib3.disable_warnings() HERE = __file__.rsplit("/", 1)[0] sys.path.insert(0, HERE) import login_996pc as L # noqa: E402 import cq2_pure_enter as P # noqa: E402 def main(): ap = argparse.ArgumentParser() ap.add_argument("-u", "--user", default="longwu988") ap.add_argument("-p", "--password", default="Longwu1988") ap.add_argument("--zone", type=int, required=True) args = ap.parse_args() s = rq.Session() j, _ = L.do_login(s, args.user, args.password) assert j.get("code") == 200, j.get("msg") jwt = j["data"]["token"] uid = str(j["data"]["userInfo"]["id"]) print(f"uid={uid}") P.enter_game(s, jwt, args.zone) for pt in (8041, 8021, 8061, 8001): try: import socket g = socket.create_connection( (P.GW_HOST.format(zone=args.zone), pt), timeout=10) g.close() except OSError: continue try: # login_gate 会打印角色列表行; 传一个不存在的名字避免创角副作用 P.login_gate(args.zone, jwt, "__probe__", pt, uid) except SystemExit: continue except Exception: continue return print("[!] 所有端口失败") if __name__ == "__main__": main()