DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

jfanfly /

jfanfly/bil-yet-next

Verified

DSH 插件:B站、小黑盒与日常聊天的个人内容助手(内容助手视图)

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@47095b1a

bil-yet

个人内容助手:B站、小黑盒、日常聊天各有独立会话,必要时一起讨论。0.3.0 起它以 DSH 插件的形态运行,已经能在人工批准后替你发评论、回复、点赞、收藏。

当前是 0.3.0:本地工作台 + 「内容助手」视图 + 动作队列。微信、私信、投稿仍未接入;所有外发动作都要你点两次(批准 → 执行)。

它长什么样

装进 DSH 后,对话页上方多一个 「内容助手」 标签:

  • 顶部是「刷B站」最近一轮的状态:挑了 / 跳过 / 有评论、值得看 / 可以看 / 不值当、共几条;页面可见时每 60 秒自动刷新,也可以手动刷新。
  • 支持按标题 / UP / BV 号搜索,按日期、档位、状态筛选;结果多时先渲染 20 条、再「显示更多」,不会一次糊一屏。
  • 每行左半边是它替你发过的评论(优先显示 B站 的完整正文),以及网友在这条评论下的回复(预览两条);右下角 ··· 展开完整楼中楼,超过一页可以「加载更多回复」。它没在这个视频下评论过时,左半边改为显示这个视频的热评(最多五条),仍然可以展开。
  • 每行右半边是那条视频的卡片:封面、标题、UP、播放量、档位、为什么值得,点标题去 B站。
  • 每行底部有「写评论 / 回复 / 点赞 / 收藏」。评论先进动作队列,过语感闸门、再批准、再执行;点赞收藏点一下就算批准,但同样留回执。
  • 顶部「动作」面板显示待批准、已发送、失败、结果未知的动作;每条带目标视频和回执(评论 rpid / 收藏夹)。已发送的评论可以「核对可见性」,确认它在评论区真的出现了。
  • 「动作」面板还支持手动目标:粘一个 BV 号或动态号,直接写评论走审批。
  • 「私信」面板:拉会话列表、点开读消息、填 UID 发私信(同样先进动作队列等待批准);面板打开时每 15 秒自动刷新,关系状态和「允许首条私信」也在面板里。

设置里另有一个 「bil-yet 内容助手」 入口,打开的是完整工作台(会话、资料、表情库、草稿、任务)。

已实现

  • DSH 插件:会话视图 + 设置页入口,复用宿主的登录态、模型服务和附件服务。
  • 本地工作台,SQLite 持久化三个工作会话、消息、资料、笔记和任务。
  • 「内容助手」视图:读出「刷B站」跑过的视频、档位和评论记录,封面/播放量走 B站公开接口;支持搜索、筛选、自动刷新、离线快照。
  • 动作队列:发评论、回复楼中楼、点赞、收藏;批准后执行,带回执;超时不重发。评论目标支持 BV 号与动态号,动态会先读详情接口的 comment_type / comment_id_str 再发。
  • 私信:会话列表、读某个 UID 的最近消息、发送文本(WBI 签名 + 本地设备号),面板打开时每 15 秒自动刷新;发送同样走动作队列,批准后执行,回执是 msgKey。首条私信有防护:非互关、也没聊过时默认拒发,需要显式勾选「允许首条私信」;「关注 / 回关」也是一个动作。
  • 评论语感闸门:开头套话黑名单 + 与自己历史评论/视频热评的相似度;评论台账 comments.md 与「刷B站」兼容。
  • 文字切换、临时点名、平台链接路由、最近内容的指代关联。
  • 导入字幕/帖子/评论作为外部资料,配置模型后进行内容讨论。
  • 两个角色各自检查资料,再由主持人汇总;不共享两边的私人聊天历史。
  • 图片原件保存、解码校验、哈希去重;动画抽取代表帧并覆盖末帧。
  • 视觉模型标注表情含义,个人解释、使用/避用场景、禁用;可用表情参与本地聊天自动选图。
  • 草稿编辑和版本批准;修改后旧批准失效,未接入平台时禁止发布。
  • 后台任务停止、重启中断状态、请求去重、身份校验、来源隔离。

尚未实现

微信扫码/收发、私信自动回复与 watch 轮询、投稿与定时发布、自动巡轮、运营数据、小黑盒接入、真实外部联系人、长期记忆、图库物理删除。详见 开发状态。

安装到 DSH

先从源码构建出插件用的 JavaScript(dist/),再把整个目录装成插件:

cd D:\Project\鱼塘\bil-yet-0.2.0
node tools/build.mjs

dsh plugin --profile desktop add "D:\Project\鱼塘\bil-yet-0.2.0"

装完退出并重新打开 DSH(bundle 层要重启才组装)。然后:

  1. 随便开一个对话,上方会多出「内容助手」标签。
  2. 设置 → 「bil-yet 内容助手」→ 选 DSH 已配置的模型(不需要填 API 密钥)。

数据目录默认 %LOCALAPPDATA%\bil-yet(其他平台 ~/.local/share/bil-yet),可用 BILYET_DATA_DIR 覆盖。

「内容助手」的数据从哪来

它只读「刷B站」插件写下的数据,不写回、也不代替你说话:

内容 来源
刷过哪些视频、挑了还是跳过 seen.md 的「看过的视频」表
档位、为什么值得 reports/<BV>-<日期>.md
它替你发过的评论 seen.md 的「评论记录」表(BV / rpid / 时间)
网友回复(楼中楼) B站 x/v2/reply/reply,用「刷B站」已登录的凭证
封面、播放量 B站 x/web-interface/view,封面经本地代理缓存到数据目录

数据目录默认 <DSH_HOME>/bili-duty(DSH_HOME 默认 ~/.dsh),可用 BILYET_BILLI_DUTY_DIR 或插件配置 biliDutyDir 指定;也可以直接在设置页里改(见下)。

每次成功刷新还会把见过的视频写进本地 SQLite(bili_history 表),页脚显示「历史累计 N 条 · 覆盖 M 天」。seen.md 被轮换或清理后,历史仍然留在库里。

两点要知道:

  • 左栏现在有兜底。 它没在这个视频下评论过时,左栏显示该视频的热评;只有「我的评论」和热评都取不到(B站 风控 / 断网 / 关评)才会是空态。autoComment 仍然是关的,所以「评论记录」还是空表,等它真发过评论,这里才会切成「我的评论 + 网友回复」。
  • 评论正文优先用 B站 返回的完整正文;只有取不到时才回退到评论记录里的前 20 字,展开时会注明。楼中楼每页 20 条,可以继续加载;B站 挂了或风控,会退化成「读不到详细回复」,不影响视频列表。
  • 评论里的 @某人 和 B站 表情代码(如 [doge])做了轻量排版:@ 高亮、表情代码显示为小标签,不加载外部图片(避免把 IP 和 Referer 交给第三方 CDN)。

改数据目录与 Python(不用环境变量)

设置 →「bil-yet 内容助手」→ 工作台 →「连接与设置」里有一张「数据目录与 Python」卡片:

  • 「刷B站」数据目录:留空用默认值;填了会立即切换,不用重启(同时清掉上一份离线快照,避免串数据)。
  • Python 可执行文件:只在导入图片/视觉处理时用,留空由插件自动找。
  • 保存前会拒绝相对路径,并在卡片下方显示「目录是否存在、seen.md 是否找到」。
  • 这些值存在数据目录的 settings.json 里,优先级高于环境变量,改完立刻生效。

格式变化会明说

seen.md 存在、但找不到「看过的视频」表格,或表格列数对不上时,视图会直接提示「可能「刷B站」升级后改了格式」,而不是安静地显示 0 条。

断网、风控和「正在写入」

  • 风控退避:B站 回 -352 / -412 后进入冷却,从 30 秒起翻倍、最长 15 分钟;冷却期间不再发请求,页面顶部会写「约 N 秒后恢复」。网络失败另有 5 秒起、最长 60 秒的短冷却。
  • 离线快照:每次成功刷新都把整份视图写到数据目录的 feed-snapshot.json。断网、风控、或 bili-duty 暂时为空时,直接显示这份快照,并标注「显示 HH:mm 的缓存快照」;封面也会退回到本地缓存的旧图。
  • 正在写入:seen.md 末尾那行如果还没写完整(没有换行、文件刚被改过),这一轮先不解析,页面会提示「最后一行暂未计入」,下次刷新自然补上。

能说话之后的安全边界(0.3.0)

  • 所有外发动作都在动作队列里:propose → approve → execute;模型只能出稿,拿不到执行权。
  • 评论先过语感闸门:开头套话、与自己历史评论(≥0.55)、与该视频热评(≥0.5)撞了就不进队列,并把原因告诉你。
  • 请求超时归为「结果未知」,不会自动重发;核对之后再决定。
  • 评论/回复每天默认上限 10 条(ActionService.dailyCap);点赞收藏走 quick 通道,但同样记录状态与回执。
  • 私信不走公开评论的语感闸门,但同样需要人工批准,并计入每日上限;非互关且没聊过时默认拒发,必须勾选「允许首条私信」才会进入队列。
  • 凭证只读 <数据目录>/bili_credential.json(也兼容「刷B站」那份),只发往 api.bilibili.com / api.vc.bilibili.com。
  • 评论台账写入 comments.md,与「刷B站」格式一致,两边可以互相看见历史。

独立开发模式(不走 DSH)

要求 Node.js 24.12+ 的 24.x 版本。运行时只用 Node 内置模块,无须 npm install。

Copy-Item .env.example .env
node --env-file-if-exists=.env apps/service/main.ts

打开终端给出的 http://127.0.0.1:4317/#token=... 链接。访问令牌留在本机,不要转发;页面载入后会把令牌从地址栏移走。

开发模式下模型走 .env 的 BILYET_MODEL_URL / KEY / NAME,与 DSH 的模型选择互不影响。

图片处理

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r workers/media/requirements.txt

.env 里写 BILYET_PYTHON=.venv/Scripts/python.exe。原图最大 5 MB,解码有像素/帧数/时间上限,不接收 SVG。

验证

node --test tests/*.test.ts

69 项测试,覆盖任务恢复与取消、会话路由、模型 HTTP 协议、来源与权限隔离、草稿版本、图片解码及标注冲突、DSH 插件挂载与鉴权、seen.md/报告解析、完整正文与回退、楼中楼分页、热评兜底与风控降级、风控冷却、离线快照、半行写入、格式异常提示、路径设置、历史落库、动作队列与语感闸门(含动态目标解析、可见性核对)、WBI 签名、私信收发、首条防护与关注动作;其中 9 项用轻量 React 夹具真实渲染 client.js(状态条、搜索、展开、缓存/限流提示、分页、写评论、动作列表、手动目标与核对、私信面板)。媒体测试会自动找仓库里的 .venv,没有就跳过并标注。

测试用临时数据库和可控模型,不读取实际平台账号、不发真实消息;B站 接口在测试里是假的。

权限边界

  • 本地 HTTP 只绑 127.0.0.1,校验 Host、Origin 和令牌;装进 DSH 后改用宿主的登录态,不再写 access.token。
  • 模型没有 shell、文件读取或平台写工具;面板操作只存在于经过认证的本地管理 API。
  • 「内容助手」视图只调用 B站 的两个公开读接口,凭证只在本机、只发给 api.bilibili.com;封面必须是 hdslb.com 的 https 地址,经本地代理后返回。
  • 草稿批准与执行分开;版本不匹配或未接入能力时拒绝。
  • 内置防护不等于完成安全审计,也不保证模型永远不误解内容。

文档

  • 完整实现规格:产品目标、架构与验收要求。
  • 当前实现状态:已完成与未接入项。
  • 变更记录。
—/ 5

No ratings yet

Verified DSH bundle

Commit 47095b1ab47a

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout