Skip to content

feat(handler): 实现可配置的 PrefixNameHandler#34

Open
LBY123165 wants to merge 7 commits into
easybot-team:mainfrom
LBY123165:main
Open

feat(handler): 实现可配置的 PrefixNameHandler#34
LBY123165 wants to merge 7 commits into
easybot-team:mainfrom
LBY123165:main

Conversation

@LBY123165
Copy link
Copy Markdown
Member

重构 prefix_handler.py 为工厂模式,解决 ForgeHandler 硬编码继承问题:

  • 新增 create_handler(handler_name) 工厂函数,支持按名称选择 base handler
  • 新增 _handler_map 字典维护 forge/fabric/spigot/paper/vanilla 映射
  • config.json 新增 server_handler 配置项,默认值 "forge"
  • config.py 新增 server_handler 字段的默认值保障
  • main.py 改用 create_handler() 替代硬编码 PrefixNameHandler()
  • 修复 main.py 第341行嵌套 f-string 语法错误 (Python 3.8 兼容)
  • 修复 papi.py list[str] 类型注解 (Python 3.8 兼容)

feat(ci): 新增 GitHub Actions 自动化测试与发布流程

重写 .github/workflows/build-and-release.yml:

  • 触发条件改为 v* tag 推送或手动触发
  • 新增 test job: 执行 36 项功能测试后才允许构建
  • build job 依赖 test job 通过,打包并发布 Release
  • Release body 包含版本信息、环境信息、测试报告摘要
  • 全部中文注释和中文报告输出

test: 新增 36 项插件功能测试

新增 tests/test_plugin.py 测试套件:

  • 模块导入验证 (9项): config/meta/message/rpc/event_bus/prefix_handler/ws/player_api/impl
  • 配置加载测试 (4项): JSON解析、必填字段、bot_filter、server_handler
  • 消息模型测试 (6项): Text/Image/File/At/Reply Segment 序列化往返
  • 玩家API测试 (5项): PlayerInfo、离线UUID生成(Mojang规范)、确定性、唯一性
  • 假人过滤测试 (2项): 前缀匹配、禁用状态
  • Prefix Handler测试 (5项): forge/fabric/vanilla创建、回退、聊天解析
  • RPC注册表测试 (2项): 装饰器注册、exec_op完整性
  • EventBus测试 (2项): 事件触发、优先级排序
  • WebSocket连接测试 (1项): 连接测试服务器、鉴权握手验证

LBY123165 added 3 commits May 2, 2026 10:10
feat(handler): 实现可配置的 PrefixNameHandler

重构 prefix_handler.py 为工厂模式,解决 ForgeHandler 硬编码继承问题:
- 新增 create_handler(handler_name) 工厂函数,支持按名称选择 base handler
- 新增 _handler_map 字典维护 forge/fabric/spigot/paper/vanilla 映射
- config.json 新增 server_handler 配置项,默认值 "forge"
- config.py 新增 server_handler 字段的默认值保障
- main.py 改用 create_handler() 替代硬编码 PrefixNameHandler()
- 修复 main.py 第341行嵌套 f-string 语法错误 (Python 3.8 兼容)
- 修复 papi.py list[str] 类型注解 (Python 3.8 兼容)

feat(ci): 新增 GitHub Actions 自动化测试与发布流程

重写 .github/workflows/build-and-release.yml:
- 触发条件改为 v* tag 推送或手动触发
- 新增 test job: 执行 36 项功能测试后才允许构建
- build job 依赖 test job 通过,打包并发布 Release
- Release body 包含版本信息、环境信息、测试报告摘要
- 全部中文注释和中文报告输出

test: 新增 36 项插件功能测试

新增 tests/test_plugin.py 测试套件:
- 模块导入验证 (9项): config/meta/message/rpc/event_bus/prefix_handler/ws/player_api/impl
- 配置加载测试 (4项): JSON解析、必填字段、bot_filter、server_handler
- 消息模型测试 (6项): Text/Image/File/At/Reply Segment 序列化往返
- 玩家API测试 (5项): PlayerInfo、离线UUID生成(Mojang规范)、确定性、唯一性
- 假人过滤测试 (2项): 前缀匹配、禁用状态
- Prefix Handler测试 (5项): forge/fabric/vanilla创建、回退、聊天解析
- RPC注册表测试 (2项): 装饰器注册、exec_op完整性
- EventBus测试 (2项): 事件触发、优先级排序
- WebSocket连接测试 (1项): 连接测试服务器、鉴权握手验证
@LBY123165 LBY123165 linked an issue May 2, 2026 that may be closed by this pull request
LBY123165 added 4 commits May 2, 2026 10:43
自动从 MCDR 当前使用的服务端处理器(ForgeHandler / FabricHandler / SpigotHandler / PaperHandler / VanillaHandler)推断服务端类型,无需用户手动配置:
- 新增 detect_handler_from_mcdr() 函数,从 MCDR 内部 handler 类名提取类型
- 默认配置 "server_handler": "" 触发自动检测,仅显式设置时覆盖
- 回退逻辑: 检测失败或类型不匹配时默认 forge
auto-detect 功能将默认配置改为 "",测试用例同步放宽校验范围。
on_info 同时检测 "left the game" 和 "lost connection" 两条日志行,
且与 on_player_left 对同一退出事件重复处理,导致一条退出产生 5-6 条重复日志。

- 移除 on_info 中的退出检测,统一由 mcdr.player_left 事件驱动
- on_player_left 委托给 _report_player_exit 避免逻辑重复
将去重逻辑提前到函数入口,统一对 bot 和正常玩家生效。
mcdr.player_left 可能因服务端输出 "lost connection" 和 "left the game"
两条日志而触发两次,无去重时 bot 走 return 前打印 "过滤假人" 造成重复。
@Ftimever Ftimever requested a review from zkhssb May 10, 2026 05:49
Copy link
Copy Markdown
Member

@Ftimever Ftimever left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Ftimever
Copy link
Copy Markdown
Member

等作者看看

@Ftimever
Copy link
Copy Markdown
Member

@zkhssb

@Ftimever Ftimever self-requested a review May 31, 2026 04:36
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.

[Bug/Critical] Improper handler processing

2 participants