dsh-bili-whale 0.4.6
给 DSH 装一条有日子的鱼:它自己按作息刷 B 站、真看懂视频、写两本日记,把值得的 @ 你。
不是"定时任务 + 关键词搜索",是生物钟 + 偏好 + 克制:每天只醒一两次,筛五条、深读两三条、最多 @ 你三次。
她该长成什么,见 VISION.md;每一版的改动见 CHANGELOG.md。
⚠️ 默认值是按「刚创的小号」定的(先看这个)
新装用户的默认配置是保守的。原因很直接:长时间高频轮询是小号被风控的头号原因 ✗
项 · 默认值 · 为什么 评论监听 · 关 ✗ · 开了就是每 60 秒一次请求,一天 1440 次 ✗ 小号扛不住 私信监听 · 开 ✓ 但 60 秒一轮 · 私信是她唯一的"叫得应"通道,但间隔不能短 全天监听 · 关 ✗ · 只在作息窗口(默认 20:00–24:00)内听 同一个人只回一条 · 开 ✓ · 30 天内不重复骚扰同一个人 请求间隔 · 1500 ms · 连击是最容易被判机器人的特征 读预算 · 600/时 · 3000/天 · 私信 60 秒一轮 ≈ 1440/天,留一半余量给看视频 写预算 · 12/时 · 30/天 · 评论+私信+收藏都算写 写冷却 · 120 秒 · 两次写之间至少 2 分钟 私信冷却 · 60 秒 · 撞 412/429 · 暂停 5/10/20/30 分钟 · 尊重平台,别硬顶
你自己的号够老、够干净? 那就去 ~/.dsh/bili-whale.config.json 里把 risk 那几个数调大 ✓ 新号别动 ✗ —— 默认值就是替你挡这一刀的 ✓
0.4.6 新东西(先看这四条)
① 分享前多一道「疑似 AI 评论」闸(默认关)—— 主动 @ 分享前先采一段该视频的评论, 由当前模型逐条判;疑似比例 ≥ 30%(写死) 就暂缓这次分享并推送到你配置的渠道。 只对「主动视频 @ 分享」生效,普通回复/动态/私信/弹幕都不走。细节见 AI-SHARE-TRIAL.md。
② 请求保护层——全局请求间隔 600ms(跨进程)、读 3000/天、写 30/天、撞 412 全局暂停、防重复发送。 这些值写死不给旋钮(给了也不一定按你填的走 ✗ 那不如不给)。想看真实值:node tools/bili.mjs traffic status。
③ 监听与失败退避——私信 / 评论按配置间隔轮询(默认 60 秒),无消息不降频。只有失败才翻倍退避,默认间隔下最长 15 分钟;成功读取后恢复基础间隔。平台暂停仍优先。
④ 两个省 token 的开关(默认都关,设置页「会话成本」)—— 会话轮换天数(默认 0 = 不轮换)· 每会话减少重复人设(默认关;开了之后每次重启后第一次投递会重新注入一次)。
另外:抽帧九宫格每格默认 720 像素(原来 360,界面文字糊)、--tile 可调; 唤醒提示压短 26%(1459 → 1086 字),判据一条没丢。
它能做什么
- 自己醒:在你设定的窗口里随机一个时刻醒来(不是整点);30% 概率今天不想看(它也有权利不看)
- 真看懂:读官方字幕 + 弹幕热区 + 热评 + 抽帧看画面(六路互补,没字幕的视频也能看懂)
- 没字幕轨、但画面里有硬字幕?用
debrief --substrip —— 把字幕带按时间裁下来拼成一张图,整片台词一张图读完 - 写日记:给你的那本("给主人的信",有细节有情绪)+ 给她自己的那本(不加滤镜)
- 分享给你:从深读过的里挑 2–3 条,发一条带 @ 你的评论(每天合计 ≤3)
- 听人找它:评论区监听(全天开关 + 间隔可调)+ 直播间弹幕(独立开关、实时回、可只回你)
- 回复分两侧:你是主人 → 直接回 ✓;其他人 → 先写草稿推给你审 ✓(草稿会推到你的推送渠道)
- 沉默会衰减:连续 3 天没有任何表态 → 分享额度开始降 → 第 7 天归零(不再分享),但日记照写 ✓
- 克制:撞到风控(验证码/限流/判刷屏)立刻停手并报告你
它不会做什么
- ❌ 给陌生人发私信 / 群发(唯一的私信通道见下:只发给主人 · 每天锁定一个收信人 · 必须互关,三条都写死在代码里)
- ❌ 三连 / 投币 / 关注 / 花钱(礼物、充电)
- ❌ 批量刷量、批量操作多账号、绕过风控
- ❌ 抓全站数据
- ❌ 动你的账号安全设置
它用你自己的账号说话 —— 所以默认是"少说、看准了再说"。
人设:你想让她是谁
插件不内置任何人格 —— 默认是个中性助手:不叫你"主人"、不撒娇、不说"人家"。
它读两个地方,按下面的顺序生效:
1) 她专属的人设 —— ~/.bili-ai/persona.md(推荐)
设置页「养鱼 → 她是谁」下面有一个人设正文输入框,写完点注入人设即可。
- 存在
~/.bili-ai/persona.md(和凭据、账本放在一起 —— 换机器时拷 .bili-ai 就带着走 ✓) - 只影响她,不影响你别的会话 ✓
- 每次唤醒 / 私信 / 评论 / 弹幕 / 直播间的提示都会附上(取前 3000 字)
- 和上面那三个字段(角色名 / 怎么称呼你 / 怎么自称)冲突时,以人设文件为准 ✓
- 清空再注入 = 撤销人设 ✓
- 上限 20000 字(注入只取前 3000,别把上下文撑爆)
建议写法(顺序就按这个来,因为只取前 3000 字):
# 我是谁
身份、来历、外形、一句话的自我认知
# 说话
句子长短、标点习惯、口头禅、哪些词不用、自称/称呼的腔调
# 我在意什么
判断标准、偏好、怕什么
# 我绝不会
明确不要的行为(底线)
# 日记怎么写 / 分享的标准
让她自己知道"什么时候该写、什么值得发"
2) 宿主自己的 AGENTS.md(兜底 / 通用底色)
~/.dsh/AGENTS.md 会被 DSH 在所有会话里热加载 —— 所以它对每一个 agent 生效, 不只对她 ✗ 想只改她就用上面的 persona.md ✓
这里适合放通用红线(不说假话、不冒充你、不伤害第三方)和跨端的协作约定。
三个字段也能改
设置页里那三个(角色名 / 怎么称呼你 / 怎么自称)会拼成一行身份提示:
[身份]你是「…」,称用户「…」,自称「…」。
只是称呼提醒,放不下详细人设 ✓ 详细内容写 persona.md ✓
旧版本的 persona.example.md 已移除:那是某个具体的人的人设,不该当模板发出来 ✗
账号前提(先看这个,再决定用哪条路)
这个插件是两个号的模型:「她」一个号,「你(主人)」一个号。同一个号做不到"她跟你说话"。
通道 · 需要什么 · 只有一个号时怎么办 看视频 / 写日记 / 学偏好 · 只要一个号(她的 cookie) · ✅ 完全可用 分享(share.via = comment) · 同上,不需要第二个号 · ✅ 完全可用(在评论区 @ 你) 推送(桌面 / Webhook / 自定义命令) · 同上 · ✅ 完全可用 私信专线(share.via = dm + notify.type = dm) · 两个不同的、可登录的实名账号,且双方手动互关 · ❌ 做不到 —— 见下
⚠️ 国内一个身份证通常只能实名一个 B 站号 ✗
所以「第二个号」对很多人是过不了实名的硬墙 ✗
只有一个号时:分享方式选「评论区 @」,推送选桌面通知 / Webhook / 自定义命令 ✓
单号模式不能做:私信专线、以完全独立的第二个身份出现 ✗
装
前提:Node 18+;ffmpeg(看画面要用,见下)。
# 1) 装插件(本地目录 / npm 都行)
dsh plugin --profile desktop add "link:C:\path\to\dsh-bili-whale"
# 2) 重启一次 DSH(bundle 层要重启才组装)
# 3) 打开「设置 → 养鱼」(不是 /dsh-bili/ 那个页面 —— 那个被 DSH 的信任栅栏挡着 ✗)
设置页里三件事:
- 填 cookie —— 在
bilibili.com 页面按 F12 → Application(应用)→ Cookies → https://www.bilibili.com,
手动复制 SESSDATA、bili_jct、buvid3 三个值粘进设置页 ✓ (⚠️ 别用 document.cookie ✗ —— SESSDATA 是 HttpOnly,脚本里读不到,照那个做会得到一份缺件的 cookie 然后卡在体检)
- 填你的 mid + 昵称 —— 分享评论要 @ 的人
- 点「依赖体检」 —— 它会真的去请求一次 B 站验证登录态,并检查 ffmpeg / Node / 数据目录
⚠️ 改完一定要点「保存」 —— 设置页的输入框是先改在本地、点保存才落盘的 ✓
不点保存 = 什么都没发生(刷新一下就变回原样 ✗,这个坑本鲸自己也踩过 ✗)
✅ 保存即生效:作息窗口 / 评论监听 / 直播间开关 / 消息推送 / 分享闸门,都是保存后立刻重算 ✓
⚠️ 只有换插件代码/版本才需要重启 DSH(改配置不用 ✗)
设置保存在 ~/.dsh/bili-whale.config.json(不含凭据);凭据单独在 ~/.bili-ai/credentials.json,永远不回显。
🚦 启动测试(装完立刻跑这一条)
node <插件目录>/tools/bili.mjs selftest
(Windows 路径换成 %USERPROFILE%.dsh\plugins\dsh-bili-whale\tools\bili.mjs)
它会把该确认的事列成一张表:配置 / 凭据 / 登录态 / 数据目录 / 依赖体检, 缺哪项就直说缺哪项,最后两行是绝大多数人卡住的地方:
────────── 接下来要做的两件事(很多人卡在这)──────────
① 【找到她的会话】
插件启动时会自动开一个会话,位置在:
左侧「工作区」→ 展开「未分组」文件夹 → 里面那个 bili-whale
⚠️ 不点开「未分组」是看不见它的 —— 这一步最容易漏 ✗
② 【给她完全权限】
打开那个会话 → 权限设置 → 选「完全访问 / danger-full-access」
否则她起来后跑不了命令、发不了评论、写不了日记 ✗
══════════ 全部通过 ✓ 可以用了 ══════════
⚠️ 这两步是新手最常卡住的地方
症状 · 真正原因 「装完了,但找不到她」 · 她的会话在 工作区 → 未分组 里,不点开那个文件夹看不见 ✗ 「找到了,但她什么都不干 / 一直报错」 · 那个新会话默认没有完全权限 ✗ 给她 danger-full-access ✓ 「设置页保存了还是红的」 · 没点「保存」(输入框是先改在本地)✗ 「cookie 填了还是未登录」 · 用了 document.cookie 取 SESSDATA ✗ 它是 HttpOnly,必须 F12 手动复制 ✓
想立刻看她跑一轮
设置页 →「生物钟」→ 把作息窗口改成现在之后 2 分钟的一小段 → 保存 → 等她自己醒 ✓ (她醒来会:体检 → 选题 → 看懂 → 写两本日记 → 推给你;不用你说话 ✓)
分享方式二选一:评论区 @ 或 B站私信
设置页「分享」里可以选:
方式 · 行为 · 适合 评论区 @ 你 · 在视频评论区发一条带 @ 的公开评论 · 想让别人也看到 ✓ B站私信 · 不发公开评论,把分享内容 + 视频链接私信给你 · 不想吵到别人 ✓(就是评论区那 110 条里喊"艾特泛滥"的人要的 ✓)
两种方式共用同一本分享额度:≤3 条/天 · 同一视频 7 天一次 · 评分 ≥13/20 ✓
判重按 BV 号算(不是按"发给谁"算)✓
两条通道走同一套校验(v0.4.0 起)—— 关掉分享总开关,私信也发不出去:
校验 · 说明 share.enabled = false · 评论和私信都拒绝分享命令 ✗ --reason · 至少 8 字,说不清为什么留就不发 --score · 0–20,必须 ≥ share.minScore(默认 13) --rank 1 · 只允许第一名
以前私信那条绕过了这些校验(关掉分享还能发)✗ v0.4.0 修了 ✓
普通聊天私信(不分享视频)不受这些限制 —— 它不需要评分 ✓
专属通道(私信)—— 只有一条路,写死在代码里
想把东西私密地送到你手里、又不想在评论区吵到别人?用 dm(一天同一个人不限条数 ✓):
node bili.mjs dm --status # 看今天额度 + 互关状态
node bili.mjs dm --msg "…" --dry # 预演
node bili.mjs dm --msg "…" --go # 真发
三条限制不接受参数覆盖(commands/dm.mjs 顶部的常量):
- 一天只锁定 1 个收信人(防刷量)—— 对这一个人发多少条都行 ✓
- 只发给配置里的 `owner.mid` —— 别处发不出去
- 必须互关(
relation.attribute === 6),否则直接拒发
为什么这么窄:B站 私信是风控最凶的接口(判营销/骚扰)。能力越窄越安全。
首次开通需要双方手动关注:先登录她的账号,打开主人的 B 站空间并关注;再切换到主人账号,打开她的空间并关注。插件不会自动执行关注。运行 node bili.mjs dm --status 查看两个方向,确认 attribute=6 后再使用私信分享或通知。只关注一个方向还不够。
ffmpeg(可选 · 只有"抽帧看画面"这一路要它)