Skip to main content

NoneBot2 插件:B 站视频解析与直播开播提醒

Project description

nonebot-plugin-bili

Python NoneBot2 OneBot License CI PyPI

NoneBot2 插件:自动识别 B 站视频链接并尝试下载发送,支持直播开播 / 下播 / 标题变更提醒。

免责声明:仅供学习与自用。请遵守哔哩哔哩服务条款与当地法律法规,勿用于未授权传播他人内容。本插件与哔哩哔哩无官方关联;依赖 Web 接口与 WBI 签名策略,可能随时失效,不保证长期可用。作者不对滥用、账号风控、版权纠纷或服务中断承担责任。使用本插件即表示你理解并自行承担相关风险。

功能

  • 识别群聊 / 私聊中的 BV 号、b23.tv 短链与部分分享卡片
  • 封面消息(标题 / 封面图 / 链接)与视频可通过 BILI_SEND 可选发送
  • 视频过大 / 充电专属 / 风控无流等场景给出提示并跳过下载
  • 群冷却、群黑名单、本地缓存与过期清理
  • 可选 NapCat 缓存目录映射,跳过 WS 流式上传
  • 超级管理员私聊订阅直播,轮询状态并推送开播 / 下播 / 改标题

环境要求

安装

使用 nb-cli

nb plugin install nonebot-plugin-bili

使用 pip / uv

pip install nonebot-plugin-bili
# 或
uv add nonebot-plugin-bili

从 Git 安装

uv add git+https://github.com/qianxuu/nonebot-plugin-bili
# 或指定本地路径
uv add /path/to/nonebot-plugin-bili

加载:

[tool.nonebot]
plugins = ["nonebot_plugin_bili"]

或:

nonebot.load_plugin('nonebot_plugin_bili')

本地开发

git clone https://github.com/qianxuu/nonebot-plugin-bili.git
cd nonebot-plugin-bili
uv sync --group dev

支持的视频输入

  • BV1xxxxxxxxx
  • https://www.bilibili.com/video/BV1...
  • https://b23.tv/xxxxxxx
  • 部分含 BV / 短链的分享卡片

直播命令

超级管理员私聊

命令 说明
订阅直播 <uid> <群号> 订阅主播开播提醒到指定群
取消订阅直播 <uid> <群号> 取消订阅
直播订阅列表 查看全部订阅

数据保存在机器人工作目录 data/bili/bili.db

配置

复制 .env.example 到机器人项目的 .env,字段名对应 BILI_*(大小写不敏感)。

配置项 必需 默认 说明
BILI_NAPCAT_CACHE_DIR NapCat 容器内缓存目录
BILI_GROUP_BLACKLIST [] 群黑名单,JSON 数组
BILI_SEND ["cover", "video"] 可选发送内容,JSON 数组:cover(标题+封面图+链接)、video(视频)
BILI_MAX_VIDEO_SIZE_MIB 50 跳过下载的视频大小上限(MiB)
BILI_GROUP_CD_SECONDS 60 同群同 BV 冷却秒数,0 表示不冷却
BILI_CACHE_RETENTION_HOURS 24 本地缓存保留小时数
BILI_LIVE_POLL_INTERVAL 15 直播状态轮询间隔(秒)

完整示例

BILI_NAPCAT_CACHE_DIR=/app/.config/QQ/NapCat/temp
BILI_GROUP_BLACKLIST=["123456789", "987654321"]
BILI_SEND=["cover", "video"]
BILI_MAX_VIDEO_SIZE_MIB=50
BILI_GROUP_CD_SECONDS=60
BILI_CACHE_RETENTION_HOURS=24
BILI_LIVE_POLL_INTERVAL=15

BILI_SEND 示例:

  • ["cover", "video"]:先发标题 / 封面图 / 链接,再下载发送视频(默认)
  • ["cover"]:只发标题、封面图与链接,不下载视频
  • ["video"]:跳过封面消息,直接下载发送视频
  • []:不发送任何内容

配置 BILI_NAPCAT_CACHE_DIR 时,请确保机器人进程的 cache/bili 与 NapCat 该目录为同一挂载或可互相访问。

行为说明

  • 同一 bvid 在同一群默认冷却 60 秒;配置为 0 表示不冷却
  • 视频超过默认 50 MiB、充电专属、无有效流地址、风控 v_voucher 时跳过下载并提示
  • 本地视频缓存:cache/bili/{bvid}.mp4(相对机器人工作目录)
  • 下载前按保留时长清理过期缓存
  • 直播状态默认每 15 秒轮询;开播后通过 WebSocket 采集观看 / 同接
  • 解析 / 发送失败等情况写日志;部分场景会向用户提示前往 B 站观看

目录结构

nonebot-plugin-bili/
├── src/nonebot_plugin_bili/
│   ├── __init__.py   # 元数据、启停钩子
│   ├── video.py      # 视频链接识别与发送
│   ├── live.py       # 直播订阅与轮询推送
│   ├── live_ws.py    # 直播间 WebSocket 采集
│   ├── api.py        # 视频 / 直播接口
│   ├── client.py     # HTTP 客户端与 WBI 会话
│   ├── wbi.py        # WBI 签名
│   ├── config.py     # 配置模型
│   ├── database.py   # 订阅与会话 SQLite
│   ├── download.py   # 分片下载与缓存
│   ├── upload.py     # NapCat 流式上传
│   └── utils.py
├── tests/
├── .env.example
├── CHANGELOG.md
├── LICENSE
├── pyproject.toml
└── README.md

故障排查

现象 可能原因 处理
WBI / v_voucher 签名或风控 查看日志,稍后重试
视频不下载 过大 / 专属 / 流地址失败 看消息提示与日志
发送慢或失败 未配置 NapCat 映射 配置 BILI_NAPCAT_CACHE_DIR 与挂载
群内不响应 黑名单或冷却中 检查相关配置
直播不推送 未订阅 / 非超管 / 调度器未加载 检查命令权限与 apscheduler

已知限制

  • 依赖 B 站 Web 接口与 WBI 签名,策略变更或风控时可能失效,不承诺长期可用
  • 部分视频(大会员 / 充电 / 地区限制等)无法下载,仅发送信息与提示
  • 发送视频依赖具体 OneBot 实现能力(如 NapCat 缓存映射或 upload_file_stream
  • 直播订阅仅限超级管理员私聊操作
  • 大视频受 BILI_MAX_VIDEO_SIZE_MIB 与宿主上传能力共同限制

开发

uv sync --group dev
uv run pytest
uv run ty check src/nonebot_plugin_bili tests
uv run ruff check .
uv run ruff format .
uv build
uv run twine check dist/*

安全提示

  • 勿在仓库、Issue、截图中泄露 Cookie、机器人 token 或其他凭证
  • 生产环境建议限制群范围(黑名单 / 冷却),避免被刷链导致带宽与风控压力
  • cache/bilidata/bili 可能包含媒体与订阅数据,请勿公开分享

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nonebot_plugin_bili-0.2.0.tar.gz (32.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nonebot_plugin_bili-0.2.0-py3-none-any.whl (28.5 kB view details)

Uploaded Python 3

File details

Details for the file nonebot_plugin_bili-0.2.0.tar.gz.

File metadata

  • Download URL: nonebot_plugin_bili-0.2.0.tar.gz
  • Upload date:
  • Size: 32.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for nonebot_plugin_bili-0.2.0.tar.gz
Algorithm Hash digest
SHA256 b7400e074af860f18b6cba3e49f5973eaeea27c611f205c8309aa741e73c5837
MD5 cdcb3846c5e089f1ecfd771b4c9d6756
BLAKE2b-256 963b0be7bec2cbafc1e3d69910988f1706eb9712415d722e0801614defd02638

See more details on using hashes here.

File details

Details for the file nonebot_plugin_bili-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: nonebot_plugin_bili-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 28.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for nonebot_plugin_bili-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cc93ef98cfb9d3b6106501d39d69a2ce13cc12f3b884148068060518b96a276e
MD5 c8d0b27609103d527bd22923520cf474
BLAKE2b-256 c16ae3d0b63180c84164ba2bb6be6a4814eb1c3594a39a40ebc269be37f71198

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page