身为一个群组机器人,怎么能没有消息推送?所以针对不同的群组肯定要订阅不同的消息,好在 koishi 是有现成的 RSS 订阅消息插件的,可以省下很多功夫。
一、追加 RSS 订阅插件
直接搜索 RSS,有一个 rss-owl 的插件,直接下载。
追加然后去启动,启动好了以后,会发现它有默认的 RSS 订阅地址,但是用的人很多,基本上用不了,所以需要自己搭建一个。
二、自建 RSSHub
公共实例不稳定/限流是常态,尤其是 B 站相关路由。你要稳定订阅,最靠谱就是自建 RSSHub,并给它配 puppeteer(browserless,无头浏览器)。由于自己在搭建 napcat 和 koishi 的时候本身就使用的 Docker ,所以直接在 docker-compose.yml 里追加两个服务就行:
1 | .... |
然后重启容器,
1 | docker compose up -d |
成功后直接在本地确认是否可用,
1 | curl -I "http://127.0.0.1:1200/healthz" |
切换到 koishi 容器里,确认是否能内网访问,
1 | docker exec -it koishi sh |
在对应的 QQ 群里追加订阅,(需要注意的是,私聊是没有用的,必须在群里测试)
1 | rss http://rsshub:1200/bilibili/user/dynamic/598504181 -t 鹰角网络B站动态 -i content |
测试一下,能正常出结果,就成功了。
1 | rss -l |
关于插件设置中的仓库,请参考 koishi-plugin-rss-owl
三、容易遇到的问题
如果你的机器人加了多个群,且多个群有相同的推送,经常会出现无法推送的情况,错误形如以下:
1 | 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承载无数心意的今天,繁星与我们一 |
先创建默认的 cache 目录存放缓存图片,否则后续操作会报错,
1 | docker exec -it koishi sh -lc 'mkdir -p /koishi/data/cache/rssOwl && ls -al /koishi/data/cache' |
修改容器文件配置,让 napcat 也能共享缓存
1 | napcat: |
这三个位置改成所展示的这样,
再重启容器,
1 | docker compose up -d |
就能杜绝绝大部分问题,BASE64 的图片消息会导致 log 过长,本身也不适合 Debug ,还是改过来比较好。
四、账号提权
对于 RSS 命令,默认只能在群里执行,如果没配权限的话,那就会变成所有人都能随意添加订阅链接,故需要指定高权限账号,不过不推荐给自己过高的权限,一切危险操作都只在 Web 后台里执行最佳,给自己一个 2 的权限就行。
首先找到数据库,然后找到 binding ,pid 是自己的 QQ 账号,找到自己那条,然后看 aid,比如我这里是 1。
找到以后,去看 user 表,找到 id 为 1 的账号,然后手动把 authority 改为你想要的权限,我这里直接设置为了 2,记得点击应用操作。
插件和写 SQL 都太麻烦,这样反而容易点。