Closed beiji-O-o closed 1 year ago
这里应该是执行签到后,再次获取签到历史记录发现实际并没有完成签到。 App里有显示签到成功吗?
这里应该是执行签到后,再次获取签到历史记录发现实际并没有完成签到。 App里有显示签到成功吗?
没有
这里应该是执行签到后,再次获取签到历史记录发现实际并没有完成签到。 App里有显示签到成功吗?
要不要参考下@Night-stars-1这位的相关签到代码,我用他的签到部分一直没出现什么问题
去米游社看也是未签到有人机验证
去米游社看也是未签到有人机验证
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}')
看看日志是什么结果
去米游社看也是未签到有人机验证
你在208后面插入一行,输入
logger.info(f'打码结果:{geetest_result}')
看看日志是什么结果
179 行后面可以加一个
logger.debug(headers)
输出Headers到日志,看看有没有 x-rpc-validate
, x-rpc-challenge
, x-rpc-seccode
之前用打码平台有签到成功过吗
看上去是完成人机验证以后再签到,又被要求进行人机验证
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)
logger.debug(headers)
没输出
之前用打码平台有签到成功过吗
刚开始的几天成功了
之前用打码平台有签到成功过吗
刚开始的几天成功了
先改成我fork里的1.7分支里的def sign部分 用着先,等大佬修复
def sign部分 是什么啊,我好像找不到😂
之前用打码平台有签到成功过吗
刚开始的几天成功了
先改成我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的版本再说
之前用打码平台有签到成功过吗
刚开始的几天成功了
先改成我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 ,大佬刚刚发现的小问题,我想不太需要开个issue,就想在这提一下。 便笺的文本还得要优化下,实时体力>设置的阈值就提示满了,这样会有个问题:是否会因为提示过体力满了的信息,从而不会在真正溢出的时候发送通知
签到失败的一次日志
签到失败的一次日志
可能是API改了
@Ljzd-PRO ,大佬刚刚发现的小问题,我想不太需要开个issue,就想在这提一下。 便笺的文本还得要优化下,实时体力>设置的阈值就提示满了,这样会有个问题:是否会因为提示过体力满了的信息,从而不会在真正溢出的时候发送通知
现在应该可以了,不过不知道代码逻辑有没有bug
我今天按原本签到代码跑一下,get_validate
这里卡住了
我的打码url需要必填referer,所以我在geetest_json加入referer,这难道不是这么填的吗
(第一次编辑)已经在geetest_json中把referer删掉了,但是gt的传参还是出错
是要求作为URL参数传递吗?那应该要直接写在geetest_url
里
或者是gt和challenge也需要放在URL里,作为URL参数?那代码还需要改进一下
试了直接把referer放url里,还是提示gt为空
三个都放进url作参才成功
还有应该不是每个打码平台返回的data都有result,所以没把识别成功的vaildate传回sign()
可以改成if geetest_data['data']['validate'] != None
试试
还有这个
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
已经重新登录过了的
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)
改成这段签到没问题,修改来自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)
这样人机验证以后有重新再执行签到吗
有的,原神和崩铁都是 初次签到(失败)-验证打码-再次签到(成功)
那就是执行了两次签到函数?我猜和DS有关,人机验证花了10秒以上。可以试试新的代码
那就是执行了两次签到函数?我猜和DS有关,人机验证花了10秒以上。可以试试新的代码
应该是吧,用着挺正常的,没出现过什么问题,我也没改过DS,就只替换了L208-L222那段代码,然后人机验证完它就自己再次执行签到
8/25 1:37 dev代码
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 "
8/25 1:37 dev代码
Details
URL要加入参数gt
和challenge
。例如 https://example.net/action?gt={gt}&challenge={challenge}
那就是执行了两次签到函数?我猜和DS有关,人机验证花了10秒以上。可以试试新的代码
应该是吧,用着挺正常的,没出现过什么问题,我也没改过DS,就只替换了L208-L222那段代码,然后人机验证完它就自己再次执行签到
DS的生成和时间有关,之前完成人机验证以后没有重新生成DS,先前的DS可能已经过期失效了。
?gt={gt}&challenge={challenge}
我给忘了0.0
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 "
那就是执行了两次签到函数?我猜和DS有关,人机验证花了10秒以上。可以试试新的代码
应该是吧,用着挺正常的,没出现过什么问题,我也没改过DS,就只替换了L208-L222那段代码,然后人机验证完它就自己再次执行签到
DS的生成和时间有关,之前完成人机验证以后没有重新生成DS,先前的DS可能已经过期失效了。
好像是没回调成功,只生成了一次DS。on_geetest_callback
是怎么回调的?不是很懂这里,else怎么还会要调用on_geetest_callback ( )
这是函数吗?
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 | 签到内容:
Traceback (most recent call last):
File "Details
那就是执行了两次签到函数?我猜和DS有关,人机验证花了10秒以上。可以试试新的代码
应该是吧,用着挺正常的,没出现过什么问题,我也没改过DS,就只替换了L208-L222那段代码,然后人机验证完它就自己再次执行签到
DS的生成和时间有关,之前完成人机验证以后没有重新生成DS,先前的DS可能已经过期失效了。
好像是没回调成功,只生成了一次DS。
on_geetest_callback
是怎么回调的?不是很懂这里,else怎么还会要调用on_geetest_callback ( )
这是函数吗?Details
这个是在进行人机验证之前执行的,比如可以发出“正在进行人机验证”的消息。然后对于异步函数会加上await关键字,同步函数就不会。
默认错误重试次数是5次,遇到人机验证以后进行人机验证,然后用continue进入下一次重试循环,我现在把DS的生成放在了重试循环里,应该是会再次生成DS,然后读取第一次循环保存的人机验证结果,读到Headers里。
默认错误重试次数是5次,遇到人机验证以后进行人机验证,然后用continue进入下一次重试循环,我现在把DS的生成放在了重试循环里,应该是会再次生成DS,然后读取第一次循环保存的人机验证结果,读到Headers里。
你可以看下我下午回复的details,里面只有一次DS的记录,人机验证后重试后,日志里不应该会有两条DS记录吗
找到原因了大佬
https://github.com/Ljzd-PRO/nonebot-plugin-mystool/blob/192edc12fcc517fcebc14e955908587c7e6570b9/src/nonebot_plugin_mystool/game_sign_api.py#L216-L217
这里要改成await on_geetest_callback()
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)
调回以前位置,不过应该不影响的。
找到原因了大佬
这里要改成
await on_geetest_callback()
编辑器提示 'Coroutine' 对象不可调用
啊,我没提示
啊,我没提示
PyCharm会提示。 不过现在已经改了,改成了在外面人机验证
ok,我明天试试签到,今天给试回调时签成功了
可以签了,就是昨天你改的时候把def sign
里的headers["DS"]
删掉了导致headers缺少DS引起服务器没有正确返回
,添加回去签到就没问题了
DS又不行了唉
我找到一个列有各个版本salt的项目米游社
大佬,我这个一输入/签到就报错,我这个是写错了吗。
geetest_params
不需要写gt和challenge,默认就会带有gt和challenge参数