# 插件开发指南 本指南介绍如何开发自定义插件,你可以通过添加新的插件来扩展项目功能。 ## 基本结构 * 插件位于 `plugins` 目录下. * 每个插件是一个 `.py` 文件 (例如 `emby.py`, `plex.py`),文件名小写。 * 每个插件文件包含一个与文件名对应的首字母大写命名类(例如 `emby.py` 中的 `Emby` 类)。 ## 插件要求 每个插件类必须包含以下内容: * **`default_config`**:字典,包含插件所需参数及其默认值。例如: ```python # 该插件必须配置的键,值可留空 default_config = {"url": "", "token": ""} ``` * **`is_active`**:布尔值,默认为 `False`. * **`__init__(self, **kwargs)`**:构造函数,接收配置参数 `kwargs`。它应该: 1. 检查 `kwargs` 是否包含所有 `default_config` 中的参数,缺少参数则打印警告。 2. 若参数完整,尝试连接服务器并验证配置,成功则设置 `self.is_active = True`。 * **`run(self, task, **kwargs)`**:整个插件入口函数,处理插件逻辑。 * `task` 是一个字典,包含任务信息。如果需要修改任务参数,返回修改后的 `task` 字典; * 无修改则不返回或返回 `None`。 ## 插件示例 参考 [emby.py](emby.py) 参考函数: * **`get_info(self)`**:获取服务器信息(例如名称、版本),成功返回 `True`,失败返回 `False` 。用于验证赋值 `self.is_active` 。 * **`refresh(self, media_id)`**:刷新指定媒体信息,成功返回服务器响应数据(通常是字典),失败返回 `None` 。 * **`search(self, media_name)`**:搜索媒体. 成功返回服务器响应数据(通常包含媒体ID的字典), 失败返回 `None` 。 ### 最佳实践 requests 部分使用 try-except 块,以防插件请求出错中断整个转存任务。 ```python try: response = requests.request("GET", url, headers=headers, params=querystring) # 处理响应数据 # ...... # 返回 except requests.exceptions.RequestException as e: print(f"Error: {e}") return False ``` ## 使用自定义插件 放到 `/plugins` 目录即可识别,如果你使用 docker 运行: ```shell docker run -d \ # ... 例如添加这行挂载,其它一致 -v ./quark-auto-save/plugins/plex.py:/app/plugins/plex.py \ # ... ``` 如果你有写自定义插件的能力,相信你也知道如何挂载自定义插件,算我啰嗦。🙃 ## 配置文件 在 `quark_config.json` 的 `plugins` 中配置插件参数: ```json { "media_servers": { "emby": { "url": "http://your-emby-server:8096", "token": "YOUR_EMBY_TOKEN" } } } ``` 当插件代码正确赋值 `default_config` 时,首次运行会自动补充缺失的键。 ## 🤝 贡献者 | 插件 | 说明 | 贡献者 | | ------- | -------------------- | --------------------------------------- | | plex.py | 自动刷新 Plex 媒体库 | [zhazhayu](https://github.com/zhazhayu) | | alist_strm_gen.py | 自动生成strm | [xiaoQQya](https://github.com/xiaoQQya) |