Repository navigation
Undefined v3.18.0
v3.18.0 JM 漫画自动提取
本版本新增禁漫自动提取管线:消息里出现 JM 车号或禁漫链接时,自动获取本子详情、把全部章节合成为一个带密码的 PDF,以「本子信息 / 解密密码 / PDF 文件」三节点合并转发发送(文件只放在转发里,群聊下同时进入群文件列表),并新增与 arxiv_paper 同构的 jm_book 工具供 AI 按需取详情或附件。功能默认关闭,密码随机生成且不写进历史。
变更内容
- 新增
jm自动处理管线(src/Undefined/skills/pipelines/jm/,order = 12)与src/Undefined/jm/(车号解析、jmcpy 客户端设置、整本下载合成、合并转发发送),依赖新增并固定到jmcpy>=0.1.3。 - 触发规则:
JM前缀加 5–8 位车号(JM1114751/jm 1114751/jm:1114751/jm-1114751,大小写不敏感),以及主机名含18comic或jmcomic的链接(/album/<id>、/photo/<id>、?id=<id>),QQ 分享卡片里的链接同样解析,车号与链接混排时按原文出现顺序取(默认只取第一个);分享卡片结构异常(data不是对象、JSON 损坏)只跳过该段,不影响同一条消息里其它段落的检测。前缀必须落在词边界上(xxjm1234567、t.me/jm1234567、video_jm1234567.mp4都不触发),数字后不跟数字(9 位以上不会被截成 8 位);裸数字不触发,避免群号、时间戳误报。 - 下载与合成:按章节
order顺序逐章下载([jm].max_chapters可限制),decode=False取服务端原始字节无损落盘,自己解扰后每页只编码一次 JPEG([jm].image_quality,色度 4:4:4)并直接作为 PDF 图像数据;页尺寸统一按[jm].pdf_dpi换算(页宽 = 像素宽 ÷ DPI × 72),页像素始终不缩放,画质上限由站点源图分辨率决定。不再复用jmcpy.imaging.write_pdf:jmcpy 的下载 API 一章只能产出一个 PDF,而这里要把多个章节合进同一个文件;jmcpy>=0.1.3修掉了追加页退回默认 72 DPI、同份 PDF 内页面尺寸不一致的问题,并把页内 JPEG 色度采样默认值改成 4:4:4。 - 逐页容错:单页解码失败只跳过该页并计入「下载失败 N 页」,其余页照常出 PDF,全部页失败才算空结果;动图(
.gif)不做分块还原,与 jmcpy 的UNDECODED_SUFFIXES语义一致。 - 体积语义:
[jm].max_file_size先按各章节原始图片累计预判并停止下载,组装时再按编码后字节累计复核,超过即提前中止、PDF 不落盘;因此它只是近似内存上限(JPEG 重编码可能比源图更大)。超过上限或没有下到任何页面时只发信息与状态两个节点,不发密码与文件,且信息里不展示 PDF 大小。 - 发送结构固定为三个节点:本子信息(车号、标题、作者、章节数、标签、观看/点赞、页数、大小、简介预览,末行是可直接复制的
JM<车号>,不再输出站点链接)、PDF 解密密码(每次随机生成 8 位,字母表去掉0/O/1/l/I等形近字符)、PDF 文件(本地合成后随转发上传)。密码只出现在转发节点中,写入历史的摘要只说「密码见转发节点」,后续 AI 轮次不会复述密码。 - 文件只放在转发里,不额外发独立文件消息:群聊下 NapCat 会把它作为群文件上传(
isGroupFile、busid=102,元素里带fileId/fileMd5/fileSha1),节点里的文件可以直接下载,同一个 PDF 因此也会出现在群文件列表里。 - 投递语义:「投递结果未确认」(
delivery_uncertain)与「文件传输错误」(file_transfer_error)不降级重发,直接上抛调用方——这两种情况下转发可能已经送达,换个 action 再发会造成真实重复投递;只有协议端明确拒绝才退化为「信息 + 密码两条普通消息 + 独立文件消息」(此时文件没有别的入口),该路径的密码消息写历史时只记「PDF 解密密码已单独发送」,上传也失败时再补一条不写历史的提示。 - 失败与资源:车号不存在或接口不可用时发送一行
JM 提取失败:<原因>并记录异常类型与堆栈;整本下载跑在模块专用线程池(同时最多 2 本)而不是事件循环默认执行器;任务目录在成功、超限、空结果与下载抛异常四条路径上都会清理;被取消时线程仍在写盘,改为等它跑完再删,不留下残留原图或未加密 PDF。 - 新增
jm_book工具(src/Undefined/skills/tools/jm_book/,与arxiv_paper同构):output_mode=send(默认,等价自动提取)、uid(只下载并注册未加密 PDF 附件 UID,不发送消息,供file_analysis_agent用extract_pdf/describe_pdf_page解析)、info(只返回标题/作者/章节/标签/观看点赞/简介与链接,不下载);callable.json把它共享给file_analysis_agent,后者提示词里加了「车号/链接 → 先jm_book(output_mode="uid")」的规则。 - 新增
[jm]配置段:auto_extract_enabled(默认false)、use_proxy、auto_extract_group_ids/auto_extract_private_ids(空时跟随全局 access)、auto_extract_max_items(默认 1,上限 5)、max_file_size、max_chapters、pdf_dpi、image_quality、download_concurrency、request_timeout、image_timeout、session_dir(jmcpy 配置目录,可复用已保存的登录态);[jm].use_proxy支持环境变量JM_USE_PROXY。