
koishi-plugin-youtube-vincentzyu-fork
💬 插件使用问题 / 🐛 Bug反馈 / 👨💻 插件开发交流,欢迎加入QQ群:259248174 🎉(这个群G了
💬 插件使用问题 / 🐛 Bug反馈 / 👨💻 插件开发交流,欢迎加入QQ群:1085190201 🎉
💡 在群里直接艾特我,回复的更快哦~ ✨
自动识别聊天中的 YouTube 链接,通过 YouTube Data API v3 获取视频信息,并返回文本或 Puppeteer 渲染图片。
forked from H4M5TER/koishi-plugin-youtube
功能特性
-
自动检测聊天里的 YouTube 视频链接。 -
通过 YouTube Data API v3 获取标题、频道、发布时间、播放量、简介、标签和封面图。 -
支持文本消息输出。 -
支持 Puppeteer 渲染成 YouTube 风格预览图。 -
支持 axios或 Koishictx.http两种请求方式。 -
支持 HTTP / HTTPS / SOCKS4 / SOCKS5 / SOCKS5H 代理。 -
支持按平台配置用户白名单,避免在不合适的群聊环境自动解析。 -
支持 REST 服务模式,可拆成“解析客户端”和“渲染服务端”部署。 -
支持自定义 Puppeteer 渲染字体,默认下载到 Koishi 数据目录。 -
支持会话侧和控制台侧详细调试输出。
预览


依赖服务
| 服务 | 是否必须 | 用途 |
|---|---|---|
http |
可选 | 当 requestLib = ctx_http 时用于请求 YouTube API 和缩略图 |
puppeteer |
可选 | 当启用图片输出或 REST 渲染服务时用于截图 |
如果只发送文本,并且使用
axios请求库,可以不启用 Puppeteer。
如果选择
image输出,请启用 Puppeteer 插件。
使用方法
1. 获取 YouTube API Key 
-
在 Google Cloud 创建项目。
-
启用
YouTube Data API v3。 -
创建 API Key。
-
将 API Key 填入 Koishi 插件配置里的
youtubeApiKey。
2. 启用插件 
在 Koishi 控制台启用本插件,并至少配置:
-
youtubeApiKey -
requestLib -
代理配置,如果你的运行环境不能直连 YouTube / Google API
-
msgFormArr,选择发送纯文本、图片、text-with-image 图文或合并转发
3. 发送链接测试 
插件会自动识别以下常见链接:
https://youtu.be/{video_id}
https://www.youtube.com/watch?v={video_id}
https://www.youtube.com/shorts/{video_id}
https://www.youtube.com/embed/{video_id}
工作模式
standalone 独立模式
默认模式。当前 Koishi 实例直接完成:
识别链接 -> 请求 YouTube API -> 下载封面 -> 发送文本 / Puppeteer 出图
适合普通使用场景。
rest_client 客户端模式
当前 Koishi 实例只负责监听聊天消息,然后请求另一台 REST 服务实例:
实例 A:监听聊天消息 -> 请求实例 B
实例 B:解析 YouTube / Puppeteer 渲染 -> 返回结果
适合把 Puppeteer 渲染放到另一台机器上,或者多实例共用一个渲染服务。
RESTful 服务端模式
打开 enableRestfulService 后,本插件会启动 Fastify 服务,提供:
| 接口 | 方法 | 说明 |
|---|---|---|
/parse |
POST |
传入 { "url": "..." },返回视频解析结果 |
/render |
POST |
传入已解析 payload,返回渲染图片 Base64 |
/render-from-url |
POST |
传入 { "url": "..." },直接解析并渲染图片 |
REST 服务依赖 Puppeteer。插件内部会等 Puppeteer 服务可用后再启动 REST 服务。
配置项说明
基础配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
youtubeApiKey |
string |
必填 | YouTube Data API v3 的 API Key |
enableParseUrlFromPlatformSession |
boolean |
true |
是否从聊天消息里自动解析 YouTube URL |
middlewareWorkMode |
standalone / rest_client |
standalone |
工作模式 |
restClientTargetUrl |
string |
http://127.0.0.1:8020 |
REST 客户端模式下的目标服务地址 |
网络请求与代理
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
requestLib |
ctx_http / axios |
axios |
网络请求库 |
proxyProtocol |
http / https / socks4 / socks5 / socks5h |
socks5h |
代理协议 |
proxyIp |
string |
127.0.0.1 |
代理地址 |
proxyPort |
number |
7891 |
代理端口 |
userAgent |
string |
Chrome UA | 请求 YouTube API 和缩略图时使用的 User-Agent |
如果你用 Clash / Mihomo,常见 SOCKS 端口可能是
7891或你自己配置的端口。
如果选择
ctx_http,代理通常由 Koishi HTTP 插件统一管理。
视频简介配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
hideDescription |
boolean |
false |
是否隐藏视频简介 |
maxDescriptionLength |
number |
300 |
简介最大长度,超出会截断 |
消息发送配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
msgFormArr |
array |
["text-with-image", "image", "forward"] |
发送形式,支持 text、image、text-with-image、forward |
quoteWhenSend |
boolean |
true |
回复时是否引用原消息 |
发送形式说明:
-
text:只发送标题、频道、发布时间、播放量、简介和标签。 -
image:只发送 Puppeteer 渲染的视频预览卡片。 -
text-with-image:发送缩略图 + 文本详情,等价于旧版text行为。 -
forward:发送 OneBot 合并转发消息。
Puppeteer 图片字体配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enableCustomFont |
boolean |
true |
是否启用自定义渲染字体 |
autoDownloadFont |
boolean |
true |
字体不存在时是否自动下载 |
customFontPath |
string |
ctx.baseDir/data/fonts/LXGWWenKaiMono-Regular.ttf |
自定义字体绝对路径,默认使用 Koishi 数据目录下的字体文件 |
fontDownloadUrl |
string |
LXGW WenKai 下载地址 | 自动下载字体的 URL |
默认字体路径遵循 Koishi 数据目录规范:
ctx.baseDir/data/fonts/LXGWWenKaiMono-Regular.ttf
路径规则:
-
customFontPath默认值:使用上面的默认路径,并允许自动下载。 -
customFontPath留空:不使用自定义字体,直接回退系统字体。 -
customFontPath填绝对路径且文件存在:直接使用该字体。 -
customFontPath填相对路径:不支持,直接回退系统字体。 -
customFontPath填绝对路径但文件不存在:直接回退系统字体。 -
只有配置值等于默认路径、文件缺失且 autoDownloadFont = true时,才会从fontDownloadUrl下载。 -
支持常见字体格式:.ttf、.otf、.woff、.woff2。
平台白名单配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
platformWhitelistArr |
array |
onebot / 1830540513 |
平台 + 用户 ID 白名单 |
sendWhiteListHint |
boolean |
false |
是否发送白名单命中 / 跳过提示 |
白名单配置示例:
[
{
"platformName": "onebot",
"userIdWhilelist": ["123456789", "987654321"]
}
]
REST 服务配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enableRestfulService |
boolean |
false |
是否启动 RESTful 服务 |
restServiceBindIp |
string |
0.0.0.0 |
REST 服务监听 IP |
restServiceBindPort |
number |
18020 |
REST 服务监听端口 |
调试配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
enableVerboseSessionOutput |
boolean |
false |
错误时向聊天平台发送更详细的调试信息 |
enableVerboseConsoleOutput |
boolean |
false |
在 Koishi 控制台输出更详细的 API / 网络错误 |
常见配置组合
只发文字 
-
msgFormArr = ["text"] -
requestLib = axios -
不需要 Puppeteer
发图片 
-
msgFormArr = ["image"]或["text-with-image", "image"] -
启用 Puppeteer 插件
-
确保 Koishi 运行环境可以启动浏览器
-
默认会自动下载字体到
ctx.baseDir/data/fonts
默认组合 
-
msgFormArr = ["text-with-image", "image", "forward"] -
同时发送图文、渲染图和合并转发
-
image需要启用 Puppeteer 插件 -
forward主要面向 OneBot 适配器
走 Koishi HTTP 
-
requestLib = ctx_http -
启用 Koishi
http服务 -
代理交给 Koishi HTTP 插件配置
REST 分布式部署 
实例 B,渲染服务端:
-
enableRestfulService = true -
restServiceBindIp = 0.0.0.0 -
restServiceBindPort = 18020 -
启用 Puppeteer
实例 A,聊天客户端:
-
middlewareWorkMode = rest_client -
restClientTargetUrl = http://实例B地址:18020
排错建议
-
API请求参数错误 (400):检查 API Key 是否填写正确。 -
API访问被拒绝 (403):检查 API Key 权限、YouTube Data API v3 是否启用、配额是否用完。 -
视频不存在或已被删除 (404):链接可能失效,或视频不可访问。 -
网络连接失败:检查代理协议、代理地址、端口和运行环境网络。 -
图片模式无响应:确认 Puppeteer 插件已启用,浏览器能正常启动。 -
控制台会输出 msgFormArr原始值、标准化结果、每个发送模式的命中/跳过/开始/完成/失败日志,方便定位某个模式没发的问题。 -
打开 enableVerboseConsoleOutput可以在控制台看到更详细的请求错误。 -
打开 enableVerboseSessionOutput可以把详细错误发到聊天里,调试完建议关闭。
注意事项
-
YouTube Data API v3 有调用配额,频繁解析可能消耗较快。
-
某些视频可能没有
maxres缩略图,插件会 fallback 到high缩略图。 -
国内网络环境通常需要代理才能访问 YouTube / Google API。
-
白名单默认示例只是占位,请根据自己的平台和用户 ID 修改。
-
图片渲染依赖Puppeteer,需要配置前置Puppeteer服务依赖





