# 插件加载路径说明 ## 概述 MaiBot-Core 现在支持从多个路径加载插件,为插件开发者提供更大的灵活性。 ## 支持的插件路径 系统会按以下优先级顺序搜索和加载插件: ### 1. 项目根目录插件路径:`/plugins` - **路径**: 项目根目录下的 `plugins/` 文件夹 - **优先级**: 最高 - **用途**: 用户自定义插件、第三方插件 - **特点**: - 与项目源码分离 - 便于版本控制管理 - 适合用户添加个人插件 ### 2. 源码目录插件路径:`/src/plugins` - **路径**: src目录下的 `plugins/` 文件夹 - **优先级**: 次高 - **用途**: 系统内置插件、官方插件 - **特点**: - 与项目源码集成 - 适合系统级功能插件 ## 插件结构支持 两个路径都支持相同的插件结构: ### 传统结构(推荐用于复杂插件) ``` plugins/my_plugin/ ├── __init__.py ├── actions/ │ ├── __init__.py │ └── my_action.py ├── commands/ │ ├── __init__.py │ └── my_command.py └── config.toml ``` ### 简化结构(推荐用于简单插件) ``` plugins/my_plugin/ ├── __init__.py ├── my_action.py ├── my_command.py └── config.toml ``` ## 文件命名约定 ### 动作文件 - `*_action.py` - `*_actions.py` - 包含 `action` 字样的文件名 ### 命令文件 - `*_command.py` - `*_commands.py` - 包含 `command` 字样的文件名 ## 加载行为 1. **顺序加载**: 先加载 `/plugins`,再加载 `/src/plugins` 2. **重名处理**: 如果两个路径中有同名插件,优先加载 `/plugins` 中的版本 3. **错误隔离**: 单个插件加载失败不会影响其他插件的加载 4. **详细日志**: 系统会记录每个插件的来源路径和加载状态 ## 最佳实践 ### 用户插件开发 - 将自定义插件放在 `/plugins` 目录 - 使用清晰的插件命名 - 包含必要的 `__init__.py` 文件 ### 系统插件开发 - 将系统集成插件放在 `/src/plugins` 目录 - 遵循项目代码规范 - 完善的错误处理 ### 版本控制 - 将 `/plugins` 目录添加到 `.gitignore`(如果是用户自定义插件) - 或者为插件创建独立的git仓库 ## 示例插件 参考 `/plugins/example_root_plugin/` 中的示例插件,了解如何在根目录创建插件。 ## 故障排除 ### 常见问题 1. **插件未被加载** - 检查插件目录是否有 `__init__.py` 文件 - 确认文件命名符合约定 - 查看启动日志中的加载信息 2. **导入错误** - 确保插件依赖的模块已安装 - 检查导入路径是否正确 3. **重复注册** - 检查是否有同名的动作或命令 - 避免在不同路径放置相同功能的插件 ### 调试日志 启动时查看日志输出: ``` [INFO] 正在从 plugins 加载插件... [INFO] 正在从 src/plugins 加载插件... [SUCCESS] 插件加载完成: 总计 X 个动作, Y 个命令 [INFO] 插件加载详情: [INFO] example_plugin (来源: plugins): 1 动作, 1 命令 ```