monsterxcn / nonebot-plugin-gsmaterial

🤖 NoneBot2 原神每日材料查询、升级材料计算插件,数据由安柏计划自动更新
https://pypi.python.org/pypi/nonebot-plugin-gsmaterial
MIT License
20 stars 2 forks source link

[-100]登陆失效 #8

Closed KishibeRohan1979 closed 1 year ago

KishibeRohan1979 commented 1 year ago

米游社最近修改了cookie样式,原来的登陆方式似乎不好用了,使用自己的登陆产生的cookie,机器人显示[-100]登陆失效 我获取cookie的方式:在浏览器控制台输入"document.cookie"。 json文件样例如下

{
    "account_id": "22******41",
    "cookie_token_v2": "v2_LMu2G8p0cvEA8dy-ZNOwu1te******yjZzBniIFH1Di",
    "ltmid_v2": "v2_WCmvGJFxwusarpbY2jT*******YE896FLaGX3VxRAw1uzahjN3A",
    "mid": "03tso*****_mhy"
}

我也尝试过将“ltmid_v2”更换为“stoken”或者“stoken_v2”也同样无法登陆。

所以想请教您是如何填写相关字段值的,还是说最近无法使用cookie登陆米游社了?

monsterxcn commented 1 year ago

ltmid_v2 不是 stoken,也不是插件必需的字段,可以去掉,你这样填写配置缺少 stoken。

我这边暂时还是 v1 的 cookie 字段。可能我代码写得有些问题,如果你这个 cookie_token_v2 没过期应该也能用才对。

monsterxcn commented 1 year ago

你试一下这个步骤能不能拿到带 login_ticket 的 cookie:

  1. 新建隐身标签页,后面均在此隐身标签页内操作
  2. 打开 https://www.miyoushe.com/ys/ 并登录
  3. 打开 http://user.mihoyo.com/ 并登录
  4. 控制台输入 document.cookie

如果能拿到 login_ticket 就把这个补到 cookie.json 文件里重启一下试试

KishibeRohan1979 commented 1 year ago

你试一下这个步骤能不能拿到带 login_ticket 的 cookie:

  1. 新建隐身标签页,后面均在此隐身标签页内操作
  2. 打开 https://www.miyoushe.com/ys/ 并登录
  3. 打开 http://user.mihoyo.com/ 并登录
  4. 控制台输入 document.cookie

如果能拿到 login_ticket 就把这个补到 cookie.json 文件里重启一下试试

机器人返回缺少stoken无法自动更新过期的曲奇!

我的操作如下。

1、使用edge浏览器,新建InPrivate选项卡

2、打开 https://www.miyoushe.com/ys/ 并登录,控制台输入document.cookie ,在返回值当中没有找到关于login_ticket的字段

3、在尝试登陆 http://user.mihoyo.com/ 之后,控制台输入document.cookie ,返回

UM_distinctid=1******7; _ga=G******3; _MHYUUID=******; DEVICEFP_SEED_ID=*******; DEVICEFP_SEED_TIME=******; DEVICEFP=*******; login_uid=2***1; login_ticket=EyT6y*******x5aeYcm

之后我将login_ticket的值复制之后,放在cookie.json文件当中,文件内容如下

{
    "cookie_token": "EyT6y*******x5aeYcm"
}

4、保存文件并重启机器人之后

输入

/原神计算 香菱

机器人返回

缺少stoken无法自动更新过期的曲奇!

😥所以还是失败了

monsterxcn commented 1 year ago

呃,你补上 login_ticket 之后 cookie.json 文件内容怎么会是那样呢?

让你补进去,文件内容应该是像这样才对:

{
  "account_id": "22******41",
  "mid": "03tso*****_mhy",
  "login_ticket": "xxx"
}

这个 login_ticket 过期比较快,你可以重新获取一下按我说的填进去保存重启再试一下,还能拿到 login_ticket 应该就没问题。

monsterxcn commented 1 year ago

你之前文件里的 cookie_token_v2 ltmid_v2 都删掉,留一个米游社 ID、一个 midlogin_ticket 就好

KishibeRohan1979 commented 1 year ago

我尝试使用您讲的方法重新走了一遍流程,并将cookie.json文件内容替换为如下

{
    "account_id": "2******1",
    "mid": "03t*****_mhy",
    "login_ticket": "iMgEK*******RTohBSM0pOyZvBi"
}

保存重启后,机器人返回

[-100]请先登陆

于是,我尝试改了一下源码如下(大约60行附近)

    # 读取
    if not cookie:
        if not cookie_cfg:
            return {"error": "养成计算器需要米游社 Cookie!"}
        else:
            check_res = await query_mys("校验", cookie_cfg, {"game_biz": "hk4e_cn"})
            if not check_res.get("error"):
                # 检验成功才返回,否则尝试刷新
                logger.info("检验成功,开始绘制")
                # return cookie_cfg

改动不大,就是将

if not check_res.get("error"):

后面的return注释掉了,然后换成了logger.info

于是机器人就可以正常返回图片了,不过就是曾经机器人返回的是原图,这次返回的好像是缩略图,看着比以前小了(应该是tx的问题?)不过可以返回图片已经算问题解决了吧!

非常感谢你最近的问题解决指导(❤ ω ❤)

monsterxcn commented 1 year ago

旧版本可能用来判断 Cookie 是否失效的接口有问题,导致过期的 Cookie 不能自己更新。你修改的这种方法会在每次请求都走一遍更新 Cookie 的流程,但是我不是很推荐这样。

现在更新到 0.2.2 版本应该能解决这些问题,仍有问题可以随时 reopen 此 issue。