Vai al contenuto principale
A

dsh-bili-interactor

acttk/dsh-bili-interactor

Browses Bilibili on your behalf and actually takes part: search videos, like, coin, send danmaku, post comments, reply to other people, and keep replying when someone answers back. Reads the video's Bilibili AI subtitle, or transcribes the audio locally when there is none, so its comments talk about what the video really says rather than just the title, and it reads that same content before deciding whom to reply to. Rather than copying other people's sentences, it distills rules about how to sound like a person and gets less AI-ish the more it runs. Remembers which videos it already browsed, de-duplicates replies per thread, and checks whether a comment is genuinely public or only visible to your own account, warning you on the overview when replies got folded. Six-tab settings panel where every change takes effect immediately with no restart, plus an environment self-check that tells you exactly what to install. Requires Python 3 for the Bilibili actions; the built-in environment check lists any missing packages.

Installazione

dsh plugin --profile web add github:acttk/dsh-bili-interactor

README

dsh-bili-interactor

让 AI 替你在 B站 上真的产生互动 —— 刷视频、点赞、投币、发弹幕、发评论、回评论,以及别人回你之后接着聊。

一个 DSH(DeepSeek Harness)插件。在 设置 → B站互动 里操作,不用另开网页。

用的是你自己的账号。 点赞会亮、投币会扣、评论会挂在视频下、关注会被人看见。 默认参数刻意保守,请自己控制量 —— 大量重复操作很可能被 B站 判定为异常并折叠、限流或封禁。 详见文末的风险与免责。


它做什么

  • 刷视频:按关键词搜索,粗筛掉广告/抽奖类内容,同一个 UP 主一轮内限量
  • 互动:点赞 / 投币 / 收藏 / 发弹幕 / 关注,每项独立成败,互不影响
  • 发评论:给视频发一条新评论,可以 @ 指定的人
  • 回评论:从别人的评论里挑「值得接话」的回(纯情绪、复读、广告不选;挑不出来就不回)
  • 接着回:后台定时检查自己发过的评论,有人回了就接着聊 —— 条数可设上限,也可设成不限
  • 学习记忆:从评论区里挑有信息量的内容存下来,下次说话时带上;挑选标准由你自己写
  • 都看得见:面板里能查到它说过什么、在哪些视频下说过、哪些评论真的被别人看到了

三种「说」要分清,面板里也这么标:

标签含义谁先开口
评论我在视频下发的新评论我
回评论别人发了评论,我去接他的话别人
接着回别人回的是我发过的评论,我接着聊别人(冲我来的)

截图

图里是演示数据,不是真实账号内容。

总览 —— 今天动了多少次、额度用了多少、这一轮在干什么

总览

它说了什么 —— 每条原文都在,可跳到对应楼层、可检查是否真的公开

它说了什么

碰过的视频 —— 每条视频下我说过什么,带直达链接

碰过的视频

另外三页(记忆 / 过程 / 设置)

记忆 —— 学到了什么、几分、为什么记、从哪来

记忆

过程 —— 这一轮的实时实录,包括为什么跳过某条

过程

设置 —— 全部开关和限额

设置


环境要求

需要什么必须吗用途大小
DSH(Desktop 版,带插件系统)必须宿主—
Python 3.10+ + bilibili-api-python httpx qrcode pillow必须调 B站 接口、渲染登录二维码~100MB
一个 B站 账号(建议小号)必须干活的那个号—
DeepSeek API key可选有 key 才按人设说话;没有就退回内置模板—
本地转写环境(Whisper)绝大多数人不需要只有连 AI 字幕都没有的视频才用得上700MB~1.5GB

关于「它怎么知道视频在说什么」

它读的是文字,不是画面:模型拿到的是视频的字幕文本,不解码画面、不听声音。

好消息是——大多数视频都有字幕,不需要下载任何东西。B站的 AI 字幕(ai-zh)覆盖很广, 插件调 player/info 接口就能拿到,实测 4 个不同类型的视频全都有:

视频字幕条数语言
部署教程1ai-zh 中文
官方 MV12zh-CN / zh-Hans / zh-Hant …
748 集课程1ai-zh 中文
大肥鱼整活8ai-zh / ai-en / ai-ja

四层降级:

层手段条件要装东西吗
①B站 字幕(ai-zh 优先)大多数视频都有不要
②本地 Whisper 转写(py/asr.py)连 AI 字幕都没生成的极少数视频要,~500MB 模型
③弹幕池永远可用。观众会把重点和坑打在屏幕上不要
④只有标题/简介上面都没有时。过程实录里会写明「只有标题」不要

默认只用 ①③④,不下载任何东西。 第 ② 层是给你想覆盖「连字幕都没有」那种视频时用的, 默认关闭,不装也完全不影响正常使用。

DeepSeek API key 是可选的:有 key 时评论/回复由模型按你的人设生成;没有 key 会退回内置模板,人设不生效(面板顶部会提示)。


安装

# 1. 给插件建一个 Python 虚拟环境(推荐)
cd ~/.dsh
python -m venv bili-interactor/.venv
# Windows:
bili-interactor/.venv/Scripts/pip install bilibili-api-python httpx qrcode pillow
# macOS / Linux:
bili-interactor/.venv/bin/pip install bilibili-api-python httpx qrcode pillow

插件按这个顺序找解释器:配置项 pythonPath → ~/.dsh/bili-interactor/.venv → ~/.dsh/bili-duty/.venv(和另一个插件共用的兼容路径) → PATH 上的 python。 你已经有现成的环境就填 pythonPath,不用再建。

可选:装本地转写(大多数人不用装)

先看情况再决定:

  • 视频有 B站 字幕(大多数都有,包括 AI 字幕)→ 什么都不用装,插件直接读
  • 视频连 AI 字幕都没有(纯音乐、无声录屏、少数冷门视频)→ 才需要这一层

要装的话:

# 在仓库根目录跑,会自动建 ~/.dsh/bili-interactor/.venv-asr 并预热模型
# Windows:
powershell -ExecutionPolicy Bypass -File scripts/setup-asr.ps1
# macOS / Linux:
bash scripts/setup-asr.sh

# 想更准可以换模型(tiny / base / small / medium,默认 small)
powershell -ExecutionPolicy Bypass -File scripts/setup-asr.ps1 medium

装完去设置里打开 「没字幕才本地转写」。

模型走 hf-mirror.com 国内镜像,不用梯子。第一次跑会加载模型(几十秒),之后就是本地读。 如果本机已经装了「刷B站」插件,它的转写环境会被自动复用,不用重复装。

# 2. 装进 profile
cd ~/.dsh/profiles/desktop
pnpm add link:<本仓库路径>

# 3. 让 profile 加载它:cordis.patch.yml 末尾加上
#    - insert:
#        - id: bili-interactor
#          name: dsh-bili-interactor

装完重启一次 DSH(首次要构建前端 bundle),之后改代码只需刷新页面。


第一次用

  1. 打开 设置 → B站互动
  2. 点 扫码登录,面板里会直接出二维码
  3. 手机 B站 App → 右上角扫一扫 → 点「确认登录」
  4. 面板变成「已登录」,就能用了

二维码 180 秒有效,面板里有倒计时。没扫完就离开页面也没关系,宿主在后台继续轮询,扫上了会自动变成已登录。

登录成功的凭证存在 ~/.dsh/bili-interactor/credential.json(含 SESSDATA,别外传、别提交)。


面板

页签能看什么
总览今天动了几次、剩多少额度、投币数、上一轮结果;可以手动「现在跑一轮」
它说了什么评论、回评论、接着回、私信的全部原文;带「跳到这一楼」和「复制正文」;可一键检查哪些真的被别人看到了
碰过的视频今天碰过的视频卡片:标题、UP、各种动作次数、我在这条下说过的话(带直达)
记忆学到的东西、分数、为什么记、来源;可单条删除、可手动添加;「什么才值得记」在这里自己写
过程这一轮的实时实录:在搜什么、挑了哪条、为什么跳过、失败原因
设置全部开关和限额

配置

配置存在 ~/.dsh/bili-interactor/config.json,也可以直接在面板「设置」里改。所有上限填 0 都是不限。

额度

键默认说明
enabledtrue总开关
maxActionsPerRun20一轮最多动几次(点赞/投币/弹幕/评论/回复全算)
maxActionsPerDay120一天最多动几次(管「跑一轮」,不含监听回复)

动作

键默认说明
doLike / doCoin / doDanmakutrue点赞 / 投币 / 发弹幕
doDigesttrue先摘视频内容(字幕/弹幕)再说话,评论才不会只吐槽标题
doTranscribefalse没字幕时用本地 Whisper 转写(准但慢,一条 1~2 分钟,需装转写环境)
doWatchfalse上报观看进度。这是在刷播放数据,默认关,容易被识别
watchStylefastfast 几秒上报完;real 按真实节奏走完(更慢但更像真人)
doFavorite / favoriteIdfalse / 0收藏,需要填收藏夹 ID
doFollowfalse关注 UP(最容易被人发现,默认关)
coinPerVideo1每条投几个币
actionIntervalMs[1500, 4000]两次动作之间的随机间隔

选视频

键默认说明
keywords["恐怖游戏","游戏解说"]搜什么
orderclickclick 按播放 / pubdate 按最新 / totalrank 综合
daysBack7太老的不碰,0 = 不限
minPlay1000播放量下限
maxPerUpPerRun2同一个 UP 一轮最多碰几条
skipKeywords见默认值标题命中就跳过

评论

键默认说明
doCommenttrue发新评论
doReplyComment / replyCounttrue / 2回别人的评论;每条视频最多回几条
mentionUid0@ 谁(填 UID),0 = 不 @
persona / commentPersona见默认值人设提示词,写多长都行

接着回(回复监听)

键默认说明
doReplyBacktrue开关
replyBackMax0每条评论下最多回几句,0 = 不限
replyBackPerDay0一天最多回几条,0 = 不限
replyBackMinLen2对方回复太短就不理
listenIntervalMin1每几分钟查一次
listenMaxThreadsPerTick15每次最多看几条「我发过的评论」(多了轮流)
listenLookbackHours72只往回看多少小时内自己发的评论

listenMaxThreadsPerTick 直接决定请求频率:填 20 就是每分钟最多 20 次请求。 楼很多时它会轮流看,几轮转完一圈,不会漏。

学习

键默认说明
doLearntrue开关
learnPerRun3一轮最多记几条
learnUseCount8说话时参考几条
learnMinScore6低于这个分不记(0~10)
learnPrompt见默认值你自己写的挑选标准,会原样交给模型

数据文件

全部在 ~/.dsh/bili-interactor/:

credential.json   登录凭证(含 SESSDATA,别外传)
config.json       配置
ledger.jsonl      一行一个动作(超过 3MB 自动只留最近 2000 行)
learned.jsonl     记忆,一行一条
replied.json      已回过的子评论(防重复回)
visibility.json   哪些评论是「别人能看到」的
daily.json        当日计数
live.md           过程实录
interact.log      运行日志

命令行

py/interact.py 可以单独用,全部输出 JSON:

PY=~/.dsh/bili-interactor/.venv/Scripts/python   # macOS/Linux: .venv/bin/python3

$PY py/interact.py whoami
$PY py/interact.py search    --keyword 恐怖游戏 --order click --limit 10
$PY py/interact.py comments  --bvid BV1xxxxxxx --order time --limit 20
$PY py/interact.py act       --bvid BV1xxxxxxx --like --coin 1 --danmaku "这波可以"
$PY py/interact.py comment   --bvid BV1xxxxxxx --text "……"
$PY py/interact.py sub-replies --bvid BV1xxxxxxx --rpid 123456
$PY py/interact.py visible   --bvid BV1xxxxxxx --rpid 123456
$PY py/interact.py digest    --bvid BV1xxxxxxx      # 摘视频内容(字幕/弹幕/简介)
$PY py/interact.py transcribe --bvid BV1xxxxxxx     # 本地转写(慢,要装转写环境)
$PY py/interact.py watch     --bvid BV1xxxxxxx      # 上报观看(会产生观看记录)

登录走宿主(lib/login.mjs),凭证在 Set-Cookie 响应头里。


代码结构

lib/index.js     宿主:HTTP 路由、调度、回复监听、记账
lib/login.mjs    扫码登录(Node 侧,从 Set-Cookie 取凭证)
lib/targets.js   搜索、粗筛、挑目标
lib/danmaku.js   文案生成(有 key 用模型,否则模板)
lib/learn.js     记忆的读写与淘汰
lib/state.js     配置、账本、当日额度
py/interact.py   执行层:只调 B站 接口,只干活不判断
py/asr.py        本地转写(Whisper,把没字幕的视频读成文字)
client.js        设置页面前端

写盘全部在 Node 侧,Python 只负责联网 —— DSH 沙箱下子进程往往写不进 ~/.dsh/<插件名>。 这条边界由 tests/test_login.py 断言(它会监视每一次写盘尝试)。


测试

node smoke.mjs                        # 前端渲染、六个页签、跳转链接
node smoke-host.mjs                   # 宿主路由、状态、拒绝路径
node tests/test_login_flow.mjs        # 扫码 → 自动登录 → 凭证落盘 → 界面变已登录
node tests/test_cookie_parse.mjs      # 从 Set-Cookie 取凭证
node tests/test_qr_ttl.mjs            # 二维码有效期预算
node tests/test_scan_then_expire.mjs  # 扫了没确认就过期
node tests/test_proactive_refresh.mjs # 主动换码
node tests/test_reply_pick.mjs        # 「值得接话」的筛选
node tests/test_learn_mention.mjs     # @ 去重、记忆读写
node tests/test_dedupe.mjs            # 同一个楼不重复回
python tests/test_comment_result.py   # 评论结果判定(含 12014 频率上限)
python tests/test_login.py            # Python 侧零写盘

已知限制

  • 弹幕收不回(B站 限制:发出后 2 分钟内、每天 5 条),写歪了只能手动删
  • 评论可能只有你自己看得见:code: 0 只代表 B站 收下了。新号、敏感内容、短时间大量评论会被折叠或送审 —— 面板的「检查这些是不是真的公开了」就是查这个,别以为发出去了别人就能看到
  • 有频率上限:短时间内发太多评论会返回 12014,这一轮会自动停下
  • 有风控:密集写操作可能返回 -412 / -352 / -101
  • 它"看"视频的方式是读字幕文本,不是看画面:拿 B站 字幕(ai-zh 优先)当材料, 没有字幕时可以用本地 Whisper 转写,再没有就靠弹幕池 —— 它不会解码画面、也不听声音
  • 它不上报观看(默认):不会给视频刷播放量。开了「上报观看」才会,那属于刷数据,风险自担
  • 没有定时「跑一轮」:只有手动触发和回复监听(写操作要你亲手按)

风险与免责

  • 这是非官方工具,使用的是网页端接口。B站 可能随时调整接口或提高风控等级。
  • 请不要用它刷量、发广告、引战、批量骚扰。这类行为违反 B站 社区规则,可能导致账号被限制或封禁。
  • 自动化操作本身就有被判定为异常的风险。建议用小号,并且把各项上限设在合理范围。
  • 使用者需自行承担使用本工具的一切后果。作者不对账号受限、内容被删、数据丢失等任何损失负责。
  • 项目仅供学习和个人研究使用。

License

MIT

Plugin correlati