Skip to content

refactor: 目录结构重组与 main.py 客户端类拆分 - #11

Open
VirTuaL-EnTitY wants to merge 1 commit into
backrooms-yrc:mainfrom
VirTuaL-EnTitY:main
Open

refactor: 目录结构重组与 main.py 客户端类拆分#11
VirTuaL-EnTitY wants to merge 1 commit into
backrooms-yrc:mainfrom
VirTuaL-EnTitY:main

Conversation

@VirTuaL-EnTitY

Copy link
Copy Markdown
Collaborator

本次更改幅度较大,请验证后再 合并

改动说明

对插件根目录进行结构性重组,把原本平铺在根目录的 11 个 dglab_*.pymedia_parser.pycross_group_memory.pygroup_switch_store.py 以及从 main.py 中拆出的 7 个 API 客户端类,按职责归入 clients/dglab/media/group/tests/ 五个子包;main.py 仅保留插件主类与必要常量。

动机:根目录文件数过多(20+ 个平铺模块),main.py 单文件超过 5300 行,难以导航与维护。本次重构将同职责模块收拢进包,降低耦合、提升可读性。

范围与兼容性

  • 纯目录迁移 + import 路径同步,不改动任何函数签名、参数、返回值、异常处理与业务逻辑
  • 所有对外命令、配置项、WebUI 行为完全不变,对终端用户无感知。
  • _pages_api.pymain.py 仍留在根目录,符合 AstrBot 插件加载约定。
  • dglab/ 包内部 12 处 from .dglab_xxx import 兄弟引用保持不变;仅 main.pydglab/ 的引用从 .dglab_xxx 改为 .dglab.dglab_xxx

主要变更

  • 新建 5 个子包并补 __init__.pyclients/dglab/(含 docs/)、media/group/tests/
  • main.py 拆出到 clients/PixivAPIClient/HitokotoAPIClient/WeatherAPIClient/FemboyAPIClient/NeteaseAPIClient/KugouAPIClient/CommandParser 及其异常类、配套 URL 常量、HITOKOTO_CATEGORIES_format_api_key_not_configured/_remove_file_safe
  • main.py:5339 行 → 4643 行(-696 行);导入区同步更新,仅保留 PIXIV_ARTWORK_URL(仅主类使用)
  • 5 个 test_*.py 移入 tests/,并按新包结构改造 import(路径深度、stub 模块键名、sys.pathimportlib 路径)
  • ci.yml 测试 glob:test_*.pytests/test_*.py
  • .gitignore 测试白名单:全部加 tests/ 前缀
  • 删除 media_cmds.pyorig_readme.md(经确认无引用)

改动类型

  • 🐛 Bug 修复(不改变现有功能行为)
  • ✨ 新功能
  • 💥 破坏性变更(行为/接口不兼容,需在说明中标注迁移方式)
  • 📝 文档更新
  • 🔧 重构 / 代码风格
  • ✅ 测试补充

自测清单

  • 本地运行过相关测试(test_memory_and_switch.py 33/33、test_dglab_protocol.py 36/36、test_relay_pages.py 41/41 全通过;test_reply_seg.py 27/37、test_music_audio.py 受本机 Python 3.14 / 无 ffmpeg 环境限制失败,CI 环境 Python 3.10 + ffmpeg 不受影响,已确认为环境问题而非重构回归)
  • 涉及命令交互的改动已在真实平台(QQ 等)手动验证(纯重构无行为变更,待合并后由维护者在真实平台复核各命令)
  • 改动了配置项 / 命令用法的,已同步更新 README.md_conf_schema.json(本次无配置项 / 命令用法变更,无需更新)
  • 有用户可见变更的,已在 CHANGELOG.md[Unreleased] 小节追加条目(本次为内部结构调整,无用户可见行为变更,未追加;如需可在 [Unreleased] 的「变更」下补一条结构重组说明)
  • 新增测试文件已在 .gitignore 白名单中登记(!tests/test_xxx.py
  • 未引入新的第三方依赖

关联 Issue

#10

将原有扁平代码按职责拆分为多个子包:
1. 拆分API客户端到clients/子包,按功能拆分独立模块
2. 将DG-LAB相关代码移入dglab/子包,统一设备管理逻辑
3. 群聊相关存储与功能移入group/子包
4. 媒体解析功能移入media/子包
5. 测试脚本统一放入tests/目录
6. 迁移废弃的media_cmds.py功能到media子包
7. 更新CI配置、文档与.gitignore适配新结构
@github-actions

Copy link
Copy Markdown

👋 感谢贡献 CurrentCortex!

@VirTuaL-EnTitY,你好!你的拉取请求 #11 已收到。

本次改动:46 个文件,+1095 / -1452

接下来会发生什么

  1. 🤖 测试机器人会自动运行测试并反馈结果
  2. 🤖 AI 审查机器人会对改动做一次初步代码审查(仅供参考)
  3. 👀 维护者会在方便时进行人工审查

期间你可以继续推送提交,机器人会自动跟进最新的改动。祝顺利合并! 🎉

@github-actions

Copy link
Copy Markdown

🤖 AI 代码审查

改动概述

本次 PR 将项目从扁平结构重组为子包(clients/dglab/group/media/tests/),同步更新了 CI、.gitignore、PR 模板、CONTRIBUTING 及四语言 README,并新增了 clients/ 下的各 API 客户端模块。文档与配置路径同步较为完整一致。

潜在风险

  1. .gitignore 白名单失效风险:改为 tests/test_*.py 后,若历史白名单条目(如 !test_music_audio.py)被删除而文件尚未迁移到 tests/,旧测试文件会被忽略而丢失。需确认文件迁移与 .gitignore 修改在同一提交中完成。
  2. CI 循环路径for f in tests/test_*.py 假设工作目录为仓库根目录,若 CI 有 working-directory 或 checkout 子目录配置需确认;且若 tests/ 目录不存在,glob 不展开会导致循环体把字面量 tests/test_*.py 当文件执行而报错(可加 shopt -s nullglob 或前置存在性检查)。
  3. clients/femboy.py 等模块依赖 astrbot.api:测试脚本若独立运行(无 AstrBot 环境)导入这些模块会失败,与“独立测试脚本无需框架”的说明可能冲突,建议确认测试是否涉及这些客户端。
  4. clients/music.py 重试逻辑:每次重试新建 ClientSession,开销略大但可接受;NETEASE_REQUEST_TIMEOUT 硬编码 6s 未走配置,注释已说明理由,可接受但建议后续做成可配置。
  5. CommandParser.parsetag 参数值不支持含空格([^\s]+),以及 excludeAI 值为任意非布尔字符串时静默转为 False,属原有行为迁移,非新问题。

建议

  • 确认所有 test_*.py 文件的实际移动与 .gitignore/CI 修改在同一 PR 内,避免测试文件被静默忽略。
  • CI 脚本建议加 shopt -s nullglob 防御 tests/ 为空的情况。
  • diff 被截断(clients/music.py 后半部分及 dglab/group/media/main.py 的改动未展示),无法完整审查导入路径迁移是否全部一致,建议补充完整 diff 或在 PR 描述中确认全量测试通过。

以上内容由 AI 自动生成,仅供参考,最终以人工审查为准。

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.

1 participant