Skip to main content
logo

✨ nonebot-plugin-ifollow ✨

LICENSE pypi python uv
ruff pre-commit

📖 介绍

订阅抖音和 B 站作者,有新作品或动态时推到群聊 / 私聊。插件只负责发现更新,媒体交给 ParseHub 解析、下载并发送。

  • 多平台:抖音(主页 / 短链 / sec_user_id)、B 站(主页 / BV / AV / b23.tv)
  • 按会话独立:每个群 / 私聊各自记录推送游标,同一个作者可以订阅到多个会话
  • 不补发历史:首次订阅只记录当前最新一条,之后只推新内容
  • 失败可控:作者级退避、作品级重试 3 次、目标群不可用只跳过该会话
  • 下载前控体积:视频类媒体先探远端体积,超过上限直接不下载
  • 零配置可跑:抖音匿名即可轮询;B 站不配 Cookie 时只推视频(固定 720p)

💿 安装

使用 nb-cli 安装:

nb plugin install nonebot-plugin-ifollow --upgrade

使用 uv 安装:

uv add nonebot-plugin-ifollow

安装仓库 main 分支:

uv add git+https://github.com/ByteColtX/nonebot-plugin-ifollow@main

用 uv 安装后还需要在 nonebot2 项目根目录的 pyproject.toml 里注册插件(nb-cli 会自动完成这一步):

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

⚙️ 配置

在 nonebot2 项目的 .env 文件中添加下表配置,全部可选:

配置项 必填 默认值 说明
IFOLLOW_SUB_INTERVAL 否 1800 每个作者的轮询周期(秒),最小 30
IFOLLOW_SUB_MAX_ITEMS 否 5 每作者每 feed 每轮最多补发的作品数,范围 1-50
IFOLLOW_MEDIA_MAX_MB 否 100 单个媒体体积上限(MB),视频类会在下载前先探测
IFOLLOW_USE_BASE64 否 false 媒体编码成 base64 发送,仅协议端与插件不同机时需要
IFOLLOW_DOUYIN_COOKIE 否 无 抖音网页 Cookie,匿名即可轮询,通常无需填写
IFOLLOW_BILIBILI_COOKIE 否 无 B 站 Cookie(SESSDATA);配置后才会轮询动态
  • 周期:每个作者按自己的节奏到期,订阅 30 个作者也不会互相拖慢;扫描间隔取周期的四分之一 (15 秒 ~ 5 分钟),抓取并发 4。默认 30 分钟按「多数作者月更」定,34 个作者约 1600 次请求/天。
  • 补发上限:不是页大小。停机很久后回来最多补发最新 5 条,更早的跳过(日志里有 warning)。
  • 媒体传输:默认把本地路径(file://)交给协议端,插件不读字节也不编码;协议端在另一台机器、 读不到同一路径时才开 IFOLLOW_USE_BASE64。
  • 旧配置:IFOLLOW_SUBSCRIBE_INTERVAL / IFOLLOW_SUBSCRIBE_COUNT 已废弃且不再读取,请改成新名字。
  • 数据格式:订阅数据为 v3,不兼容旧版本;升级需清空插件数据目录里的 subscriptions.json 并重新订阅。

抖音接口要求 a_bogus 签名 + 自动注册的 ttwid,匿名即可轮询,IFOLLOW_DOUYIN_COOKIE 只是加强项 (其中的 ttwid 会被自动注册值覆盖)。

B 站作者资料与视频投稿走 APP 接口,匿名可用;动态没有稳定的匿名接口,只有配置了 IFOLLOW_BILIBILI_COOKIE 才会轮询动态。获取方式:浏览器登录后按 F12 → Network → 复制请求头里的整段 Cookie。Cookie 等同于账号控制权,建议用小号,不要提交到仓库。

🎉 使用

指令表

指令 权限 需要@ 范围 说明
爱播帮助 群员 否 群聊、私聊 查看帮助
爱播订阅 <作者主页或作品链接> 群员 否 群聊、私聊 订阅一个抖音或 B 站作者
爱播订阅列表 群员 否 群聊、私聊 查看当前会话的订阅
爱播取消订阅 <序号、作者 ID、昵称或链接> 群员 否 群聊、私聊 取消一个作者订阅
爱播状态 超级用户 否 群聊、私聊 查看轮询健康度与各作者状态

订阅作者

爱播订阅 https://www.douyin.com/user/MS4wLjABAAAA...
爱播订阅 https://v.douyin.com/作者主页短链/
爱播订阅 MS4wLjABAAAA...
爱播订阅 https://space.bilibili.com/123456
爱播订阅 https://www.bilibili.com/video/BV1xxxxxxxxx

也可以引用含链接的消息后发送 爱播订阅(需要适配器支持 get_msg)。

首次订阅只记录当前最新作品或动态,不补发历史;之后发现新内容时,插件把作品链接交给 ParseHub 解析、下载并发送到订阅会话。

管理订阅

取消订阅优先在本地匹配:序号、作者 ID、抖音号 / B 站 UID、主页链接里的 ID、唯一昵称都不联网, 作者注销或接口被风控时也能取消;只有短链和作品链接才请求平台。昵称重名请改用序号。

失败处理

  • 作者不存在或已注销 —— 停用该作者(重启后重新尝试),爱播状态 里标「已停用」;
  • 作者接口暂时失败(网络、风控、限流)—— 该作者指数退避,30 秒起、上限 5 分钟;
  • 作品已删除、不可见、平台不支持 —— 立即放弃该作品并推进游标;
  • 网络、限流、下载失败 —— 下个周期重试,连续 3 次后放弃并推进游标;
  • 机器人被踢出群、群不存在 —— 只跳过该会话,不影响同一作品的其他会话。

订阅或取消失败时只回一句人话原因、一条建议和一个错误码(如 E-DY-RISK),不会把异常堆栈发到群里; 把错误码贴出来就能在日志里定位到完整堆栈。

🛠️ 开发

uv sync
uv run pytest -q                # 只跑测试
uv run poe test                 # 覆盖率门禁 90%(CI 同款)
uv run ruff check . && uv run ruff format --check .
uv run basedpyright

代码结构

src/nonebot_plugin_ifollow/
├── __init__.py / app.py / settings.py    # 元数据、装配、唯一读配置的地方
├── commands.py / formatting.py / reply.py / style.py
├── platforms.py / adapters.py / pagination.py / errors.py
├── douyin_platform.py / douyin_abogus.py
├── bilibili_platform.py
├── media.py / douyin_media.py / bilibili_media.py
├── models.py                             # 订阅存储(v3,批量写)
└── poller.py / delivery.py / failures.py / status.py

主要模块旁有 *.SPEC.md(轮询子系统、存储、媒体、抖音 / B 站拉取与发送),记录边界、契约与 决策;AGENTS.md 是给 coding agent 的约定。

📄 许可

MIT

🙏 致谢

Metadata

Release files for nonebot-plugin-ifollow 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nonebot-plugin-ifollow 2.0.0
File Size Uploaded Provenance
nonebot_plugin_ifollow-2.0.0.tar.gz 58.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for nonebot-plugin-ifollow 2.0.0
File Interpreter ABI Platform
nonebot_plugin_ifollow-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 131.2 kB

Release files / nonebot_plugin_ifollow-2.0.0.tar.gz

Download URL nonebot_plugin_ifollow-2.0.0.tar.gz
Size 58.6 kB
Tags Source
SHA-256 checksum
How to use checksums
04f13d7de6cbdf2bce9096ecf581bdac1a4153f6da3b486387efd84d4ff22862
BLAKE2b-256 checksum
How to use checksums
cb6068d9bf31a6c51e4c49eb7e3573c3ae5cd3a822bc865ab6815cf63dca4127
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / nonebot_plugin_ifollow-2.0.0-py3-none-any.whl

Download URL nonebot_plugin_ifollow-2.0.0-py3-none-any.whl
Size 72.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3a32f6f5cf7b484d2f0bcf11d13b0c4afdf2ed0e9fc6813fab1701a66d58d25b
BLAKE2b-256 checksum
How to use checksums
24807092edf2924dd797fe3a5918d8639899dd5ee3d55d32c0bcfce5e0b19312
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for nonebot-plugin-ifollow 2.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page