身为一个群组机器人,怎么能没有消息推送?所以针对不同的群组肯定要订阅不同的消息,好在 koishi 是有现成的 RSS 订阅消息插件的,可以省下很多功夫。

一、追加 RSS 订阅插件

直接搜索 RSS,有一个 rss-owl 的插件,直接下载。

追加然后去启动,启动好了以后,会发现它有默认的 RSS 订阅地址,但是用的人很多,基本上用不了,所以需要自己搭建一个。

二、自建 RSSHub

公共实例不稳定/限流是常态,尤其是 B 站相关路由。你要稳定订阅,最靠谱就是自建 RSSHub,并给它配 puppeteer(browserless,无头浏览器)。由于自己在搭建 napcatkoishi 的时候本身就使用的 Docker ,所以直接在 docker-compose.yml 里追加两个服务就行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
....
# 服务3: RSSHub
rsshub:
image: diygod/rsshub:latest
container_name: rsshub
restart: always
environment:
- TZ=Asia/Shanghai
# 让 RSSHub 使用 browserless 提供的 Chrome(bilibili 动态路由经常需要)
- PUPPETEER_WS_ENDPOINT=ws://browserless:3000
ports:
# 只绑定到本机,避免对公网暴露(Koishi 走内网 http://rsshub:1200 访问)
- "127.0.0.1:1200:1200"
depends_on:
- browserless

# 服务4: browserless
browserless:
image: browserless/chrome:latest
container_name: browserless
restart: always
environment:
- TZ=Asia/Shanghai

然后重启容器,

1
docker compose up -d

成功后直接在本地确认是否可用,

1
curl -I "http://127.0.0.1:1200/healthz"

切换到 koishi 容器里,确认是否能内网访问,

1
2
3
4
docker exec -it koishi sh

curl -I "http://rsshub:1200/healthz"
curl -L -I "http://rsshub:1200/bilibili/user/dynamic/598504181"

在对应的 QQ 群里追加订阅,(需要注意的是,私聊是没有用的,必须在群里测试)

1
rss http://rsshub:1200/bilibili/user/dynamic/598504181 -t 鹰角网络B站动态 -i content

测试一下,能正常出结果,就成功了。

1
rss -l

关于插件设置中的仓库,请参考 koishi-plugin-rss-owl

三、容易遇到的问题

如果你的机器人加了多个群,且多个群有相同的推送,经常会出现无法推送的情况,错误形如以下:

1
2
3
4
5
6
7
2025-12-25 09:47:08 [W] bot Error: Timeout with request send_group_forward_msg, args: {"group_id":XXXXXXXXX,"messages":[{"type":"node","data":{"name":"XXXXXXX","uin":"XXXXXX","content":[{"type":"text","data":{"text":"《「星语共愿」特别纪念PV》\n「星语共愿」特别纪念PV承载无数心意的今天,繁星与我们一 

...

at Timeout._onTimeout (/koishi/node_modules/koishi-plugin-adapter-onebot/lib/index.js:676:16)
at listOnTimeout (node:internal/timers:581:17)
at process.processTimers (node:internal/timers:519:7)

先创建默认的 cache 目录存放缓存图片,否则后续操作会报错,

1
docker exec -it koishi sh -lc 'mkdir -p /koishi/data/cache/rssOwl && ls -al /koishi/data/cache'

修改容器文件配置,让 napcat 也能共享缓存

1
2
3
4
5
napcat:
volumes:
- ./napcat/data:/app/.config/QQ
- ./napcat/config:/app/napcat/config
- ./koishi/data/cache/rssOwl:/koishi/data/cache/rssOwl:ro

这三个位置改成所展示的这样,

再重启容器,

1
docker compose up -d

就能杜绝绝大部分问题,BASE64 的图片消息会导致 log 过长,本身也不适合 Debug ,还是改过来比较好。

四、账号提权

对于 RSS 命令,默认只能在群里执行,如果没配权限的话,那就会变成所有人都能随意添加订阅链接,故需要指定高权限账号,不过不推荐给自己过高的权限,一切危险操作都只在 Web 后台里执行最佳,给自己一个 2 的权限就行。

首先找到数据库,然后找到 binding ,pid 是自己的 QQ 账号,找到自己那条,然后看 aid,比如我这里是 1。

找到以后,去看 user 表,找到 id 为 1 的账号,然后手动把 authority 改为你想要的权限,我这里直接设置为了 2,记得点击应用操作。

插件和写 SQL 都太麻烦,这样反而容易点。


本站总访问量