JM-Cosmos II 是一个基于 AstrBot 开发的 JM 漫画下载插件,支持漫画搜索、预览、下载、打包与 QQ 发送。
v2.0.0 是完全重构的版本,采用模块化架构设计,代码更清晰、更易维护,并新增了多项实用功能。
Caution
从 v1.x 升级到 v2.x 的用户请注意:
- v2.x 与 v1.x 不兼容,配置项和命令均有变更
- 升级前请删除旧插件目录,然后安装新版本
- 升级后需在管理面板重新配置所有选项
- 部分命令已移除(
/jmimg/jmpdf/jmconfig/jmdomain/jmauthor/jmrecommend)
- 漫画搜索 - 通过关键词搜索 JM 漫画
- 漫画详情 - 查看漫画信息、标签、作者等
- 本子下载 - 下载完整本子(/jm)或单章节(/jmc)
- 自动打包 - 下载完成后自动打包为 ZIP 或 PDF
- 加密保护 - 支持为 ZIP/PDF 设置密码加密
- 自动发送 - 打包后自动发送文件到聊天
- 代理支持 - 支持 HTTP/SOCKS5 代理
- 权限控制 - 可选的管理员权限和群组白名单
- 自动清理 - 发送后自动删除本地文件
- 自动撤回 - 发送文件后自动撤回消息
- 封面预览 - 下载前展示漫画封面和详情
- 调试模式 - 详细日志输出便于问题排查
将插件下载到 AstrBot 的插件目录 data/plugins/
cd data/plugins/jm_cosmos2
pip install -r requirements.txt必须安装的依赖:
| 依赖 | 用途 |
|---|---|
jmcomic>=2.6.10 |
JM 漫画下载核心库 |
pymupdf>=1.23.0 |
PDF 打包支持 |
pyzipper>=0.3.6 |
加密 ZIP 支持 |
Warning
如果不安装 pyzipper,默认可发送 zip 文件,但 ZIP 文件将无法加密!
确保插件被正确加载。
在 AstrBot 管理面板的「插件配置」中设置选项。
下载指定 ID 的完整本子。
/jm 123456
- 下载完成后自动打包并发送
- 若开启
send_cover_preview,下载前会显示封面预览
下载指定本子的指定章节。
/jmc 123456 3 # 下载本子 123456 的第 3 章
搜索漫画。
/jms 标签名
/jms 作者名
/jms 标签名 2 # 搜索第2页
查看本子详情(标题、作者、标签、章节数等)。
/jmi 123456
- 若开启
send_cover_preview,会同时显示封面图片
查看排行榜。
| 参数 | 可选值 | 默认值 |
|---|---|---|
| 类型 | week month |
week |
| 页码 | 正整数 | 1 |
/jmrank # 查看周排行榜第1页
/jmrank week # 查看周排行榜第1页
/jmrank month 2 # 查看月排行榜第2页
推荐浏览 - 按分类、排序、时间浏览漫画。
| 参数 | 可选值 | 默认值 |
|---|---|---|
| 分类 | all doujin single short hanman meiman 3d cosplay another |
all |
| 排序 | hot(热门) new(最新) pic(图多) like(点赞) |
hot |
| 时间 | day(今日) week(本周) month(本月) all(全部) |
week |
| 页码 | 正整数 | 1 |
/jmrec # 本周全分类热门(默认推荐)
/jmrec hanman # 本周韩漫热门
/jmrec all hot day # 今日全分类热门
/jmrec doujin new week # 本周同人最新
/jmrec 3d hot month 2 # 本月3D热门第2页
/jmrec help # 查看详细帮助
提示:参数顺序灵活,智能识别。例如
/jmrec 2 hanman和/jmrec hanman 2效果相同。
Note
关于空结果的说明
某些分类在特定时间范围内可能没有内容(如 hanman hot day 可能返回空),这是因为 JM 网站本身在该时间段内没有更新相关内容,并非插件 Bug。遇到这种情况时,建议尝试扩大时间范围(如 week 或 month)。
登录 JM 账号。
/jmlogin myuser mypassword
提示:建议在管理面板中配置账号密码以实现自动登录
登出当前账号。
/jmlogout
查看当前登录状态。
/jmstatus
查看我的收藏(需要先登录)。
| 参数 | 说明 | 默认值 |
|---|---|---|
| 页码 | 收藏列表页码 | 1 |
| 收藏夹ID | 指定收藏夹,0 表示全部 |
0 |
/jmfav # 查看全部收藏第1页
/jmfav 2 # 查看全部收藏第2页
/jmfav 1 12345 # 查看收藏夹ID为12345的第1页
显示帮助信息。
/jmhelp
所有配置可在 AstrBot 管理面板中修改:
| 配置项 | 说明 | 默认值 | 备注 |
|---|---|---|---|
download_dir |
漫画下载目录 | ./downloads |
|
image_suffix |
图片格式 (.jpg/.png/.webp) | .jpg |
webp 仅支持 ZIP 打包 |
client_type |
客户端类型 (api/html) | api |
api 兼容性好,html 效率高但限 IP |
use_proxy |
是否使用代理 | false |
|
proxy_url |
代理服务器地址 | 空 | 格式: http://host:port |
max_concurrent_photos |
最大并发章节数 | 3 |
建议 3-5 |
max_concurrent_images |
最大并发图片数 | 5 |
建议 5-10 |
pack_format |
打包格式 (zip/pdf/none) | zip |
|
pack_password |
打包密码 | 空 | 强烈建议设置,可降低风控 |
filename_show_password |
文件名显示密码提示 | false |
开启后文件名末尾添加 #PWxxx |
auto_delete_after_send |
发送后自动删除 | true |
|
send_cover_preview |
发送封面预览 | true |
|
cover_recall_enabled |
封面消息自动撤回 | false |
仅支持 QQ/NapCat 平台 |
auto_recall_enabled |
文件消息自动撤回 | false |
仅支持 QQ/NapCat 平台 |
auto_recall_delay |
撤回延迟 (秒) | 60 |
建议 30-120 |
enabled_groups |
启用的群列表 | 空 | 逗号分隔,空=全部启用 |
admin_only |
仅管理员可用 | false |
|
admin_list |
管理员 ID 列表 | 空 | 逗号分隔,不受下载限制 |
jm_username |
JM账号用户名 | 空 | 面板配置可自动登录 |
jm_password |
JM账号密码 | 空 | 命令登录重启后失效 |
search_page_size |
搜索结果数量 | 5 |
|
daily_download_limit |
每日下载限制 | 0 |
0=不限,管理员豁免 |
debug_mode |
调试模式 | false |
astrbot_plugin_jm_cosmos/
├── main.py # 插件入口和命令注册
├── metadata.yaml # 插件元数据
├── _conf_schema.on # 配置模式定义
├── requirements.txt # 依赖库列表
├── core/ # 核心模块
│ ├── __init__.py
│ ├── auth.py # 认证管理器
│ ├── browser.py # 浏览查询器(搜索、排行、详情)
│ ├── constants.py # 常量定义
│ ├── downloader.py # 下载管理器
│ ├── packer.py # 打包模块 (ZIP/PDF)
│ ├── quota.py # 下载配额管理器
│ └── base/ # 基础模块
│ ├── client.py # 客户端混入类
│ └── config.py # 配置管理器
└── utils/ # 工具模块
├── __init__.py
├── filename.py # 文件名生成器
├── formatter.py # 消息格式化器
└── recall.py # 消息撤回工具
A: 请确保已安装 pyzipper 库:
pip install pyzipperA: 请检查「客户端类型」配置,应为 api 或 html,不能是其他值。
A: 启用代理功能并配置代理地址:
use_proxy: true
proxy_url: http://127.0.0.1:7890
A: 在「启用的群列表」中填写群号(逗号分隔),如:123456789,987654321
Important
AstrBot 和 NapCat 分离部署时,必须配置共享卷才能发送文件!
当 AstrBot 和 NapCat(或其他 OneBot 实现)部署在不同 Docker 容器中时,可能会遇到以下错误:
识别URL失败uri= /AstrBot/data/plugin_data/jm_cosmos2/downloads/...文件消息缺少参数
原因:两个容器的文件系统是隔离的,NapCat 无法访问 AstrBot 容器内的文件。
解决方案:在 NapCat 的 docker-compose.yml 中添加 volume 映射,使其能访问 AstrBot 的数据目录:
volumes:
- ./ntqq:/app/.config/QQ
- ./napcat/config:/app/napcat/config
- /root/AstrBot/data:/AstrBot/data
# 映射 AstrBot 数据目录,使 NapCat 可以访问下载的文件Note
将 /root/AstrBot/data 替换为您服务器上 AstrBot 数据目录的实际路径。
Tip
修改后需要重建容器:docker-compose down && docker-compose up -d
A: 这通常是 QQ 账号被风控导致的,而非插件或路径问题。
错误示例(NapCat 日志):
[error] USERNAME | 发生错误 Error: EventChecker Failed: ...
{
"result": -1,
"errMsg": "rich media transfer failed"
}
可能原因:
- QQ 检测到敏感内容并限制了文件发送功能
- 账号因频繁发送文件被临时限制
解决方案:
- 尝试重启 NapCat:
docker restart napcat - 等待一段时间(几小时到几天)后风控可能自动解除
- 换用其他 QQ 账号
- 强烈建议:开启
pack_password加密功能,可有效降低触发风控的概率
查看完整更新日志:CHANGELOG.md
当前版本:v2.6.6 - 修复特殊字符标题导致下载失败的问题,新增消息发送智能回退机制
- 本插件仅供学习交流使用
- 请勿将下载的内容用于商业用途
- 大量请求可能导致 IP 被封禁
- 请遵守当地法律法规
欢迎提交 Pull Request 和 Issue。提交代码时请遵循以下提交消息规范:
| 类型 | 说明 |
|---|---|
feat |
新功能 |
fix |
Bug 修复 |
docs |
文档变更 |
|
代码格式调整(空格、分号等,不影响逻辑) |
refactor |
代码重构(既非新功能也非 Bug 修复) |
perf |
性能优化 |
test |
添加或修正测试 |
chore |
构建过程或辅助工具的变动 |
revert |
回滚提交 |
ci |
CI/CD 相关变更 |
build |
构建系统变更 |
<类型>: <简短描述>
[可选的详细描述]
示例:
feat: 新增加密 ZIP 打包功能
fix: 修复客户端类型配置错误
docs: 更新 README 安装说明
Copyright (C) 2025-2026 GEMILUXVII
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundationeither version 3 of the Licenseor any later version.
This program is distributed in the hope that it will be usefulbut WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If notsee https://www.gnu.org/licenses/.
本项目基于或参考了以下开源项目:
- AstrBot - 机器人框架
- JMComic-Crawler-Python - JMComic 库
- pyzipper - 加密 ZIP 库
- pymupdf - PDF 处理库

