QR 登录与 QrSession

class qqqr.qr.QR(png, sig, expired=False)

QR 类表示一个二维码。

png: bytes | None

二维码内容。如果为 None,二维码已推送到用户客户端。

expired: bool = False

二维码是否已过期。

property pushed

二维码是否已推送到用户客户端。

class qqqr.qr.QrSession(first_qr, login_sig, *, create_time=None, refresh_times=0)

QR 登录的 session 状态。

跟踪二维码刷新次数、过期时间和当前二维码图片。

refreshed

二维码刷新次数计数器。

current_qr

QrSession 持有一个 QR 对象作为当前二维码。

new_qr(qr)

向此 session 添加一个新的二维码。

class qqqr.qr.QrLogin(client, uin, h5=True, app=None, proxy=None, info=None, *args, **kwds)
async new(no_push=False)

创建一个 QrSession。此方法将:

  1. GET xlogin URL 以获取 pt_login_sig cookie;

  2. Try "quick login" (the QR code is pushed to user's client);

  3. 无论二维码是否已推送,都会创建一个 QR 对象,并由返回的 QrSession 持有。

参数:

no_push -- 不要尝试将二维码推送到用户客户端。

返回类型:

QrSession

返回:

一个 QrSession

在 1.8.3 版本发生变更: 添加了 no_push 参数。

async show(push_qr=False)

此方法将调用 ptqrshow API 并将响应中的二维码字节封装为 QR

参数:

push_qr -- 将二维码推送到移动客户端。

返回类型:

QR

返回:

一个 QR 对象。

async poll(sess)

轮询二维码状态。

抛出:

aiohttp.ClientResponseError -- 如果响应状态码 != 200

返回类型:

PollResp

返回:

一个轮询响应对象

async login(*, refresh_times=6, poll_freq=3, no_push=False)

循环直到获取到 cookie 或超过最大 refresh_times 次数。

  • 此方法在获取到新二维码时会触发 qr_fetched 事件。

  • 如果二维码在 refresh_times 次后仍未扫描,将引发 UserTimeout

  • 如果设置了 refresh,将立即刷新二维码而不增加过期计数器。

  • 如果设置了 cancel,将在下次轮询前引发 UserBreak

参数:
  • refresh_times (int) -- 最大二维码过期次数。

  • poll_freq (float) -- 两次状态轮询之间的间隔,单位为秒,默认为 3。

  • no_push -- 不要尝试将二维码推送到用户客户端。

抛出:
  • UserTimeout -- 如果二维码在 refresh_times 次过期后仍未扫描。

  • UserBreak -- 如果设置了 cancel

在 1.8.3 版本发生变更: 添加了 no_push 参数。