logo
1
0
WeChat Login

Bili-Bot - 小精灵直播助手

Latest Release Go Version GoFrame Version Vue Version

高效稳定的 Bilibili 直播间 AI 场控机器人管理系统,基于 Vue 3 + GoFrame 构建,支持多直播间并发管理、AI 智能弹幕互动、优先级消息队列处理。

功能特性

  • B站扫码登录 — 支持管理端和机器人账号的二维码扫码登录
  • 权限分级控制 — 仅开启AuthAllowed的机器人账号可登录管理后台,避免越权
  • 多直播间场控 — 同时管理多个直播间,独立启停、状态监控
  • AI 智能弹幕 — 接入 CNB AI 大模型,自动生成直播互动回复
  • 分层提示词配置 — 支持全局默认提示词 + 直播间自定义提示词,优先级继承
  • 提示词导入导出 — 支持JSON/Markdown格式一键导入导出,快速批量配置
  • 优先级消息队列 — 三级优先级(高/中/低)+ 低优先级批量合并 + 弹幕限流
  • JWT 认鉴权 — Access Token / RefreshToken 双令牌机制,密钥自动持久化
  • 安全加固 — 敏感配置脱敏、账号权限分级、所有删除操作安全校验
  • 全局确认弹窗 — 所有危险操作统一使用Confirm组件二次确认,避免误操作
  • 弹幕测试发送 — 支持在账号管理页和主播管理页直接发送测试弹幕,验证机器人可用性
  • AI 提示词扩写 — 集成AI扩写能力,一键将简短的提示词描述扩展为详细完整的配置
  • 编辑器多视图模式 — Markdown编辑器支持编辑、双栏、预览三种视图模式切换
  • 响应式 UI — 基于 PrimeVue 4 的现代暗色主题界面,支持移动端
  • Docker 部署 — 一键容器化部署

技术栈

技术说明
前端框架Vue 3 + TypeScript组合式 API、文件路由
UI 组件库PrimeVue 4Material Design 风格
构建工具Vite 7HMR、组件自动导入
路由Vue Router 4 (Hash 模式)unplugin-vue-router 文件路由
HTTP 客户端Axios请求/响应拦截器、JWT 注入
后端框架GoFrame v2Go 语言企业级 Web 框架
ORMGORM + SQLite轻量级嵌入式数据库
实时通信WebSocket (gorilla/websocket)B站直播间弹幕监听
AI 能力CNB SDK (go-cnb)大模型聊天补全接口
容器化Docker / Docker Compose多阶段构建

项目结构

bili-bot/ ├── src/ # 前端源码 │ ├── api/ # API 客户端模块 │ │ ├── anchor.ts # 主播相关接口(含场控启停) │ │ ├── auth.ts # 认证接口(登录/用户信息) │ │ ├── bot.ts # 机器人账号接口(登录/列表) │ │ └── config.ts # 全局配置接口 │ ├── pages/ # 页面组件(文件路由) │ │ ├── index.vue # 首页仪表盘 │ │ ├── login.vue # 扫码登录页面 │ │ ├── anchors.vue # 主播管理与场控控制 │ │ ├── bot-accounts.vue # 机器人账号管理 │ │ └── config.vue # 全局配置管理 │ ├── plugins/ # Vue 插件 │ │ ├── index.ts # 插件注册入口 │ │ └── primevue.ts # PrimeVue 配置 │ ├── router/ # 路由配置 + JWT 守卫 │ ├── styles/ # 全局样式(暗色主题) │ ├── utils/request.ts # Axios 封装(baseURL、拦截器) │ ├── App.vue # 根组件(顶部导航栏 + Toast) │ └── main.ts # 应用入口 │ ├── cloud-functions/ # 后端源码(Go) │ ├── index.go # 程序入口 main() │ ├── api/ # API 接口定义层(请求/响应结构体) │ │ ├── auth/ # 认证鉴权接口定义 │ │ └── bili/ # B站业务接口定义 │ ├── internal/ │ │ ├── boot/boot.go # 启动初始化(目录创建、数据库迁移) │ │ ├── cmd/cmd.go # HTTP 服务配置(路由/中间件/Swagger) │ │ ├── consts/ # 常量 + AI Prompt 人设 │ │ ├── controller/ # 控制器层(HTTP 处理函数) │ │ ├── logic/ # 业务逻辑层(核心实现) │ │ │ ├── bili/ │ │ │ │ ├── bili.go # BiliApi 实例、Cookie 持久化、配置 CRUD │ │ │ │ ├── bili_account.go # Bot 账号管理 │ │ │ │ ├── bili_room.go # 主播/房间管理 │ │ │ │ ├── live_manager.go # ★ 直播场控管理器(WebSocket) │ │ │ │ └── message_queue.go # ★ 优先级消息队列 + AI 对话引擎 │ │ │ ├── auth/jwt.go # JWT 双令牌签发/验证 │ │ │ └── cnb/cnb.go # CNB AI 平台集成 │ │ ├── middleware/jwt.go # JWT 认证中间件 │ │ ├── models/orm_models/ # 数据模型(Bot / Room / Config 三张表) │ │ ├── service/ # 服务接口层(依赖注入) │ │ └── utils/ # 工具类(密钥/Cookie/JWT 底层) │ └── storage/ # 运行时存储 │ ├── private/bili-bot.db # SQLite 数据库文件 │ └── public/web/ # 前端构建产物 │ ├── docker-compose.yml # Docker Compose 编排 ├── Dockerfile # 多阶段构建(Node + Go + Debian Slim) ├── vite.config.mts # Vite 配置(代理、路径别名、构建输出) ├── package.json # 前端依赖与脚本 └── tsconfig.json # TypeScript 配置

快速开始

环境要求

  • Node.js >= 18
  • Go >= 1.25
  • Docker & Docker Compose(可选)

本地开发

# 1. 安装前端依赖并启动开发服务器 npm install npm run dev # 访问 http://localhost:3000 # 2. 另一个终端:启动后端服务(默认端口 9204) cd cloud-functions && go run index.go

开发环境下前端通过 Vite proxy 将 /api 请求代理到后端 http://127.0.0.1:9204 首次启动时扫码登录的第一个账号会自动添加为可登录账号

Docker 部署

# 使用 Docker Compose 一键启动 docker compose up -d # 或自定义端口启动 BILI_BOT_PORT=9204 docker compose up -d

生产构建

# 前端构建 → 输出到 cloud-functions/web/ npm run build # 后端构建 → 单二进制文件 cd cloud-functions && CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o bili-bot ./index.go

核心功能说明

直播场控架构

系统采用 事件驱动 + 优先级队列 架构处理直播间实时事件:

┌─────────────┐ ┌─────────────────┐ ┌──────────────────┐ │ HTTP API │────▶│ LiveManager │────▶│ WebSocket Client │ │ 启停/查询 │ │ 全局单例 │ │ 每房间独立连接 │ └─────────────┘ └─────────────────┘ └──────────────────┘ │ ▼ ┌─────────────────────┐ │ 优先级消息队列 │ │ P1(高) P2(中) P3(低) │ └─────────────────────┘ │ ▼ ┌─────────────────────┐ │ CNB AI 大模型调用 │ │ 生成回复 → 发送弹幕 │ └─────────────────────┘

事件优先级规则

优先级事件类型处理策略
P1 高@机器人的弹幕、价值 ≥500 元的礼物立即单独处理
P2 中普通弹幕、普通礼物立即单独处理
P3 低用户进房、点赞满10条或每2秒批量合并处理

关键技术特性

  • 内存状态管理:所有直播间运行态存储在内存中,应用重启后自动停止,无需持久化
  • 防循环回复:优先使用B站唯一昵称过滤自身弹幕,兜底使用 UID 判断
  • 弹幕限制:AI 回复默认最长 40 汉字(B站官方弹幕上限),支持动态配置长度,超长自动分割为多条发送
  • 限流控制:每直播间 1 条/秒的发送频率限制(令牌桶算法),消息处理并发控制,避免触发AI接口限流
  • 独立上下文:每间维护独立的 AI 对话上下文(最近50轮历史消息)
  • 分层提示词体系:提示词优先级:直播间自定义配置 > 全局默认配置 > 系统内置默认配置,空字段自动继承上层配置
  • Cookie 自动持久化:登录时存入 SQLite,后续请求自动从 DB 加载
  • JWT 密钥持久化:未配置环境变量时自动生成密钥并持久化到数据库,服务重启不失效
  • 安全校验:删除账号/直播间前自动校验依赖关系,避免误删导致系统无法登录或场控异常
  • 敏感配置脱敏:密钥类配置项接口返回时自动脱敏,避免明文泄露

API 接口文档

公开接口(无需认证)

方法路径说明
GET/api/v1/auth/qrcode/generate生成管理端登录二维码
POST/api/v1/auth/login/qrcode扫码登录(返回 JWT 双令牌)

业务接口(需 JWT 认证)

配置管理

方法路径说明
GET/api/v1/bli/config获取全部全局配置
PUT/api/v1/bli/config批量更新全局配置
GET/api/v1/bli/config/default-prompt获取系统默认提示词配置
POST/api/v1/bli/ai/expand-promptAI扩写提示词内容

机器人账号

方法路径说明
GET/api/v1/bli/qrcode/generate生成 Bot 登录二维码
POST/api/v1/bli/qrcode/login查询 Bot 登录状态
GET/api/v1/bli/accounts获取全部 Bot 账号列表
DELETE/api/v1/bli/account/{id}删除指定 Bot 账号
PATCH/api/v1/bli/account/{id}/auth-allowed更新账号允许登录状态
POST/api/v1/bli/account/{uid}/send-danmaku使用指定机器人发送测试弹幕到目标直播间

主播/直播间

方法路径说明
POST/api/v1/bli/anchor/info/by/code通过身份码新增/更新主播
GET/api/v1/bli/anchor获取全部主播列表
DELETE/api/v1/bli/anchor/{id}删除主播
PUT/api/v1/bli/anchor/{id}/bot绑定/解绑场控机器人
POST/api/v1/bli/room/{id}/start启动直播间场控
POST/api/v1/bli/room/{id}/stop停止直播间场控
GET/api/v1/bli/room/{id}/status查询场控运行状态
GET/api/v1/bli/room/status/list所有运行中的直播间ID列表
PUT/api/v1/bli/room/{id}/prompt更新直播间AI提示词配置

其他

路径用途
/swaggerSwagger API 文档(Scalar UI)
/*静态文件服务(前端页面)

数据库设计

使用 SQLite + GORM,三张核心表:

Bot 表 — 机器人账号

字段类型说明
IDuint64 PK自增主键
Uidint64 UNIQUEB站 UID
InfoJSON用户详细信息
AuthAllowedbool是否允许登录管理后台,至少保留一个开启的账号
CookiesJSON登录 Cookie 凭证

Room 表 — 直播间

字段类型说明
IDuint64 PK自增主键
RoomIdint64 UNIQUEB站房间号
BotIdint64 FK关联的机器人 UID
Codestring UNIQUEB站身份码
InfoJSON主播详细信息
Sanintsan值
Levelint等级
PromptBotRoletext直播间自定义AI角色设定,空则使用全局默认
PromptAnchorStyletext直播间自定义主播风格/直播内容设定,空则使用全局默认
PromptCustomRulestext直播间自定义回复规则,空则使用全局默认

Config 表 — 全局配置(键值对)

字段类型说明
Keystring UNIQUE配置键名
Valuetext配置值
Descstring配置描述

预置配置项:

  • CNB_TOKEN — CNB 平台 API 访问令牌
  • CNB_REPO_SLUG — CNB 平台仓库标识
  • DANMAKU_MAX_LENGTH — 弹幕最大长度(汉字,默认40,B站官方上限)
  • GLOBAL_PROMPT_BOT_ROLE — 全局默认AI角色设定
  • GLOBAL_PROMPT_ANCHOR_STYLE — 全局默认主播风格/直播内容设定
  • GLOBAL_PROMPT_CUSTOM_RULES — 全局默认自定义回复规则

关系图:

Room (N) ──BotId──> (1) Bot 一个 Bot 可服务多个直播间 Room.Code ──身份码──> B站开放平台 Bot.Cookies ──凭证──> B站 API 调用 Config.Key/Value ──> CNB AI 平台集成

常用命令

前端

npm run dev # 启动开发服务器 (localhost:3000) npm run build # TypeScript 类型检查 + 生产构建 npm run type-check # 仅执行类型检查 npm run lint # ESLint 检查并自动修复 npm run preview # 预览生产构建结果

后端(cloud-functions 目录下)

go run index.go # 本地运行 go test ./... # 运行全部测试 go build -o bili-bot ./index.go # 构建二进制文件 gf gen ctrl # 新增API定义后自动生成控制器代码 gf gen service # 编写完 logic 后同步 service 接口定义

贡献指南

欢迎参与贡献!无论是 Bug 修复、新功能开发还是文档改进,都非常感谢。

详细的贡献规范、开发流程和常见贡献方向请参考 CONTRIBUTING.md 文档。

问题反馈

如果发现 Bug 或有功能建议,请通过 Issue 提交,尽量包含以下信息:

  • 复现步骤
  • 期望行为 vs 实际行为
  • 运行环境(系统版本、Node/Go 版本)
  • 相关日志或截图

许可证

基于 MIT License 开源。

Copyright (c) 2026 xqitw

About

高效稳定的 Bilibili 直播间 AI 场控机器人管理系统,基于 Vue 3 + GoFrame 构建,支持多直播间并发管理、AI 智能弹幕互动、优先级消息队列处理。

example哔哩哔哩直播AIbotCNB
bili-botrepo-named
Language
Go47.9%
Vue43.8%
TypeScript4.9%
CSS2.6%
Others0.8%