nonebot / adapter-onebot

NoneBot2 OneBot 适配器 / OneBot adapter for nonebot2
https://onebot.adapters.nonebot.dev
MIT License
73 stars 28 forks source link

Bug: 设为精华和取消精华时会报错 #71

Closed okashi-ya closed 1 year ago

okashi-ya commented 1 year ago

操作系统

Windows

Python 版本

3.8.16

NoneBot 版本

2.0.1

适配器

2.2.4

协议端

gocqhttp dev 5db037c

描述问题

在使用on_notice注册通知类消息响应后 当有人在群里设置精华和取消精华时 会出现报错

windows和linux均有这个问题

复现步骤

1.使用onnotice注册一个消息响应并写回调函数(我只在参数里指定了GroupIncreaseNoticeEvent) @func.handle() async def (event: Union[GroupIncreaseNoticeEvent]):

2.登录并设置精华/取消精华

3.观察结果

期望的结果

期望可以不报错

截图或日志

报错内容如下:

Traceback (most recent call last):
  File "../mybot", line 8, in <module>
    sys.exit(main())
  File "/usr/local/python3.8.16/lib/python3.8/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/python3.8.16/lib/python3.8/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/usr/local/python3.8.16/lib/python3.8/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/python3.8.16/lib/python3.8/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/python3.8.16/lib/python3.8/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/home/mybot/haruka_bot/cli/__init__.py", line 16, in run
    run()
  File "/home/mybot/haruka_bot/cli/bot.py", line 36, in run
    nonebot.run(app="haruka_bot.cli.bot:app")
  File "/usr/local/python3.8.16/lib/python3.8/site-packages/nonebot/__init__.py", line 333, in run
    get_driver().run(*args, **kwargs)
  File "/usr/local/python3.8.16/lib/python3.8/site-packages/nonebot/drivers/fastapi.py", line 199, in run
    uvicorn.run(
  File "/usr/local/python3.8.16/lib/python3.8/site-packages/uvicorn/main.py", line 568, in run
    server.run()
  File "/usr/local/python3.8.16/lib/python3.8/site-packages/uvicorn/server.py", line 59, in run
    return asyncio.run(self.serve(sockets=sockets))
  File "/usr/local/python3.8.16/lib/python3.8/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/local/python3.8.16/lib/python3.8/asyncio/base_events.py", line 603, in run_until_complete
    self.run_forever()
  File "/usr/local/python3.8.16/lib/python3.8/asyncio/base_events.py", line 570, in run_forever
    self._run_once()
  File "/usr/local/python3.8.16/lib/python3.8/asyncio/base_events.py", line 1859, in _run_once
    handle._run()
  File "/usr/local/python3.8.16/lib/python3.8/asyncio/events.py", line 81, in _run
    self._context.run(self._callback, *self._args)
  File "/usr/local/python3.8.16/lib/python3.8/site-packages/nonebot/message.py", line 467, in check_and_run_matcher
    await _run_matcher(

> File "/usr/local/python3.8.16/lib/python3.8/site-packages/nonebot/message.py", line 419, in _run_matcher
    await matcher.run(bot, event, state, stack, dependency_cache)
  File "/usr/local/python3.8.16/lib/python3.8/site-packages/nonebot/internal/matcher/matcher.py", line 759, in run
    await self.simple_run(bot, event, state, stack, dependency_cache)
  File "/usr/local/python3.8.16/lib/python3.8/site-packages/nonebot/internal/matcher/matcher.py", line 734, in simple_run
    await handler(
  File "/usr/local/python3.8.16/lib/python3.8/site-packages/nonebot/dependencies/__init__.py", line 108, in __call__
    return await cast(Callable[..., Awaitable[R]], self.call)(**values)
  File "/home/mybot/plugins/__init__.py", line 60, in handle
    user_id = int(event.get_user_id())
  File "/usr/local/python3.8.16/lib/python3.8/site-packages/nonebot/adapters/onebot/v11/event.py", line 53, in get_user_id
    raise ValueError("Event has no context!")
ValueError: Event has no context!
eya46 commented 1 year ago

复现不成功,设置群精华过不了event: GroupAdminNoticeEvent的类型,cancan你的代码"/home/mybot/plugins/init.py"

yanyongyu commented 1 year ago

请提供完整代码和日志上下文,GroupIncreaseNoticeEvent不存在这个问题

okashi-ya commented 1 year ago

仔细复现了一下,发现是处理函数没有过滤导致的,实际设置精华这些是不应该调用到这里的 谢谢两位大佬的回答