ErisPulse 2.3.4 架构重构了

ErisPulse 2.3.4 架构重构了

ErisPulse 2.3.4 发布了,这次改的挺大的。

其实重构的起因很简单,老鼠看了代码说 __init__.py 里塞的东西太多,review 不下去(笑

然后就想,确实乱,就开始改。迭代了几个 dev 版本,最后算是定下来了。虽然对外 API 保持兼容,但内部实现基本上重了一遍。

说说都改了啥吧。

统一的模块发现机制

之前找模块、适配器、CLI 命令的逻辑分散在各处,改起来麻烦还容易出问题。现在统一到了 finders 模块里。

以前是各自找各自的,现在都继承 BaseFinder 基类,统一的接口。

1from ErisPulse.finders import ModuleFinder, AdapterFinder, CLIFinder
2
3# 查找所有模块
4all_modules = ModuleFinder().find_all()
5
6# 查找特定适配器
7my_adapter = AdapterFinder().find_by_name("MyAdapter")

好处就是代码统一了,以后加新的 Finder 也方便,不用到处改。

加载策略系统

添加了自定义策略方法,更方便日后拓展,比如按优先级加载:

1from ErisPulse.loaders import ModuleLoadStrategy
2
3class MyModule(BaseModule):
4    @staticmethod
5    def get_load_strategy():
6        return ModuleLoadStrategy(
7            lazy_load=True,   # 懒加载
8            priority=100      # 高优先级,先加载
9        )

should_eager_load() 这个方法还在(兼容),但建议用新的 get_load_strategy(),功能更全。

架构重构

这次把加载相关的代码统一整理到 loaders 目录下了:

ErisPulse/loaders/
├── base.py          # BaseLoader 抽象基类
├── module.py        # ModuleLoader
└── adapter.py       # AdapterLoader

加了 ManagerBase 基类,适配器和模块管理器都继承它,配置接口统一了。还有 ModuleInitializer 统一管理加载流程。

简单说就是代码更规整了,以后加新功能不会乱七八糟。

CLI 和路由优化

CLI 现在会自动发现命令了,不用手动注册。只要继承 Command 基类的类,放在 commands 目录下就行。

WebSocket 路由也优化了,IPv6 回环地址会显示可访问的地址

epsdk run 还会自动创建入口文件,如果不存在的话。

文档更新

这次也把文档补齐了,特别是适配器相关的。

SendDSL 链式修饰方法(这个比较有意思)

新的适配器概念,修饰方法:

1# @用户、回复消息这些修饰方法
2await my_platform.Send.To('group', '123').At('456').Reply('789').Text("你好")
3
4# 还能 @多次
5await my_platform.Send.To('group', '123').At('456').At('789').Text("你们好")
6
7# @全体成员
8await my_platform.Send.To('group', '123').AtAll().Text("大家好")

发送方法(Text、Image 等)返回 Task,修饰方法(At、Reply、AtAll)返回 self。这样就能一直链式调用下去

适配器重构适配

把云湖、Telegram、OneBot11 三个适配器都重构适配了新功能,忙死我了T-T

  • 明确了 Send 类发送方法的大驼峰命名规范,包括标准方法、链式修饰方法和协议方法的命名规则

核心模块都优化了一遍:

  • adapter 模块:exists() 检查 _adaptersenable()/disable() 支持自动注册
  • module 模块:register() 加强验证,unload() 改进错误处理
  • router 模块:WebSocket 路由注销优化,IPv6 地址显示改进
  • logger 模块:get_child() 支持非相对路径,set_output_file() 改进处理器管理
  • lifecycle 模块:添加事件类型验证
  • exceptions 模块:改进事件循环异常处理

还移除了 storage 模块的快照功能,用不上的东西就删掉了。

升级说明

⚠️ 虽然对外 API 保持兼容,但如果你用了内部 API(比如 ErisPulse.__init__.py 里的 LazyModule),可能需要改一下。

主要就是 should_eager_load() 改成 get_load_strategy() 了:

 1# 旧方式(还能用,但不推荐)
 2class MyModule(BaseModule):
 3    @staticmethod
 4    def should_eager_load():
 5        return True
 6
 7# 新方式(推荐)
 8class MyModule(BaseModule):
 9    @staticmethod
10    def get_load_strategy():
11        return ModuleLoadStrategy(
12            lazy_load=False,
13            priority=50
14        )

最后

这次重构主要是为了代码更好维护,以后加东西也更方便。

欢迎来 GitHub 看看代码,提 issue 或者 PR 都行~ 秋秋了!

评论