Ljzd-PRO / nonebot-plugin-mystool

QQ聊天、频道机器人插件 | 米游社工具-每日米游币任务、游戏签到、商品兑换、免抓包登录、原神崩铁便笺提醒
https://pypi.org/project/nonebot-plugin-mystool
MIT License
412 stars 51 forks source link

打码显示成功,但仍然签到失败 #163

Closed beiji-O-o closed 1 year ago

beiji-O-o commented 1 year ago

93e183b49dcac8fd53b47c0d562b1e4

屏幕截图 2023-08-13 194043
Ljzd-PRO commented 1 year ago

这里应该是执行签到后,再次获取签到历史记录发现实际并没有完成签到。 App里有显示签到成功吗?

beiji-O-o commented 1 year ago

这里应该是执行签到后,再次获取签到历史记录发现实际并没有完成签到。 App里有显示签到成功吗?

没有

dontdot commented 1 year ago

这里应该是执行签到后,再次获取签到历史记录发现实际并没有完成签到。 App里有显示签到成功吗?

要不要参考下@Night-stars-1这位的相关签到代码,我用他的签到部分一直没出现什么问题

beiji-O-o commented 1 year ago

code HiPC上传_2023-08-21_274876

去米游社看也是未签到有人机验证

dontdot commented 1 year ago

code HiPC上传_2023-08-21_274876

去米游社看也是未签到有人机验证

https://github.com/Ljzd-PRO/nonebot-plugin-mystool/blob/aa70bdae7652f382e3ed07f7cf8df79c2f251f31/src/nonebot_plugin_mystool/game_sign_api.py#L207-L209 你在208后面插入一行,输入logger.info(f'打码结果:{geetest_result}')看看日志是什么结果

beiji-O-o commented 1 year ago

code HiPC上传_2023-08-21_274876 去米游社看也是未签到有人机验证

https://github.com/Ljzd-PRO/nonebot-plugin-mystool/blob/aa70bdae7652f382e3ed07f7cf8df79c2f251f31/src/nonebot_plugin_mystool/game_sign_api.py#L207-L209

你在208后面插入一行,输入logger.info(f'打码结果:{geetest_result}')看看日志是什么结果

image

Ljzd-PRO commented 1 year ago

https://github.com/Ljzd-PRO/nonebot-plugin-mystool/blob/aa70bdae7652f382e3ed07f7cf8df79c2f251f31/src/nonebot_plugin_mystool/game_sign_api.py#L176-L179

179 行后面可以加一个

logger.debug(headers)

输出Headers到日志,看看有没有 x-rpc-validate, x-rpc-challenge, x-rpc-seccode

Ljzd-PRO commented 1 year ago

之前用打码平台有签到成功过吗

Ljzd-PRO commented 1 year ago

看上去是完成人机验证以后再签到,又被要求进行人机验证

Ljzd-PRO commented 1 year ago

https://github.com/Ljzd-PRO/nonebot-plugin-mystool/blob/aa70bdae7652f382e3ed07f7cf8df79c2f251f31/src/nonebot_plugin_mystool/game_sign_api.py#L176-L179

179 行后面可以加一个

logger.debug(headers)

输出Headers到日志,看看有没有 x-rpc-validate, x-rpc-challenge, x-rpc-seccode

                    if geetest_result.validate:
                        headers["x-rpc-validate"] = geetest_result.validate
                        headers["x-rpc-challenge"] = challenge
                        headers["x-rpc-seccode"] = f'{geetest_result.validate}|jordan'
                    logger.debug(headers)
beiji-O-o commented 1 year ago
logger.debug(headers)

image 没输出

beiji-O-o commented 1 year ago

之前用打码平台有签到成功过吗

刚开始的几天成功了

beiji-O-o commented 1 year ago

之前用打码平台有签到成功过吗

刚开始的几天成功了

先改成我fork里的1.7分支里的def sign部分 用着先,等大佬修复

def sign部分 是什么啊,我好像找不到😂

dontdot commented 1 year ago

之前用打码平台有签到成功过吗

刚开始的几天成功了

先改成我fork里的1.7分支里的def sign部分 用着先,等大佬修复

def sign部分 是什么啊,我好像找不到😂

https://github.com/Joseandluue/nonebot-plugin-mystool/blob/47046d5aa1ee7ecd680459e9f77566f1507e35b8/src/nonebot_plugin_mystool/game_sign_api.py#L208-L232 这部分,另外要在game_sign_api.py里面在加上下面这个类 https://github.com/Joseandluue/nonebot-plugin-mystool/blob/47046d5aa1ee7ecd680459e9f77566f1507e35b8/src/nonebot_plugin_mystool/utils.py#L405-L410 !!但是大佬在dev分支好像提交一个fix,你可以先再试下作者大佬dev的版本再说

beiji-O-o commented 1 year ago

之前用打码平台有签到成功过吗

刚开始的几天成功了

先改成我fork里的1.7分支里的def sign部分 用着先,等大佬修复

def sign部分 是什么啊,我好像找不到😂

https://github.com/Joseandluue/nonebot-plugin-mystool/blob/47046d5aa1ee7ecd680459e9f77566f1507e35b8/src/nonebot_plugin_mystool/game_sign_api.py#L208-L232 这部分,另外要在game_sign_api.py里面在加上下面这个类 https://github.com/Joseandluue/nonebot-plugin-mystool/blob/47046d5aa1ee7ecd680459e9f77566f1507e35b8/src/nonebot_plugin_mystool/utils.py#L405-L410 !!但是大佬在dev分支好像提交一个fix,你可以先再试下作者大佬dev的版本再说

好的

Ljzd-PRO commented 1 year ago

刚才提交的只是调整了一下签到成功的判断,还没解决

dontdot commented 1 year ago

@Ljzd-PRO ,大佬刚刚发现的小问题,我想不太需要开个issue,就想在这提一下。 便笺的文本还得要优化下,实时体力>设置的阈值就提示满了,这样会有个问题:是否会因为提示过体力满了的信息,从而不会在真正溢出的时候发送通知 image

dontdot commented 1 year ago

签到失败的一次日志 {9D972178-C79C-4a8f-8281-29870532CCDD} image

Ljzd-PRO commented 1 year ago

签到失败的一次日志 {9D972178-C79C-4a8f-8281-29870532CCDD} image

可能是API改了

Ljzd-PRO commented 1 year ago

@Ljzd-PRO ,大佬刚刚发现的小问题,我想不太需要开个issue,就想在这提一下。 便笺的文本还得要优化下,实时体力>设置的阈值就提示满了,这样会有个问题:是否会因为提示过体力满了的信息,从而不会在真正溢出的时候发送通知 image

现在应该可以了,不过不知道代码逻辑有没有bug

dontdot commented 1 year ago

我今天按原本签到代码跑一下,get_validate这里卡住了 image 我的打码url需要必填referer,所以我在geetest_json加入referer,这难道不是这么填的吗 image (第一次编辑)已经在geetest_json中把referer删掉了,但是gt的传参还是出错 image

Ljzd-PRO commented 1 year ago

是要求作为URL参数传递吗?那应该要直接写在geetest_url

Ljzd-PRO commented 1 year ago

或者是gt和challenge也需要放在URL里,作为URL参数?那代码还需要改进一下

dontdot commented 1 year ago

试了直接把referer放url里,还是提示gt为空 三个都放进url作参才成功 还有应该不是每个打码平台返回的data都有result,所以没把识别成功的vaildate传回sign() 可以改成if geetest_data['data']['validate'] != None试试

dontdot commented 1 year ago

还有这个

08-23 12:35:57 [ERROR] nonebot | Running Matcher(type='message', module=nonebot_plugin_mystool.plan) failed.
Traceback (most recent call last):
  File "<string>", line 19, in <module>
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\__init__.py", line 309, in run
    get_driver().run(*args, **kwargs)
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\drivers\fastapi.py", line 198, in run
    uvicorn.run(
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\uvicorn\main.py", line 578, in run
    server.run()
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\uvicorn\server.py", line 61, in run
    return asyncio.run(self.serve(sockets=sockets))
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\runners.py", line 190, in run
    return runner.run(main)
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\runners.py", line 118, in run
    return self._loop.run_until_complete(task)
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\base_events.py", line 640, in run_until_complete
    self.run_forever()
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\windows_events.py", line 321, in run_forever
    super().run_forever()
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\base_events.py", line 607, in run_forever
    self._run_once()
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\base_events.py", line 1922, in _run_once
    handle._run()
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\message.py", line 467, in check_and_run_matcher
    await _run_matcher(
> File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\message.py", line 419, in _run_matcher
    await matcher.run(bot, event, state, stack, dependency_cache)
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\internal\matcher\matcher.py", line 753, in run
    await self.simple_run(bot, event, state, stack, dependency_cache)
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\internal\matcher\matcher.py", line 728, in simple_run
    await handler(
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\dependencies\__init__.py", line 108, in __call__
    return await cast(Callable[..., Awaitable[R]], self.call)(**values)
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot_plugin_mystool\plan.py", line 46, in _
    await perform_game_sign(user=user, user_ids=[user_id], matcher=matcher, event=event)
  File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot_plugin_mystool\plan.py", line 216, in perform_game_sign
    if sign_status.login_expired:
AttributeError: 'NoneType' object has no attribute 'login_expired'

print出来看下是sign_status:None 已经重新登录过了的

dontdot commented 1 year ago

https://github.com/Ljzd-PRO/nonebot-plugin-mystool/blob/e29b5b3c47615ddadbccab44c38a4eb588e166bc/src/nonebot_plugin_mystool/game_sign_api.py#L208-L222 改成这段签到没问题,修改来自Night-stars-1 也没有出现AttributeError: 'NoneType' object has no attribute 'login_expired'

                        if gt and challenge:
                            geetest_result = await get_validate(gt, challenge)
                            if _conf.preference.geetest_url:
                                raise MystoolException("遇到验证码")
                            else:
                                return BaseApiStatus(need_verify=True)
            if geetest_result.validate:
                return BaseApiStatus(success=True, need_verify=True)
            else:
                return BaseApiStatus(success=True)

        except MystoolException:
            return BaseApiStatus(need_verify=True)
        except tenacity.RetryError as e:
            if is_incorrect_return(e):
                logger.exception(f"游戏签到 - 服务器没有正确返回")
                logger.debug(f"网络请求返回: {res.text}")
                return BaseApiStatus(incorrect_return=True)
            elif _conf.preference.geetest_url and gt and challenge:
                logger.error(f"游戏签到 - 进行人机验证失败")
                return BaseApiStatus(need_verify=True)
            else:
                logger.exception(f"游戏签到 - 请求失败")
                return BaseApiStatus(network_error=True)

class MystoolException(Exception):
    """Base genshinhelper exception."""

    def __init__(self, message):
        super().__init__(message)
        logger.error(message)
Ljzd-PRO commented 1 year ago

https://github.com/Ljzd-PRO/nonebot-plugin-mystool/blob/e29b5b3c47615ddadbccab44c38a4eb588e166bc/src/nonebot_plugin_mystool/game_sign_api.py#L208-L222

改成这段签到没问题,修改来自Night-stars-1 也没有出现AttributeError: 'NoneType' object has no attribute 'login_expired'

                        if gt and challenge:
                            geetest_result = await get_validate(gt, challenge)
                            if _conf.preference.geetest_url:
                                raise MystoolException("遇到验证码")
                            else:
                                return BaseApiStatus(need_verify=True)
            if geetest_result.validate:
                return BaseApiStatus(success=True, need_verify=True)
            else:
                return BaseApiStatus(success=True)

        except MystoolException:
            return BaseApiStatus(need_verify=True)
        except tenacity.RetryError as e:
            if is_incorrect_return(e):
                logger.exception(f"游戏签到 - 服务器没有正确返回")
                logger.debug(f"网络请求返回: {res.text}")
                return BaseApiStatus(incorrect_return=True)
            elif _conf.preference.geetest_url and gt and challenge:
                logger.error(f"游戏签到 - 进行人机验证失败")
                return BaseApiStatus(need_verify=True)
            else:
                logger.exception(f"游戏签到 - 请求失败")
                return BaseApiStatus(network_error=True)

class MystoolException(Exception):
    """Base genshinhelper exception."""

    def __init__(self, message):
        super().__init__(message)
        logger.error(message)

这样人机验证以后有重新再执行签到吗

dontdot commented 1 year ago

有的,原神和崩铁都是 初次签到(失败)-验证打码-再次签到(成功) image

Ljzd-PRO commented 1 year ago

那就是执行了两次签到函数?我猜和DS有关,人机验证花了10秒以上。可以试试新的代码

dontdot commented 1 year ago

那就是执行了两次签到函数?我猜和DS有关,人机验证花了10秒以上。可以试试新的代码

应该是吧,用着挺正常的,没出现过什么问题,我也没改过DS,就只替换了L208-L222那段代码,然后人机验证完它就自己再次执行签到

dontdot commented 1 year ago

8/25 1:37 dev代码 image

Details

08-25 01:34:22 [SUCCESS] nonebot | OneBot V11 3451066253 | [message.private.friend]: Message -409162578 from 1242922947 '签到' 08-25 01:34:22 [DEBUG] nonebot | Checking for matchers in priority 1... 08-25 01:34:22 [DEBUG] nonebot | Checking for matchers in priority 2... 08-25 01:34:23 [DEBUG] nonebot | Checking for matchers in priority 4... 08-25 01:34:23 [DEBUG] nonebot | Checking for matchers in priority 5... 08-25 01:34:23 [INFO] nonebot | Event will be handled by Matcher(type='message', module=nonebot_plugin_mystool.plan) 08-25 01:34:23 [DEBUG] nonebot | Running Matcher(type='message', module=nonebot_plugin_mystool.plan) 08-25 01:34:23 [DEBUG] nonebot | Running handler Dependent(call=_) 08-25 01:34:23 [DEBUG] nonebot | OneBot V11 | Calling API send_msg 08-25 01:34:32 [WARNING] nonebot_plugin_mystool | 游戏签到 - 用户 76454149 可能被人机验证阻拦 08-25 01:34:32 [DEBUG] nonebot_plugin_mystool | 网络请求返回: {"retcode":0,"message":"OK","data":{"code":"","risk_code":5001,"gt":"afa69b855e321950b027ebab65f86ce8","challenge":"68cb7ff4bd208a76369e09a47b976528","success":1,"is_risk":true}} 08-25 01:34:32 [DEBUG] nonebot | OneBot V11 | Calling API send_msg vaildate:{'msg': 'gt不能为空', 'status': -1} vaildate:{'msg': 'gt不能为空', 'status': -1} vaildate:{'msg': 'gt不能为空', 'status': -1} vaildate:{'msg': 'gt不能为空', 'status': -1} 08-25 01:34:45 [ERROR] nonebot_plugin_mystool | 获取人机验证validate失败 Traceback (most recent call last): File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot_plugin_mystool\utils.py", line 249, in get_validate validate = geetest_data['data']['validate'] KeyError: 'data' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "", line 19, in File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\__init__.py", line 309, in run get_driver().run(*args, **kwargs) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\drivers\fastapi.py", line 198, in run uvicorn.run( File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\uvicorn\main.py", line 578, in run server.run() File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\uvicorn\server.py", line 61, in run return asyncio.run(self.serve(sockets=sockets)) File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\runners.py", line 190, in run return runner.run(main) File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\runners.py", line 118, in run return self._loop.run_until_complete(task) File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\base_events.py", line 640, in run_until_complete self.run_forever() File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\windows_events.py", line 321, in run_forever super().run_forever() File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\base_events.py", line 607, in run_forever self._run_once() File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\base_events.py", line 1922, in _run_once handle._run() File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\events.py", line 80, in _run self._context.run(self._callback, *self._args) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\message.py", line 467, in check_and_run_matcher await _run_matcher( File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\message.py", line 419, in _run_matcher await matcher.run(bot, event, state, stack, dependency_cache) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\internal\matcher\matcher.py", line 753, in run await self.simple_run(bot, event, state, stack, dependency_cache) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\internal\matcher\matcher.py", line 728, in simple_run await handler( File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\dependencies\__init__.py", line 108, in __call__ return await cast(Callable[..., Awaitable[R]], self.call)(**values) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot_plugin_mystool\plan.py", line 46, in _ await perform_game_sign(user=user, user_ids=[user_id], matcher=matcher, event=event) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot_plugin_mystool\plan.py", line 208, in perform_game_sign sign_status = await signer.sign( File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot_plugin_mystool\game_sign_api.py", line 220, in sign geetest_result = await get_validate(gt, challenge) > File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot_plugin_mystool\utils.py", line 243, in get_validate async for attempt in get_async_retry(retry): File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\tenacity\_asyncio.py", line 71, in __anext__ do = self.iter(retry_state=self._retry_state) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\tenacity\__init__.py", line 326, in iter raise retry_exc from fut.exception() tenacity.RetryError: RetryError[] 08-25 01:34:46 [INFO] nonebot | Matcher(type='message', module=nonebot_plugin_mystool.plan) running complete 08-25 01:34:46 [ERROR] nonebot | Running Matcher(type='message', module=nonebot_plugin_mystool.plan) failed. Traceback (most recent call last): File "", line 19, in File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\__init__.py", line 309, in run get_driver().run(*args, **kwargs) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\drivers\fastapi.py", line 198, in run uvicorn.run( File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\uvicorn\main.py", line 578, in run server.run() File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\uvicorn\server.py", line 61, in run return asyncio.run(self.serve(sockets=sockets)) File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\runners.py", line 190, in run return runner.run(main) File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\runners.py", line 118, in run return self._loop.run_until_complete(task) File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\base_events.py", line 640, in run_until_complete self.run_forever() File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\windows_events.py", line 321, in run_forever super().run_forever() File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\base_events.py", line 607, in run_forever self._run_once() File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\base_events.py", line 1922, in _run_once handle._run() File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\events.py", line 80, in _run self._context.run(self._callback, *self._args) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\message.py", line 467, in check_and_run_matcher await _run_matcher( > File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\message.py", line 419, in _run_matcher await matcher.run(bot, event, state, stack, dependency_cache) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\internal\matcher\matcher.py", line 753, in run await self.simple_run(bot, event, state, stack, dependency_cache) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\internal\matcher\matcher.py", line 728, in simple_run await handler( File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\dependencies\__init__.py", line 108, in __call__ return await cast(Callable[..., Awaitable[R]], self.call)(**values) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot_plugin_mystool\plan.py", line 46, in _ await perform_game_sign(user=user, user_ids=[user_id], matcher=matcher, event=event) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot_plugin_mystool\plan.py", line 215, in perform_game_sign if sign_status.login_expired: AttributeError: 'NoneType' object has no attribute 'login_expired' 08-25 01:34:46 [DEBUG] nonebot | Stop event propagation 08-25 01:34:46 [DEBUG] nonebot | Checking for matchers completed

Ljzd-PRO commented 1 year ago

8/25 1:37 dev代码 image

Details

URL要加入参数gtchallenge。例如 https://example.net/action?gt={gt}&challenge={challenge}

Ljzd-PRO commented 1 year ago

那就是执行了两次签到函数?我猜和DS有关,人机验证花了10秒以上。可以试试新的代码

应该是吧,用着挺正常的,没出现过什么问题,我也没改过DS,就只替换了L208-L222那段代码,然后人机验证完它就自己再次执行签到

DS的生成和时间有关,之前完成人机验证以后没有重新生成DS,先前的DS可能已经过期失效了。

dontdot commented 1 year ago

?gt={gt}&challenge={challenge}

我给忘了0.0 682877933da304f19e0fc2d1fd983547

Details

08-25 09:05:37 [SUCCESS] nonebot | OneBot V11 3451066253 | [message.private.friend]: Message 307031118 from 1242922947 '签到' 08-25 09:05:37 [DEBUG] nonebot | Checking for matchers in priority 1... 08-25 09:05:37 [DEBUG] nonebot | Checking for matchers in priority 2... 08-25 09:05:37 [DEBUG] nonebot | Checking for matchers in priority 4... 08-25 09:05:37 [DEBUG] nonebot | Checking for matchers in priority 5... 08-25 09:05:37 [INFO] nonebot | Event will be handled by Matcher(type='message', module=nonebot_plugin_mystool.plan) 08-25 09:05:37 [DEBUG] nonebot | Running Matcher(type='message', module=nonebot_plugin_mystool.plan) 08-25 09:05:37 [DEBUG] nonebot | Running handler Dependent(call=_) 08-25 09:05:37 [DEBUG] nonebot | OneBot V11 | Calling API send_msg 08-25 09:05:44 [WARNING] nonebot_plugin_mystool | 游戏签到 - 用户 76454149 可能被人机验证阻拦 08-25 09:05:44 [DEBUG] nonebot_plugin_mystool | 网络请求返回: {"retcode":0,"message":"OK","data":{"code":"","risk_code":5001,"gt":"afa69b855e321950b027ebab65f86ce8","challenge":"3cea609cc8e07525c1cea796ec94bdbb","success":1,"is_risk":true}} 08-25 09:05:44 [DEBUG] nonebot | OneBot V11 | Calling API send_msg http://api.rrocr.com/api/recognize.html?appkey=000000000000000000000000000&referer=https://webstatic.mihoyo.com/>=afa69b855e321950b027ebab65f86ce8&challenge=3cea609cc8e07525c1cea796ec94bdbb vaildate:{'msg': '识别成功', 'time': 12427, 'data': {'challenge': '3cea609cc8e07525c1cea796ec94bdbb', 'type': '三代点选特殊', 'validate': 'fa2b67cef8b66b52154cbc972884ad45'}, 'status': 0} 08-25 09:05:58 [INFO] nonebot | Matcher(type='message', module=nonebot_plugin_mystool.plan) running complete 08-25 09:05:58 [ERROR] nonebot | Running Matcher(type='message', module=nonebot_plugin_mystool.plan) failed. Traceback (most recent call last): File "", line 19, in File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\__init__.py", line 309, in run get_driver().run(*args, **kwargs) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\drivers\fastapi.py", line 198, in run uvicorn.run( File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\uvicorn\main.py", line 578, in run server.run() File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\uvicorn\server.py", line 61, in run return asyncio.run(self.serve(sockets=sockets)) File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\runners.py", line 190, in run return runner.run(main) File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\runners.py", line 118, in run return self._loop.run_until_complete(task) File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\base_events.py", line 640, in run_until_complete self.run_forever() File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\windows_events.py", line 321, in run_forever super().run_forever() File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\base_events.py", line 607, in run_forever self._run_once() File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\base_events.py", line 1922, in _run_once handle._run() File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\events.py", line 80, in _run self._context.run(self._callback, *self._args) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\message.py", line 467, in check_and_run_matcher await _run_matcher( File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\message.py", line 419, in _run_matcher await matcher.run(bot, event, state, stack, dependency_cache) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\internal\matcher\matcher.py", line 753, in run await self.simple_run(bot, event, state, stack, dependency_cache) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\internal\matcher\matcher.py", line 728, in simple_run await handler( File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\dependencies\__init__.py", line 108, in __call__ return await cast(Callable[..., Awaitable[R]], self.call)(**values) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot_plugin_mystool\plan.py", line 46, in _ await perform_game_sign(user=user, user_ids=[user_id], matcher=matcher, event=event) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot_plugin_mystool\plan.py", line 215, in perform_game_sign if sign_status.login_expired: AttributeError: 'NoneType' object has no attribute 'login_expired' 08-25 09:05:59 [DEBUG] nonebot | Stop event propagation 08-25 09:05:59 [DEBUG] nonebot | Checking for matchers completed

dontdot commented 1 year ago

那就是执行了两次签到函数?我猜和DS有关,人机验证花了10秒以上。可以试试新的代码

应该是吧,用着挺正常的,没出现过什么问题,我也没改过DS,就只替换了L208-L222那段代码,然后人机验证完它就自己再次执行签到

DS的生成和时间有关,之前完成人机验证以后没有重新生成DS,先前的DS可能已经过期失效了。

好像是没回调成功,只生成了一次DS。on_geetest_callback是怎么回调的?不是很懂这里,else怎么还会要调用on_geetest_callback ( )这是函数吗?

Details

08-25 17:00:42 [SUCCESS] nonebot | OneBot V11 3451066253 | [message.private.friend]: Message 2067605888 from 1242922947 '签到' 08-25 17:00:43 [INFO] nonebot | Event will be handled by Matcher(type='message', module=nonebot_plugin_mystool.plan) 08-25 17:00:43 [DEBUG] nonebot | Running Matcher(type='message', module=nonebot_plugin_mystool.plan) 08-25 17:00:43 [DEBUG] nonebot | Running handler Dependent(call=_) 08-25 17:00:43 [DEBUG] nonebot | OneBot V11 | Calling API send_msg **08-25 17:00:48 [DEBUG] nonebot_plugin_mystool | DS:**{'Host': 'api-takumi.mihoyo.com', 'x-rpc-device_model': 'iPhone10,2', 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) miHoYoBBS/2.55.1', 'Referer': 'https://webstatic.mihoyo.com/', 'x-rpc-device_name': 'iPhone', 'Origin': 'https://webstatic.mihoyo.com', 'Connection': 'keep-alive', 'x-rpc-channel': 'appstore', 'x-rpc-app_version': '2.55.1', 'Accept-Language': 'zh-CN,zh-Hans;q=0.9', 'x-rpc-device_id': '4E25C035-0137-4D94-8E9D-B6A4AE630CA9', 'x-rpc-client_type': '5', 'Accept': 'application/json, text/plain, */*', 'Content-Type': 'application/json;charset=utf-8', 'Accept-Encoding': 'gzip, deflate, br', 'x-rpc-sys_version': '16.2', 'x-rpc-platform': 'ios', 'DS': '1692954048,dl405c,956e5876245f8c7573925318fc6e154d', 'Sec-Fetch-Dest': 'empty', 'Sec-Fetch-Site': 'same-site'} 08-25 17:00:51 [DEBUG] nonebot_plugin_mystool | 签到内容: 08-25 17:00:51 [WARNING] nonebot_plugin_mystool | 游戏签到 - 用户 76454149 可能被人机验证阻拦 08-25 17:00:51 [DEBUG] nonebot_plugin_mystool | 网络请求返回: {"retcode":0,"message":"OK","data":{"code":"","risk_code":375,"gt":"f1342eaf43e356aa680d18f55fa1f1ca","challenge":"bb42f5af5b616834509970e9bda57aa8","success":1}} 08-25 17:00:51 [DEBUG] nonebot | OneBot V11 | Calling API send_msg **08-25 17:00:52 [DEBUG] nonebot_plugin_mystool | **on_geetest_callback:{'message_id': 1300712523}**** vaildate:{'msg': '识别成功', 'time': 12502, 'data': {'challenge': 'bb42f5af5b616834509970e9bda57aa8', 'type': '三代点选特殊', 'validate': 'd2701abcf6f601c9e7a49ac2e451be8b'}, 'status': 0} **08-25 17:01:07 [DEBUG] nonebot_plugin_mystool | sign_status:None** 08-25 17:01:07 [INFO] nonebot | Matcher(type='message', module=nonebot_plugin_mystool.plan) running complete 08-25 17:01:07 [ERROR] nonebot | Running Matcher(type='message', module=nonebot_plugin_mystool.plan) failed.

Details

Traceback (most recent call last): File "", line 19, in File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\__init__.py", line 309, in run get_driver().run(*args, **kwargs) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\drivers\fastapi.py", line 198, in run uvicorn.run( File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\uvicorn\main.py", line 578, in run server.run() File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\uvicorn\server.py", line 61, in run return asyncio.run(self.serve(sockets=sockets)) File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\runners.py", line 190, in run return runner.run(main) File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\runners.py", line 118, in run return self._loop.run_until_complete(task) File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\base_events.py", line 640, in run_until_complete self.run_forever() File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\windows_events.py", line 321, in run_forever super().run_forever() File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\base_events.py", line 607, in run_forever self._run_once() File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\base_events.py", line 1922, in _run_once handle._run() File "C:\ProgramData\anaconda3\envs\3y7\Lib\asyncio\events.py", line 80, in _run self._context.run(self._callback, *self._args) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\message.py", line 467, in check_and_run_matcher await _run_matcher( File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\message.py", line 419, in _run_matcher await matcher.run(bot, event, state, stack, dependency_cache) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\internal\matcher\matcher.py", line 753, in run await self.simple_run(bot, event, state, stack, dependency_cache) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\internal\matcher\matcher.py", line 728, in simple_run await handler( File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot\dependencies\__init__.py", line 108, in __call__ return await cast(Callable[..., Awaitable[R]], self.call)(**values)

File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot_plugin_mystool\plan.py", line 46, in _ await perform_game_sign(user=user, user_ids=[user_id], matcher=matcher, event=event) File "C:\ProgramData\anaconda3\envs\3y7\Lib\site-packages\nonebot_plugin_mystool\plan.py", line 216, in perform_game_sign if sign_status.login_expired: AttributeError: 'NoneType' object has no attribute 'login_expired'

Ljzd-PRO commented 1 year ago

那就是执行了两次签到函数?我猜和DS有关,人机验证花了10秒以上。可以试试新的代码

应该是吧,用着挺正常的,没出现过什么问题,我也没改过DS,就只替换了L208-L222那段代码,然后人机验证完它就自己再次执行签到

DS的生成和时间有关,之前完成人机验证以后没有重新生成DS,先前的DS可能已经过期失效了。

好像是没回调成功,只生成了一次DS。on_geetest_callback是怎么回调的?不是很懂这里,else怎么还会要调用on_geetest_callback ( )这是函数吗?

Details

这个是在进行人机验证之前执行的,比如可以发出“正在进行人机验证”的消息。然后对于异步函数会加上await关键字,同步函数就不会。

Ljzd-PRO commented 1 year ago

默认错误重试次数是5次,遇到人机验证以后进行人机验证,然后用continue进入下一次重试循环,我现在把DS的生成放在了重试循环里,应该是会再次生成DS,然后读取第一次循环保存的人机验证结果,读到Headers里。

dontdot commented 1 year ago

默认错误重试次数是5次,遇到人机验证以后进行人机验证,然后用continue进入下一次重试循环,我现在把DS的生成放在了重试循环里,应该是会再次生成DS,然后读取第一次循环保存的人机验证结果,读到Headers里。

image 你可以看下我下午回复的details,里面只有一次DS的记录,人机验证后重试后,日志里不应该会有两条DS记录吗

dontdot commented 1 year ago

找到原因了大佬 https://github.com/Ljzd-PRO/nonebot-plugin-mystool/blob/192edc12fcc517fcebc14e955908587c7e6570b9/src/nonebot_plugin_mystool/game_sign_api.py#L216-L217 这里要改成await on_geetest_callback()

dontdot commented 1 year ago
                        if gt and challenge:
                            if _conf.preference.geetest_url:
                                geetest_result = await get_validate(gt, challenge)
                                if on_geetest_callback and attempt.retry_state.attempt_number == 1:
                                    if isinstance(on_geetest_callback, Coroutine):
                                        await on_geetest_callback()
                                    else:
                                        on_geetest_callback()
                            else:
                                return BaseApiStatus(need_verify=True)

实际测试中的代码我把geetest_result = await get_validate(gt, challenge)调回以前位置,不过应该不影响的。

Ljzd-PRO commented 1 year ago

找到原因了大佬

https://github.com/Ljzd-PRO/nonebot-plugin-mystool/blob/192edc12fcc517fcebc14e955908587c7e6570b9/src/nonebot_plugin_mystool/game_sign_api.py#L216-L217

这里要改成await on_geetest_callback()

编辑器提示 'Coroutine' 对象不可调用

dontdot commented 1 year ago

啊,我没提示 image

Ljzd-PRO commented 1 year ago

啊,我没提示 image

PyCharm会提示。 不过现在已经改了,改成了在外面人机验证

dontdot commented 1 year ago

ok,我明天试试签到,今天给试回调时签成功了

dontdot commented 1 year ago

可以签了,就是昨天你改的时候把def sign里的headers["DS"]删掉了导致headers缺少DS引起服务器没有正确返回,添加回去签到就没问题了

dontdot commented 1 year ago

DS又不行了唉 image image

dontdot commented 1 year ago

我找到一个列有各个版本salt的项目米游社

beiji-O-o commented 1 year ago

我找到一个列有各个版本salt的项目米游社

屏幕截图 2023-08-30 203214 屏幕截图 2023-08-30 203243

大佬,我这个一输入/签到就报错,我这个是写错了吗。

Ljzd-PRO commented 1 year ago

我找到一个列有各个版本salt的项目米游社

屏幕截图 2023-08-30 203214 屏幕截图 2023-08-30 203243 大佬,我这个一输入/签到就报错,我这个是写错了吗。

geetest_params 不需要写gt和challenge,默认就会带有gt和challenge参数

Ljzd-PRO commented 1 year ago

我找到一个列有各个版本salt的项目米游社

屏幕截图 2023-08-30 203214 屏幕截图 2023-08-30 203243 大佬,我这个一输入/签到就报错,我这个是写错了吗。

https://github.com/Ljzd-PRO/nonebot-plugin-mystool/blob/4980931a64e5ed48cee9d6206e169101c2cb9057/src/nonebot_plugin_mystool/utils.py#L240

这一行的 Preference.geetest_json 改成 Preference().geetest_json 试试