he0119 / nonebot-plugin-wordcloud

适用于 NoneBot2 的词云插件
https://pypi.org/project/nonebot-plugin-wordcloud/
MIT License
88 stars 7 forks source link

Bug: 并发时报错 MultipleResultsFound #171

Closed PluvIIter closed 1 year ago

PluvIIter commented 1 year ago

chatrecorder 版本

0.5.2

saa 版本

0.3.0

alconna 版本

0.19.2

描述问题

使用词云插件后log不断弹出如下报错

Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\NoneBot\NoneBot\bot.py", line 15, in <module>
    nonebot.run()
  File "C:\Users\Administrator\Desktop\NoneBot\NoneBot\.venv\Lib\site-packages\nonebot\__init__.py", line 333, in run
    get_driver().run(*args, **kwargs)
  File "C:\Users\Administrator\Desktop\NoneBot\NoneBot\.venv\Lib\site-packages\nonebot\drivers\fastapi.py", line 199, in run
    uvicorn.run(
  File "C:\Users\Administrator\Desktop\NoneBot\NoneBot\.venv\Lib\site-packages\uvicorn\main.py", line 587, in run
    server.run()
  File "C:\Users\Administrator\Desktop\NoneBot\NoneBot\.venv\Lib\site-packages\uvicorn\server.py", line 61, in run
    return asyncio.run(self.serve(sockets=sockets))
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\asyncio\runners.py", line 190, in run
    return runner.run(main)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\asyncio\runners.py", line 118, in run
    return self._loop.run_until_complete(task)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 640, in run_until_complete
    self.run_forever()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\asyncio\windows_events.py", line 321, in run_forever
    super().run_forever()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 607, in run_forever
    self._run_once()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 1922, in _run_once
    handle._run()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\asyncio\events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "C:\Users\Administrator\Desktop\NoneBot\NoneBot\.venv\Lib\site-packages\nonebot\adapters\onebot\v11\bot.py", line 194, in handle_event
    await handle_event(self, event)
  File "C:\Users\Administrator\Desktop\NoneBot\NoneBot\.venv\Lib\site-packages\nonebot\message.py", line 551, in handle_event
    await _apply_event_postprocessors(bot, event, state, stack, dependency_cache)
> File "C:\Users\Administrator\Desktop\NoneBot\NoneBot\.venv\Lib\site-packages\nonebot\message.py", line 209, in _apply_event_postprocessors
    await asyncio.gather(
  File "C:\Users\Administrator\Desktop\NoneBot\NoneBot\.venv\Lib\site-packages\nonebot\utils.py", line 186, in run_coro_with_catch
    return await coro
  File "C:\Users\Administrator\Desktop\NoneBot\NoneBot\.venv\Lib\site-packages\nonebot\dependencies\__init__.py", line 108, in __call__
    return await cast(Callable[..., Awaitable[R]], self.call)(**values)
  File "C:\Users\Administrator\Desktop\NoneBot\NoneBot\.venv\Lib\site-packages\nonebot_plugin_chatrecorder\adapters\onebot_v11.py", line 41, in record_recv_msg
    session_model = await get_or_add_session_model(session, db_session)
  File "C:\Users\Administrator\Desktop\NoneBot\NoneBot\.venv\Lib\site-packages\nonebot_plugin_session\model.py", line 108, in get_or_add_session_model
    if session_model := results.one_or_none():
  File "C:\Users\Administrator\Desktop\NoneBot\NoneBot\.venv\Lib\site-packages\sqlalchemy\engine\result.py", line 1815, in one_or_none
    return self._only_one_row(
  File "C:\Users\Administrator\Desktop\NoneBot\NoneBot\.venv\Lib\site-packages\sqlalchemy\engine\result.py", line 813, in _only_one_row
    raise exc.MultipleResultsFound(
sqlalchemy.exc.MultipleResultsFound: Multiple rows were found when one or none was required

复现步骤

正常安装词云插件后就出现了该情况

可能是部分账号在部分群内发言就会报这个错误 我的账号在我的一个bot测试群内发送任何消息都会报错,换另一个号就不会 但同时我的账号去其他群的发言也表现正常

期望的结果

不再报错,全部发言能被正常接收

截图或日志

image 一些群内大佬要看的东西,我也贴上来 DOY3N TD @P 8CI72U}~@TA () %FI0E2L{Y5HK(1CGTXXH

CREATE TABLE "nonebot_plugin_session_sessionmodel" (
    id INTEGER NOT NULL, 
    bot_id VARCHAR(64) NOT NULL, 
    bot_type VARCHAR(32) NOT NULL, 
    platform VARCHAR(32) NOT NULL, 
    level VARCHAR(6) NOT NULL, 
    id1 VARCHAR(64), 
    id2 VARCHAR(64), 
    id3 VARCHAR(64), 
    PRIMARY KEY (id), 
    CONSTRAINT unique_session UNIQUE (bot_id, bot_type, platform, level, id1, id2, id3)
)
he0119 commented 1 year ago

应该会在这个 PR 中修复。 https://github.com/noneplugin/nonebot-plugin-chatrecorder/pull/27

he0119 commented 1 year ago

应该已经在测试版修复了,欢迎尝试。https://github.com/he0119/nonebot-plugin-wordcloud/releases/tag/v0.6.0b2

111234567890 commented 1 year ago

更新到0.6.0b2以后启动会报‘’目标数据库未更新到最新修订‘’,然后报错退出。退回到0.5.2不会报这个错 QQ截图20231016013339

he0119 commented 1 year ago

更新到0.6.0b2以后启动会报‘’目标数据库未更新到最新修订‘’,然后报错退出。退回到0.5.2不会报这个错 QQ截图20231016013339

你还需要手动运行 nb orm upgrade 后,启动机器人。

he0119 commented 1 year ago

0.6.0 正式版已发布。