Skip to content

Feat/为event_mixin添加wait_private_event和wait_group_event支持 (issue #24) - #54

Merged
GEYUANwuqi merged 2 commits into
ncatbot:mainfrom
SulfurQWQ:feat/support-wait_private_event-wait_group_event
Aug 23, 2026
Merged

Feat/为event_mixin添加wait_private_event和wait_group_event支持 (issue #24)#54
GEYUANwuqi merged 2 commits into
ncatbot:mainfrom
SulfurQWQ:feat/support-wait_private_event-wait_group_event

Conversation

@SulfurQWQ

Copy link
Copy Markdown

修改说明:
为EventMixin 支持内置的 wait_xxx_event 模式以提供便捷类型支持 (issue #24

  • 添加了wait_private_message_event 和 wait_group_message_event 函数,它包装了wait_event函数,并提供了对应的包装的内置过滤函数

关联Issue:
issue #24

测试情况:
本地运行的 event_mixin 相关单元测试已通过

点击展开 pytest 运行日志 (ncatbot5) [Sulfur@archlinux NcatBot]$ pytest tests/unit/**/test_*event_mixin*.py =========================================================================================================== test session starts ============================================================================================================ platform linux -- Python 3.14.7, pytest-9.1.1, pluggy-1.6.0 rootdir: /home/Sulfur/Desktop/ncatbotWork/NcatBot configfile: pyproject.toml plugins: metadata-3.1.1, cov-7.1.0, html-4.2.0, asyncio-1.4.0, anyio-4.14.2 asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function collected 5 items

tests/unit/plugin/test_event_mixin.py ..... [100%]

============================================================================================================ 5 passed in 0.09s =============================================================================================================

第一次提交代码,如果有不妥的地方请告诉我谢谢喵

@GEYUANwuqi

Copy link
Copy Markdown
Member

感谢贡献, 当前实现存在阻塞性问题, 不会进行合并:

  • wait_event() 的谓词接收到的是核心 Event 包装对象, 而不是 GroupMessageEvent 等高层事件实体, 因此目前的isinstance 判断始终无法匹配

建议参考以下方式调整:

  • 将类型过滤、事件实体转换和 predicate 调用抽取为内部通用包装方法, 例如_wait_entity()

  • 通过 TypeVar 和 type[EventT] 接收 GroupMessageEvent 等具体事件类型, 使 IDE 能推导准确的 predicate 参数及返回类型

  • 包装方法中应通过现有事件工厂将 Event.data 转换成真实事件实体, 再进行isinstance 判断;不要仅通过 cast() 改变静态类型

  • wait_group_message_event() 和 wait_private_message_event() 仅作为调用该通用方法的 sugar

  • 请补充相应 pytest, 至少覆盖群聊/私聊正常返回, 错误类型忽略, 自定义 predicate 和超时行为, 并同步相关API文档

修改完成后, 请将当前提交整理为一个 commit , 并将 pr 由 draft 状态变更为 open, 测试和文档可以借助AI完成, 但请确认测试确实覆盖新增方法并能够复现其行为

@GEYUANwuqi
GEYUANwuqi marked this pull request as draft August 22, 2026 14:21
@SulfurQWQ
SulfurQWQ force-pushed the feat/support-wait_private_event-wait_group_event branch from d93b5c6 to c259ae5 Compare August 23, 2026 04:15
@SulfurQWQ
SulfurQWQ marked this pull request as ready for review August 23, 2026 04:16
@SulfurQWQ

Copy link
Copy Markdown
Author

已完成对应修改喵

-提取 _wait_entity 通用方法,利用 TypeVar 实现泛型推导
-通过 create_qq_entity(raw_event.data, api_client) 将事件转换为高层实体后再进行 isinstance 与 predicate 判断
-在本地跑通了 tests/unit/

测试日志如下
unit_test_log.txt

@GEYUANwuqi

Copy link
Copy Markdown
Member

还是有点小问题, 不过整体方向是对的, 我先合并了, 你后续可以看看是怎么改的

@GEYUANwuqi
GEYUANwuqi merged commit abaaaa3 into ncatbot:main Aug 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants