想解决的问题 / 使用场景
main.py 目前有 5300+ 行,混杂了 Pixiv / 天气 / 音乐(网易云 + 酷狗)/ 一言等多个 API client 的实现,以及插件生命周期、command 路由等逻辑全部堆在一个文件里。
对比项目里已经拆分出来的模块(如 cross_group_memory.py、group_switch_store.py、media_parser.py),这几个 API client 明显也具备独立拆分的条件,但目前仍然留在 main.py 里,导致:
- 新增/修改某个功能(比如加一个音源、调整天气接口)时,要在一个巨大的文件里定位,心智负担较高
- 新贡献者看代码时不容易快速理解模块边界(AI 如果想要理解功能,必须得看完一整个 main.py,实在是太费 token 了)
- 单元测试目前主要覆盖了
test_relay_pages.py、test_reply_seg.py 等独立模块,但 Pixiv / 天气 / 音乐 client 的重试与错误处理逻辑因为耦合在 main.py 里,没有被单独覆盖
期望的效果
参考现有拆分方式,把 main.py 中的几个 API client 拆到独立文件中,例如:
pixiv_client.py(PixivAPIClient、PixivAPIError)
weather_client.py(WeatherAPIClient、WeatherAPIError)
music_client.py(NeteaseAPIClient、KugouAPIClient 及对应 Error)
hitokoto_client.py(HitokotoAPIClient、HitokotoAPIError)
femboy_client.py(FemboyAPIClient、FemboyAPIError)
main.py 只保留 CurrentCortexPlugin 的 command 路由、事件监听和插件生命周期逻辑,通过 import 使用这些 client。
这样也方便后续给每个 client 补充独立的重试/错误处理单元测试。
备选方案(可选)
如果一次性全部拆分改动面太大、不好 review,也可以分阶段来:
- 先拆相对独立、依赖最少的天气和一言模块,验证不影响现有测试和功能
- 确认没问题后,再逐步拆音乐(网易云+酷狗)和 Pixiv 模块
- 最后视情况决定 CommandParser 等公共工具类是否也需要独立出来
附加信息(可选)
现有的 cross_group_memory.py、group_switch_store.py、media_parser.py 的拆分方式可以作为参考模板,保持风格统一。
想解决的问题 / 使用场景
main.py目前有 5300+ 行,混杂了 Pixiv / 天气 / 音乐(网易云 + 酷狗)/ 一言等多个 API client 的实现,以及插件生命周期、command 路由等逻辑全部堆在一个文件里。对比项目里已经拆分出来的模块(如
cross_group_memory.py、group_switch_store.py、media_parser.py),这几个 API client 明显也具备独立拆分的条件,但目前仍然留在 main.py 里,导致:test_relay_pages.py、test_reply_seg.py等独立模块,但 Pixiv / 天气 / 音乐 client 的重试与错误处理逻辑因为耦合在 main.py 里,没有被单独覆盖期望的效果
参考现有拆分方式,把 main.py 中的几个 API client 拆到独立文件中,例如:
pixiv_client.py(PixivAPIClient、PixivAPIError)weather_client.py(WeatherAPIClient、WeatherAPIError)music_client.py(NeteaseAPIClient、KugouAPIClient 及对应 Error)hitokoto_client.py(HitokotoAPIClient、HitokotoAPIError)femboy_client.py(FemboyAPIClient、FemboyAPIError)main.py 只保留
CurrentCortexPlugin的 command 路由、事件监听和插件生命周期逻辑,通过 import 使用这些 client。这样也方便后续给每个 client 补充独立的重试/错误处理单元测试。
备选方案(可选)
如果一次性全部拆分改动面太大、不好 review,也可以分阶段来:
附加信息(可选)
现有的
cross_group_memory.py、group_switch_store.py、media_parser.py的拆分方式可以作为参考模板,保持风格统一。