📖 介绍
当前支持的平台和类型:
| 平台 | 触发的消息形态 | 视频 | 图集 | 音频 |
|---|---|---|---|---|
| B 站 | av 号/BV 号/链接/短链/卡片/小程序 | ✅ | ✅ | ✅ |
| 抖音 | 链接(分享链接,兼容电脑端链接) | ✅ | ✅ | ❌️ |
| 微博 | 链接(博文,视频,show, 文章) | ✅ | ✅ | ❌️ |
| 小红书 | 链接(含短链)/卡片 | ✅ | ✅ | ❌️ |
| 快手 | 链接(包含标准链接和短链) | ✅ | ✅ | ❌️ |
| acfun | 链接 | ✅ | ❌️ | ❌️ |
| youtube | 链接(含短链) | ✅ | ❌️ | ✅ |
| tiktok | 链接 | ✅ | ❌️ | ❌️ |
| 链接 | ✅ | ✅ | ❌️ |
本插件目标:凡是链接皆可解析!尽请期待更新(如果可以,请提交PR)
🎨 效果图
插件默认启用 PIL 实现的通用媒体卡片渲染,效果图如下
💿 安装
直接在astrbot的插件市场搜索astrbot_plugin_parser,点击安装,等待完成即可
⚙️ 配置
请在astrbot的插件配置面板查看并修改
🎉 指令
| 指令 | 权限 | 说明 |
|---|---|---|
| 开启解析 | ADMIN | 开启解析 |
| 关闭解析 | ADMIN | 关闭解析 |
| bm | - | 下载 B 站音频 |
| ym | - | 下载 youtube 音频 |
| blogin | ADMIN | 扫码获取 B 站凭证 |
🧠 插件工作流程
当插件运行后,每一条消息的处理流程如下:
消息接收
监听所有消息事件,获取消息链与原始文本内容- 支持普通文本、链接、卡片(Json 组件)
基础过滤
- 跳过已被禁用的会话
- 跳过空消息
- 若消息首段为
@且目标不是本 Bot,则不解析
链接提取与匹配
- 若为卡片消息,先从 Json 中提取 URL
- 使用「关键词 + 正则」双重匹配,定位对应解析器
- 未匹配到解析规则则直接退出
仲裁判定(Emoji Like Arbiter)
- 仅在
aiocqhttp平台生效 - 通过固定表情进行 Bot 间仲裁
- 未胜出的 Bot 自动放弃解析
- 仅在
防抖判定(Link Debouncer)
- 对同一会话内的相同链接进行时间窗口限制
- 命中防抖规则则跳过解析,避免短时间重复处理
解析任务启动
- 创建异步任务执行解析流程
- 同一会话仅维护一个运行中的解析任务
内容解析
- 调用对应平台解析器获取媒体信息
- 生成统一的
ParseResult数据结构
媒体下载与消息构建
- 下载视频 / 图片 / 音频 / 文件
- 根据配置决定音频发送方式
- 可按配置提示下载失败项
卡片渲染(可选)
- 在非简洁模式或无直传媒体时生成媒体卡片
- 使用 PIL 渲染并缓存图片
消息合并与发送
- 当消息段数量超过阈值时自动合并为转发消息
- 最终将结果发送到对应会话
任务回收
- 解析完成或异常后清理任务状态
- 插件卸载时统一取消所有运行中的任务
整体设计目标:
在保证多 Bot 场景下解析唯一性的前提下,实现稳定、高效、可扩展的链接解析流程。
🧩 扩展
插件支持自定义解析器,通过继承 BaseParser 类并实现 platform, handle 即可。
示例解析器请看 示例解析器
🎉 致谢
本项目核心代码来自nonebot-plugin-parser,请前往原仓库给作者点个Star!