Todysheep / nonebot_plugin_bottle

Bottle post plugin in Nonebot
GNU General Public License v3.0
29 stars 12 forks source link

【Bug】往漂流瓶里塞入某些字符会导致bot卡死 #33

Closed KaMmySuma closed 1 year ago

KaMmySuma commented 1 year ago

群友往漂流瓶塞了段字符: 如下:

丢漂流瓶 [ . .. .. . [ . .. .. . [ . .. .. . [ . .. .. .

随后bot卡死,不响应任何消息,等待一分钟后会恢复,如泄洪般触发这一分钟里各群积累的消息。 之后我自己去测试了一下,这段字符会百分百触发卡死。 这个瓶子会被写入数据库:

[ { "user": xxxxx "group": xxxxx "user_name": "𝓚𝓪𝓜𝓶𝔂", "group_name": "咪啪窝", "text": "[ . .. .. . [ . .. .. . [ . .. .. . [ . .. .. .", "report": 0, "reported": [], "picked": 2, "del": 0, "comment": [], "time": "2023-04-17 17:27:38" } ]

但如果试图捡起它则会报错: 04-17 17:28:05 [ERROR] nonebot | Running Matcher(type='message', module=nonebot_plugin_bottle) failed. Traceback (most recent call last): File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main return _run_code(code, main_globals, None, File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code exec(code, run_globals) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\Scripts\nb.exe__main.py", line 7, in sys.exit(main()) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\click\core.py", line 1130, in call return self.main(*args, kwargs) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\click\core.py", line 1055, in main rv = self.invoke(ctx) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\click\core.py", line 1657, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\click\core.py", line 1404, in invoke return ctx.invoke(self.callback, ctx.params) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\click\core.py", line 760, in invoke return callback(*args, *kwargs) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nb_cli\commands\main.py", line 30, in run run_bot(file, app) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nb_cli\handlers\deploy.py", line 25, in run_bot nonebot.run(app=f"{module_name}:{app}") File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot__init__.py", line 309, in run get_driver().run(args, *kwargs) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot\drivers\fastapi.py", line 198, in run uvicorn.run( File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\uvicorn\main.py", line 568, in run server.run() File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\uvicorn\server.py", line 59, in run return asyncio.run(self.serve(sockets=sockets)) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\asyncio\runners.py", line 44, in run return loop.run_until_complete(main) File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 636, in run_until_complete self.run_forever() File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\asyncio\windows_events.py", line 321, in run_forever super().run_forever() File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 603, in run_forever self._run_once() File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 1899, in _run_once handle._run() File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\asyncio\events.py", line 80, in _run self._context.run(self._callback, self._args) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot\message.py", line 141, in _check_matcher await _run_matcher(Matcher, bot, event, state, stack, dependency_cache)

File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot\message.py", line 187, in _run_matcher await matcher.run(bot, event, state, stack, dependency_cache) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot\internal\matcher\matcher.py", line 753, in run await self.simple_run(bot, event, state, stack, dependency_cache) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot\internal\matcher\matcher.py", line 728, in simple_run await handler( File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot\dependencies__init.py", line 108, in call return await cast(Callable[..., Awaitable[R]], self.call)(values) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot_plugin_bottle__init__.py", line 116, in g await get.finish(f'【漂流瓶No.{bott[0]}|被捡到{data["picked"]}次】来自【{group}】的 {user} !\n'+Message(data['text']) + (f"\n★评论共 {len(comment_list)} 条★\n{comment.strip()}" if comment else "")) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot\internal\matcher\matcher.py", line 481, in finish await cls.send(message, kwargs) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot\internal\matcher\matcher.py", line 466, in send return await bot.send(event=event, message=_message, **kwargs) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot_plugin_guild_patch\init.py", line 30, in patched_send return await original_send(self, event, message, **kwargs) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot\adapters\onebot\v11\bot.py", line 220, in send return await self.class__.send_handler(self, event, message, kwargs) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot\adapters\onebot\v11\bot.py", line 174, in send return await bot.send_msg(params) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot\internal\adapter\bot.py", line 120, in call_api raise exception File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot\internal\adapter\bot.py", line 98, in call_api result = await self.adapter._call_api(self, api, data) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot\adapters\onebot\v11\adapter.py", line 140, in _call_api return handle_api_result(await self._result_store.fetch(seq, timeout)) File "C:\Users\Administrator\AppData\Local\pypoetry\Cache\virtualenvs\mipa-4Y3EISai-py3.10\lib\site-packages\nonebot\adapters\onebot\v11\utils.py", line 58, in handle_api_result raise ActionFailed(result) nonebot.adapters.onebot.v11.exception.ActionFailed: ActionFailed(data=None, echo='21', message='send group message failed: blocked by server', msg='SEND_MSG_API_ERROR', retcode=100, status='failed', wording='send group message failed: blocked by server')

KaMmySuma commented 1 year ago

代码复制带这边后就变了,具体请看截图:

image 1HN)`EJTSYY914I(ASIH9T image

Todysheep commented 1 year ago

首先抱歉这么晚处理issue(被学校关了五周对不起(磕磕磕) 然后我看了一下,在丢漂流瓶的时候会卡是因为字符过多,且在代码中写入函数不是异步造成的阻塞(但是好像有大佬帮我改成异步了,我这边没法复制你那里的字符,可以麻烦你再试试(( 在捡起漂流瓶报错的原因就是因为字符过长被服务器拦截了,这个没什么好说的(

KaMmySuma commented 1 year ago

首先抱歉这么晚处理issue(被学校关了五周对不起(磕磕磕) 然后我看了一下,在丢漂流瓶的时候会卡是因为字符过多,且在代码中写入函数不是异步造成的阻塞(但是好像有大佬帮我改成异步了,我这边没法复制你那里的字符,可以麻烦你再试试(( 在捡起漂流瓶报错的原因就是因为字符过长被服务器拦截了,这个没什么好说的(

丢漂流瓶.txt 感谢大佬答复~ 我将插件更新到最新版本后进行尝试,仍然是卡死。

我将该字符复制进txt里上传文件。 记事本打开是一堆口字,但是复制进qq聊天框里并发送后就会变成一小段蚂蚁窝。

LambdaYH commented 1 year ago

首先抱歉这么晚处理issue(被学校关了五周对不起(磕磕磕) 然后我看了一下,在丢漂流瓶的时候会卡是因为字符过多,且在代码中写入函数不是异步造成的阻塞(但是好像有大佬帮我改成异步了,我这边没法复制你那里的字符,可以麻烦你再试试(( 在捡起漂流瓶报错的原因就是因为字符过长被服务器拦截了,这个没什么好说的(

丢漂流瓶.txt 感谢大佬答复~ 我将插件更新到最新版本后进行尝试,仍然是卡死。

我将该字符复制进txt里上传文件。 记事本打开是一堆口字,但是复制进qq聊天框里并发送后就会变成一小段蚂蚁窝。

测试了一下,除了会把我的shell卡崩外没有什么异常 image

日志里看当成功匹配到插件matcher后也没有阻塞,但是在匹配的过程中阻塞了4秒。 所以目前的判断是:

  1. bot卡住不是此插件造成的。
  2. nonebot2检测你这段超长文字并寻找到响应的插件才是导致bot卡住的原因。(或许是heweather,记得以前输入过多图片时这个插件的正则检测规则会导致主线程阻塞
KaMmySuma commented 1 year ago

首先抱歉这么晚处理issue(被学校关了五周对不起(磕磕磕) 然后我看了一下,在丢漂流瓶的时候会卡是因为字符过多,且在代码中写入函数不是异步造成的阻塞(但是好像有大佬帮我改成异步了,我这边没法复制你那里的字符,可以麻烦你再试试(( 在捡起漂流瓶报错的原因就是因为字符过长被服务器拦截了,这个没什么好说的(

丢漂流瓶.txt 感谢大佬答复~ 我将插件更新到最新版本后进行尝试,仍然是卡死。 我将该字符复制进txt里上传文件。 记事本打开是一堆口字,但是复制进qq聊天框里并发送后就会变成一小段蚂蚁窝。

测试了一下,除了会把我的shell卡崩外没有什么异常 image

日志里看当成功匹配到插件matcher后也没有阻塞,但是在匹配的过程中阻塞了4秒。 所以目前的判断是:

  1. bot卡住不是此插件造成的。
  2. nonebot2检测你这段超长文字并寻找到响应的插件才是导致bot卡住的原因。(或许是heweather,记得以前输入过多图片时这个插件的正则检测规则会导致主线程阻塞

感谢大佬分析,我新建了一个nonebot2项目进行测试,仅安装漂流瓶插件,确实没有再次复现该问题,并非此插件造成的卡死。 而后我又同时安装了漂流瓶与heweather后再次尝试,卡死复现。

问题已经明了了,大佬分析的很到位,感谢!