rssbot
一个使用 Go 编写的 RSS -> Telegram Channel 推送机器人。程序会定时拉取 RSS/Atom feed,记录已处理的条目,只把新的 item 推送到指定的 Telegram channel。项目可直接使用 Docker / Docker Compose 部署。
功能
- 支持多个 RSS 任务并发轮询
- 首次启动只建立基线,不回灌历史消息
- 本地持久化已发送条目,容器重启后不会重复推送
- 自定义消息模板,支持
{title}、{link}、{description}、{published}占位符
配置
复制 config-example.yaml 为 config.yaml,填入你的机器人和频道信息。
bot-token: "123456:telegram-bot-token"
state-file: "data/state.json"
jobs:
- rss-url: "https://example.com/rss"
channel-id: "@your_channel"
post-format: "New article: {title}\n{link}"
check-interval: 300
配置说明:
bot-token: Telegram Bot Tokenstate-file: 已发送消息状态文件,默认data/state.jsonjobs[].rss-url: RSS/Atom 地址jobs[].channel-id: 频道 ID 或@channel_namejobs[].post-format: 推送内容模板jobs[].check-interval: 轮询间隔,单位秒
Telegram 准备
- 使用
@BotFather创建机器人并拿到 token - 将机器人加入目标 channel
- 给机器人授予
Post Messages权限 - 在配置里填入 channel 的用户名或数值 ID
本地运行
go mod tidy
go run .
默认读取当前目录下的 config.yaml。也可以通过环境变量指定:
RSSBOT_CONFIG=./config.yaml go run .
Docker 部署
Docker Compose
cp config-example.yaml config.yaml
docker compose up -d --build
纯 Docker
docker build -t rssbot .
docker run -d \
--name rssbot \
--restart unless-stopped \
-e RSSBOT_CONFIG=/app/config.yaml \
-v $(pwd)/config.yaml:/app/config.yaml:ro \
-v $(pwd)/data:/app/data \
rssbot
说明
- 程序首次读取某个 feed 时会把当前已有条目标记为已见,不会一次性推送历史内容
- 状态文件建议挂载到宿主机目录或 Docker volume
- 如果某个 feed 拉取失败,程序会在下一轮继续重试
Description
Languages
Go
96.5%
Dockerfile
3.5%