monsterxcn / nonebot-plugin-gspanel

🤖 NoneBot2 原神游戏内角色展柜数据展示插件,参考 @yoimiya-kokomi/miao-plugin
https://pypi.python.org/pypi/nonebot-plugin-gspanel
MIT License
96 stars 7 forks source link

面板命令报错提示:line 227, in transFromEnka "icon": charData["Costumes"][str(avatarInfo["costumeId"])]["icon"] KeyError: 'Costumes' #56

Closed KishibeRohan1979 closed 1 year ago

KishibeRohan1979 commented 1 year ago

运行环境

操作系统:Windows 10 21H2 Python 版本:3.11.4 NoneBot2 版本:1.1.2

nb --version
nb: nonebot cli version 1.1.2
(启动命令是nb run启动的,和之前python bot.py还不一样,也许是nonebot2的1.1.2版本?)

GsPanel 版本:2023年7月8日 8:40am GMT+8时更新的升级 nonebot-plugin-htmlrender 依赖 (close #55)

报错详情

您好,我在尝试使用“面板”命令(包括面板 角色)的时候,bot不返回消息,服务报错如下方日志内容输出。

场景

日志

07-09 03:28:21 [ERROR] nonebot | Running Matcher(type='message', module=nonebot_plugin_gspanel) failed.
Traceback (most recent call last):
  File "<string>", line 17, in <module>
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\Lib\site-packages\nonebot\__init__.py", line 309, in run
    get_driver().run(*args, **kwargs)
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\Lib\site-packages\nonebot\drivers\fastapi.py", line 198, in run
    uvicorn.run(
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\Lib\site-packages\uvicorn\main.py", line 578, in run
    server.run()
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\Lib\site-packages\uvicorn\server.py", line 61, in run
    return asyncio.run(self.serve(sockets=sockets))
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\Lib\asyncio\runners.py", line 190, in run
    return runner.run(main)
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\Lib\asyncio\runners.py", line 118, in run
    return self._loop.run_until_complete(task)
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\Lib\asyncio\base_events.py", line 640, in run_until_complete
    self.run_forever()
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\Lib\asyncio\windows_events.py", line 321, in run_forever
    super().run_forever()
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\Lib\asyncio\base_events.py", line 607, in run_forever
    self._run_once()
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\Lib\asyncio\base_events.py", line 1922, in _run_once
    handle._run()
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\Lib\asyncio\events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\Lib\site-packages\nonebot\message.py", line 467, in check_and_run_matcher
    await _run_matcher(
> File "C:\Users\Administrator\Desktop\software\work\python\python3.11\Lib\site-packages\nonebot\message.py", line 419, in _run_matcher
    await matcher.run(bot, event, state, stack, dependency_cache)
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\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\Desktop\software\work\python\python3.11\Lib\site-packages\nonebot\internal\matcher\matcher.py", line 728, in simple_run
    await handler(
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\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\software\work\python\python3.11\Lib\site-packages\nonebot_plugin_gspanel\__init__.py", line 51, in panel_handle
    rt = await getPanel(uid, char)
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\Lib\site-packages\nonebot_plugin_gspanel\data_source.py", line 265, in getPanel
    data = await getAvatarData(uid, char)
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\Lib\site-packages\nonebot_plugin_gspanel\data_source.py", line 174, in getAvatarData
    tmp, gotDmg = await transFromEnka(newAvatar, now), False
  File "C:\Users\Administrator\Desktop\software\work\python\python3.11\Lib\site-packages\nonebot_plugin_gspanel\data_convert.py", line 227, in transFromEnka
    "icon": charData["Costumes"][str(avatarInfo["costumeId"])]["icon"]
KeyError: 'Costumes'

额外信息

测试使用的uid是218531785(就发生了这个错误),我使用的是您2023年7月8日的代码,但是很奇怪的是,我用其他uid都可以正常返回面板图片。不知道是不是和机器人缓存有关系。错误原因是字典(charData)中没有键名为"Costumes"的键。我想通过readme.md提供的网站找到修复的错误的一些原因,但是我没能找到线索。

(ps:这个插件似乎的一些配合接口似乎很久没有更新了(比如没有白术角色的一些别名之类的)。当然我没有催更的意思,我知道您也没有义务做到及时更新,只是希望如果您打算不经常更新插件的话,可以写一些文档,来可以帮助后来的一些同志可以更好的理解代码整体逻辑,数据采集处理等一些信息。(当然这仍然只是一条建议,祝您美好每一天捏~( ̄▽ ̄)~*))

KishibeRohan1979 commented 1 year ago

哦,对不起,我仔细看了一下NoneBot2官网的导航栏,我用的NoneBot2 版本是2.0.0

monsterxcn commented 1 year ago

是可莉新皮肤数据没更新。

数据更新的话其实很简单,我觉得不需要啥文档,就是 data/gspanel 下面的几个文件,点开看看按照原来的格式增加就好了,部分能自动处理的(char-data.jsonhash-trans.jsonrelic-append.json)我也写了更新脚本,run 一下就出来了。

不能自动处理的比如你说的角色别名、武器别名,我实在是没兴趣自己更新,这玩意也没个统一的,A 说要这个别名、B 说要那个别名,我又不是很愿意做啥指令来让用户自己添加别名,徒增复杂度。角色的圣遗物评分规则以前也是可以利用脚本从 miao-plugin 自动更新的,不过现在他们那边评分和计算规则也改了,我这边的脚本不方便自动更新了。

不过目前问题是数据都是从我自己的阿里云 CDN 下载的,部分资源修改后如果重启可能还是会被覆盖。需要未来做个设置把下载地址交给大家设置。

monsterxcn commented 1 year ago

已经由脚本自动处理了基础数据的更新,重启 Bot 后报错 UID 的可莉即可正常查询

https://github.com/monsterxcn/nonebot-plugin-gspanel/actions/runs/5498047748

KishibeRohan1979 commented 1 year ago

好的,谢谢。我已经大致明白了。