简称 rss2tg,用于将自定义 RSS 地址,字段,刷新时间里的相关帖子即时发送到自定义 TG 用户或频道,省去你刷帖子的时间
支持 AMD64/ARM64
镜像大小 17M,内存占用 10M
——By drfyup
确保已安装 Docker 和 Docker Compose(方法自寻)。
克隆或下载项目代码到本地。
git clone https://github.com/3377/rss2tg.git
进入项目目录。
编辑 docker-compose.yml 文件,修改环境变量:
-- 进入任意目录或直接当前目录,新建 docker-compose.yml 文件,填入以下内容
version: "3"
services:
rss2tg:
container_name: rss2tg
image: drfyup/rss2tg:latest
volumes:
- ./config/config.yaml:/app/config/config.yaml
- ./data:/app/data
environment:
- TELEGRAM_BOT_TOKEN=your_bot_token_here
- TELEGRAM_USERS=user_id_1,user_id_2
- TELEGRAM_CHANNELS=@channel_1,@channel_2
- TZ=Asia/Shanghai
restart: unless-stopped
将your_bot_token_here 替换为您的 Telegram Bot Token,user_id_1,user_id_2 替换为您要接收消息的用户 ID,@channel_1,@channel_2 替换为您要发送消息的频道名称。
docker-compose up -d
docker pull drfyup/rss2tg:latest
docker run -d \
--name rss2tg \
-v $(pwd)/config:/app/config \
-v $(pwd)/data:/app/data \
-e TELEGRAM_BOT_TOKEN=your_bot_token_here \
-e TELEGRAM_USERS=user_id_1,user_id_2 \
-e TELEGRAM_CHANNELS=@channel_1,@channel_2 \
-e TELEGRAM_API_URL=http://xxx.deno.dev/telegram \
-e TZ=Asia/Shanghai \
--restart unless-stopped \
drfyup/rss2tg:latest
请替换环境变量中的相应值。
程序支持通过 YAML 配置文件或环境变量进行配置。配置文件位于 /app/config/config.yaml。如果该文件不存在,程序将使用环境变量进行初始配置。
环境变量读取优先级高于配置文件。
配置文件示例:
telegram:
bot_token: "your_bot_token_here"
users:
- "user_id_1"
- "user_id_2"
channels:
- "@channel_1"
- "@channel_2"
adminuser: # 管理员用户配置(可选)
- "admin_id_1"
- "admin_id_2"
rss:
- urls:
- "https://example.com/feed1.xml"
- "https://example.com/feed2.xml"
interval: 300
keywords:
- "keyword1"
- "keyword2"
group: "Group1"
allow_part_match: true # 是否允许部分关键词匹配
| 环境变量 | 必填 | 说明 | 示例 |
|---|---|---|---|
TELEGRAM_BOT_TOKEN |
✅ | Telegram Bot 的 API Token | 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw |
TELEGRAM_USERS |
✅ | 接收消息的用户 ID,多个用逗号分隔 | 123456789,987654321 |
TELEGRAM_CHANNELS |
❌ | 接收消息的频道,多个用逗号分隔 | @channel1,@channel2 |
TELEGRAM_ADMIN_USERS |
❌ | 管理员用户 ID,多个用逗号分隔 | 123456789,987654321 |
TELEGRAM_API_URL |
❌ | 自定义 Telegram API 服务器地址 | http://fyapi.deno.dev/telegram |
TZ |
❌ | 时区设置 | Asia/Shanghai |
新格式(推荐):使用数字后缀,从 1 开始
# 第一个 RSS 源
RSS_URLS_1=https://example1.com/rss,https://example2.com/rss
RSS_KEYWORDS_1=关键词1,关键词2
RSS_GROUP_1=技术资讯
RSS_INTERVAL_1=300
RSS_ALLOW_PART_MATCH_1=true
# 第二个 RSS 源
RSS_URLS_2=https://news.example.com/rss
RSS_KEYWORDS_2=新闻,热点
RSS_GROUP_2=新闻资讯
RSS_INTERVAL_2=600
RSS_ALLOW_PART_MATCH_2=false
# 第三个 RSS 源(最多支持 10 个)
RSS_URLS_3=https://tech.example.com/feed
RSS_GROUP_3=科技动态
RSS_INTERVAL_3=900
# 不设置关键词表示推送所有文章
旧格式(兼容):使用分号分隔多个 RSS 组
RSS_URLS=https://example1.com/rss,https://example2.com/rss;https://news.example.com/rss
RSS_KEYWORDS_0=关键词1,关键词2 # 对应第一组
RSS_KEYWORDS_1=新闻,热点 # 对应第二组
RSS_GROUP_0=技术资讯
RSS_GROUP_1=新闻资讯
单个 Webhook(向后兼容):
WEBHOOK_ENABLED=true
WEBHOOK_URL=http://your-message-pusher:3000/webhook/your_webhook_id
WEBHOOK_TIMEOUT=10
WEBHOOK_RETRY_COUNT=3
多个 Webhooks(推荐):使用数字后缀,从 1 开始
# 第一个 webhook
WEBHOOK_URL_1=http://server1:3000/webhook/webhook_id_1
WEBHOOK_NAME_1=message-pusher-1
WEBHOOK_ENABLED_1=true
WEBHOOK_TIMEOUT_1=10
WEBHOOK_RETRY_COUNT_1=3
# 第二个 webhook
WEBHOOK_URL_2=http://server2:3000/webhook/webhook_id_2
WEBHOOK_NAME_2=message-pusher-2
WEBHOOK_ENABLED_2=true
WEBHOOK_TIMEOUT_2=15
WEBHOOK_RETRY_COUNT_2=2
# 第三个 webhook(可选,最多支持 10 个)
WEBHOOK_URL_3=http://backup:3000/webhook/backup_id
WEBHOOK_NAME_3=backup-webhook
WEBHOOK_ENABLED_3=false # 可以暂时禁用
WEBHOOK_TIMEOUT_3=5
WEBHOOK_RETRY_COUNT_3=1
详细配置请参考 config/config.yaml.example:
# Telegram 配置
telegram:
bot_token: "your_telegram_bot_token"
users:
- "123456789"
channels:
- "@your_channel"
adminuser:
- "123456789"
# 单个 Webhook 配置(向后兼容)
webhook:
enabled: false
url: "http://your-message-pusher:3000/webhook/your_webhook_id"
timeout: 10
retry_count: 3
# 多个 Webhooks 配置(推荐使用)
webhooks:
- name: "message-pusher-1"
enabled: true
url: "http://server1:3000/webhook/webhook_id_1"
timeout: 10
retry_count: 3
- name: "message-pusher-2"
enabled: true
url: "http://server2:3000/webhook/webhook_id_2"
timeout: 15
retry_count: 2
- name: "backup-webhook"
enabled: false # 可以暂时禁用某个 webhook
url: "http://backup:3000/webhook/backup_id"
timeout: 5
retry_count: 1
# RSS 订阅配置
rss:
- urls:
- "https://example.com/rss"
- "https://example2.com/feed"
interval: 300 # 检查间隔(秒)
keywords:
- "关键词1"
- "关键词2"
group: "技术资讯"
allow_part_match: true # 是否允许部分匹配
现在支持通过 webhook 将消息推送到 message-pusher,实现多平台消息推送:
✅ 多 Webhook 支持:可以同时配置多个 webhook 地址,实现多平台并发推送
✅ 向后兼容:完全兼容原有的单个 webhook 配置
✅ 优化链接预览:改进消息格式,更好地支持链接预览功能
✅ 独立配置:每个 webhook 可以有独立的超时时间和重试次数
✅ 灵活控制:可以单独启用/禁用某个 webhook
参考 message-pusher 官方文档 部署服务。
详细配置请参考:📖 Message-Pusher 接口配置规则
快速配置: 1. 登录 message-pusher 后台 2. 进入"产品配置" -> "webhook 配置" 3. 点击"新建 webhook 通道" 4. 配置提取规则:
{
"title": "title",
"description": "description",
"content": "content",
"url": "url",
"group": "group",
"keywords": "keywords",
"timestamp": "timestamp"
}
{
"content": "$content"
}
环境变量方式:
# 单个 webhook
WEBHOOK_ENABLED=true
WEBHOOK_URL=http://your-message-pusher:3000/webhook/your_webhook_id
# 多个 webhooks
WEBHOOK_URL_1=http://server1:3000/webhook/webhook_id_1
WEBHOOK_NAME_1=message-pusher-1
WEBHOOK_URL_2=http://server2:3000/webhook/webhook_id_2
WEBHOOK_NAME_2=message-pusher-2
配置文件方式:
webhooks:
- name: "message-pusher-1"
enabled: true
url: "http://server1:3000/webhook/webhook_id_1"
timeout: 10
retry_count: 3
- name: "message-pusher-2"
enabled: true
url: "http://server2:3000/webhook/webhook_id_2"
timeout: 15
retry_count: 2
docker run -d \
--name rss2tg \
-e TELEGRAM_BOT_TOKEN=your_bot_token \
-e TELEGRAM_USERS=123456789 \
-e RSS_URLS_1=https://example.com/rss \
-e RSS_KEYWORDS_1=关键词1,关键词2 \
-e RSS_GROUP_1=技术资讯 \
-v /path/to/data:/app/data \
-v /path/to/config:/app/config \
drfyup/rss2tg:latest
docker run -d \
--name rss2tg \
-e TELEGRAM_BOT_TOKEN=your_bot_token \
-e TELEGRAM_USERS=123456789 \
-e RSS_URLS_1=https://example.com/rss \
-e RSS_KEYWORDS_1=关键词1,关键词2 \
-e RSS_GROUP_1=技术资讯 \
-e WEBHOOK_ENABLED=true \
-e WEBHOOK_URL=http://your-message-pusher:3000/webhook/your_webhook_id \
-v /path/to/data:/app/data \
-v /path/to/config:/app/config \
drfyup/rss2tg:latest
docker run -d \
--name rss2tg \
-e TELEGRAM_BOT_TOKEN=your_bot_token \
-e TELEGRAM_USERS=123456789 \
-e RSS_URLS_1=https://example.com/rss \
-e RSS_KEYWORDS_1=关键词1,关键词2 \
-e RSS_GROUP_1=技术资讯 \
-e WEBHOOK_URL_1=http://server1:3000/webhook/webhook_id_1 \
-e WEBHOOK_NAME_1=message-pusher-1 \
-e WEBHOOK_URL_2=http://server2:3000/webhook/webhook_id_2 \
-e WEBHOOK_NAME_2=message-pusher-2 \
-v /path/to/data:/app/data \
-v /path/to/config:/app/config \
drfyup/rss2tg:latest
📰 **文章标题**
🌐 **链接:** https://example.com/article
🔍 **关键词:** #关键词1 #关键词2
🏷️ **分组:** 技术资讯
🕒 **时间:** 2024-01-20 15:30:45
发送到 message-pusher 的数据格式:
{
"title": "文章标题",
"description": "分组: 技术资讯 | 关键词: 关键词1, 关键词2 | 时间: 2024-01-20 15:30:45",
"content": "### 📰 【技术资讯】RSS推送\n\n**标题:** 文章标题\n\nhttps://example.com/article\n\n**关键词:** #关键词1 #关键词2\n\n**时间:** 2024-01-20 15:30:45",
"url": "https://example.com/article",
"group": "技术资讯",
"keywords": "关键词1, 关键词2",
"timestamp": "2024-01-20 15:30:45"
}
| 配置项 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| telegram.bot_token | 字符串 | 是 | Telegram Bot 的 API Token | "110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw" |
| telegram.users | 字符串数组 | 是 | 接收消息的用户 ID 列表 | ["123456789", "987654321"] |
| telegram.channels | 字符串数组 | 否 | 接收消息的频道列表 | ["@channel1", "@channel2"] |
| telegram.adminuser | 字符串数组 | 否 | 管理员用户 ID 列表 | ["123456789"] |
| rss[].urls | 字符串数组 | 是 | RSS 订阅地址列表 | ["https://example.com/feed1.xml"] |
| rss[].interval | 整数 | 是 | 更新间隔(秒) | 300 |
| rss[].keywords | 字符串数组 | 否 | 关键词列表 | ["vps", "优惠"] |
| rss[].group | 字符串 | 否 | 分组名称 | "科技新闻" |
| rss[].allow_part_match | 布尔值 | 否 | 是否允许部分匹配 | true |
优先级说明
环境变量的优先级高于配置文件
如果同时设置了环境变量和配置文件,将使用环境变量的值
配置更新机制
系统每分钟自动检测配置文件变化
配置文件变更后无需重启,自动生效
关键词设置说明
如果配置了关键词,只有匹配关键词的文章才会被推送
可以通过 allow_part_match 配置是否允许部分匹配
安全建议
系统实现了基本的权限控制机制:
管理员权限:
如果未配置 adminuser,所有在 users 列表中的用户都具有管理员权限
adminuser,则只有在该列表中的用户才具有管理员权限管理员可以执行所有操作,包括添加/删除用户、管理 RSS 订阅等
普通用户权限:
机器人支持以下命令:
主要命令:
/start - 开始使用机器人并查看帮助信息/view - 查看类命令合集/users - 用户管理命令合集/edit - 编辑类命令合集查看类命令(使用 /view 查看):
/config - 查看当前配置/list - 列出所有 RSS 订阅/stats - 查看推送统计/version - 获取当前版本信息用户管理命令(使用 /users 查看):
/add_user - 添加用户(需要管理员权限)/del_user - 删除用户(需要管理员权限)/list_users - 查看用户列表编辑类命令(使用 /edit 查看):
/add - 添加 RSS 订阅(需要管理员权限)/edit - 编辑 RSS 订阅(需要管理员权限)/delete - 删除 RSS 订阅(需要管理员权限)/add_all - 向所有订阅添加关键词(需要管理员权限)/del_all - 从所有订阅删除关键词(需要管理员权限)添加用户(需要管理员权限):
使用 /add_user 命令
新添加的用户默认为普通用户权限
删除用户(需要管理员权限):
使用 /del_user 命令
输入要删除的用户编号
查看用户列表:
使用 /list_users 命令
显示所有已添加的用户 ID
设置管理员:
adminuser 字段TELEGRAM_ADMIN_USERS 设置注意:如果未设置管理员,所有用户都具有管理员权限。建议在生产环境中明确设置管理员用户。
Bot 支持以下命令:
/start - 开始使用机器人/help - 获取帮助信息/config - 查看当前配置/add - 添加 RSS 订阅/edit - 编辑 RSS 订阅/delete - 删除 RSS 订阅/list - 列出所有 RSS 订阅/stats - 查看推送统计/add 命令给 Bot。1:保持原有关键词(编辑时有效)2:不设置关键词,该订阅源的所有新文章都会被推送在当前 config 目录下新建 config.yaml,填入以下内容。
# Telegram 配置
telegram:
bot_token: "your_telegram_bot_token"
users:
- "123456789"
channels:
- "@your_channel"
adminuser:
- "123456789"
# 单个 Webhook 配置(向后兼容)
webhook:
enabled: false
url: "http://your-message-pusher:3000/webhook/your_webhook_id"
timeout: 10
retry_count: 3
# 多个 Webhooks 配置(推荐使用)
webhooks:
- name: "message-pusher-1"
enabled: true
url: "http://server1:3000/webhook/webhook_id_1"
timeout: 10
retry_count: 3
- name: "message-pusher-2"
enabled: true
url: "http://server2:3000/webhook/webhook_id_2"
timeout: 15
retry_count: 2
- name: "backup-webhook"
enabled: false # 可以暂时禁用某个 webhook
url: "http://backup:3000/webhook/backup_id"
timeout: 5
retry_count: 1
# RSS 订阅配置
rss:
- urls:
- "https://rss.nodeseek.com"
interval: 30
keywords:
- "vps"
- "甲骨文"
- "免费"
group: "NS论坛"
allow_part_match: true
- urls:
- "https://linux.do/latest.rss"
interval: 30
keywords:
- "vps"
- "甲骨文"
- "免费"
- "龟壳"
group: "LC论坛"
allow_part_match: true
两种方式都可以,系统会每 1 分钟自动检测,即使动态更改生效。
/edit 命令给 Bot。/delete 命令给 Bot。发送 /list 命令给 Bot,查看当前所有 RSS 订阅。
发送 /stats 命令给 Bot,查看今日和本周的推送数量。
config 和 data 目录。/app/data/stats.yaml 文件中。/app/data/sent_items.txt 文件中。$ claude mcp add rss2tg \
-- python -m otcore.mcp_server <graph>