RSStT Bot Channel
762 subscribers
9 photos
52 links
RSS-to-Telegram-Bot, A Telegram RSS bot that cares about your reading experience.

Bot: @RSStT_Bot
GitHub repo: git.io/RSStT
Group/群聊: @RSStT_Group

爱发电: afdian.net/@RongrongQAQ
Patreon: patreon.com/rongbot
Ko-fi: ko-fi.com/rongbot
Download Telegram
Channel created
RSS-to-Telegram-Bot,关心你的阅读体验的 Telegram RSS 机器人。

官方 bot 实例: @RSStT_Bot

本频道会时常播报项目的更新状况。如您需要反馈 bug,可在讨论群内或评论区反馈,也可在 GitHub Issues 反馈。

提供两个频道供预览转发效果:
@GZMTR
@ithome_full
@capoo_sub

官方 bot 实例 | 加入频道 | 加入群组 | GitHub 仓库 | 捐赠支持


RSS-to-Telegram-Bot, A Telegram RSS bot that cares about your reading experience.

Official bot instance: @RSStT_Bot

Subscribe to this channel to get the latest news on the project. If you have encountered any problems or bugs, please feel free to make feedback to our Telegram group or GitHub issue.

Want to preview?:
@GZMTR
@ithome_full
@capoo_sub

Official bot instance | Official channel | Official group | GitHub repo | Patreon
placeholder
dev 分支更新

* 更改许可证为 AGPL (待合并至 master 分支)
* 因 docker hub auto build 开始收费,转为使用 GitHub Actions
* 将 dependabot 改为仅在 dev 分支工作(待合并至 master 分支)

* 完全重写解码 description/contents 的代码:
|- 使用 bs4 实现,不再依赖 html2text,xmlparser.py 已经无用途
|- parse_mode 转为 HTML,不再使用 MarkdownV2,编码简洁可靠
|- 支持更详细粒度的解码,可呈现稍丰富的格式
|- 修复了无法正确处理 <ol> (有序列表)的问题
|- 侦测到 <img> 满足某些特征时,如 emoji、自定义表情等,将其转换为其描述文本加入文本中且不再出现在图片列表里
|- 加入依赖 emoji,实现 emoji shortcodes 自动解码
|- 加入依赖 fuzzywuzzy,实现更可靠的标题存在性侦测
|- 实现输出内容纯文本计数,不会再出现因链接过长而导致文本在远未到达纯文本字数限制(文字消息 4096,媒体消息 1024)前被截断

* 完全重写发送消息的代码:
|- 文章中存在多于 10 件媒体时,支持分条发送
|- 支持视频与图片任意混合于同一条消息
|- 超限媒体不再直接丢弃,而是作为链接附加到消息末尾
|- 因 telegram api 不稳定而无法发出图片时,自动更换图床服务器重发(仅限微博图床,非微博图床自动将所有媒体转为链接附加到消息末尾)
|- 触发 flood control 时自动等待(未验证可用性)
|- 不再无条件原样重试,仅在超时时才会自动原样重试
|- 不再支持超长消息分条发送时附加消息编号

* /test 命令现在可以使用诸如 /test https://some.website/rss all 的格式来一次性获取 feed 中的全部文章

* 启动时自动设置机器人的命令列表(感谢 #7

* 已知问题:
|- 超长消息分条发送可能不稳定
|- 重写部分缺乏日志记录

* 接下来的计划:
|- 改用 logging 实现日志记录
|- 更改配置输入方式,不再通过环境变量读入配置
|- 更改数据库结构
|- 实现一定程度的并行运行
|- 支持多用户使用

注意:本项目可能会在某个时候引入 breaking change 且不能无缝过渡,请注意备份您的订阅列表(通过 /list 命令)。具体何时,则取决于开发进度。

一键更新:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower -cR
(注意:该命令会更新所有容器,如果不需要这么做,请在最后加上容器名;该命令并不会切换分支,如您需要体验 dev 分支,请重新创建容器并在创建时指定分支)

加入频道 | 加入群组 | GitHub 仓库 | 捐赠支持
RSStT Bot Channel pinned «RSS-to-Telegram-Bot,关心你的阅读体验的 Telegram RSS 机器人。 官方 bot 实例: @RSStT_Bot 本频道会时常播报项目的更新状况。如您需要反馈 bug,可在讨论群内或评论区反馈,也可在 GitHub Issues 反馈。 提供两个频道供预览转发效果: @GZMTR @ithome_full @capoo_sub 官方 bot 实例 | 加入频道 | 加入群组 | GitHub 仓库 | 捐赠支持 RSS-to-Telegram-Bot, A Telegram…»
#dev 分支更新
* 替换 README 中的图标为新设计的图标
* 因应许可证变更,在 /help 消息中添加仓库链接
* 因应许可证变更,更新 README
* 更改 user-agent,规避 requests 默认的 UA 被某些网站屏蔽的问题
* 解码相关:
|- 为列表首尾添加换行,以规避某些 feed 不给列表前后加换行的问题
|- 将 <h\d> 标题解码后的先导换行从一个改为两个,增强可读性
|- 对文章标题也实施 emoji 化
|- 修复了某些时候,超长消息自动分割时发出空消息的问题
|- 修复了错误的 HTML 转义顺序导致的转义失效

加入频道 | 加入群组 | GitHub 仓库 | 捐赠支持
#dev 分支更新
* 添加了 GIF 支持,现在文章内的 GIF 不会再被转换为静态图片
|- 由于 Telegram 的限制,一条消息只能含有一张 GIF,因此若 GIF 过多,将引起刷屏
|- 为避免 GIF 前后都有静态图片/视频而造成 GIF 分隔消息的状况,以减少总消息数目,GIF 会最后发出,而不是按照文章中的顺序

* 修复了文本全部发送完毕而图片未发送完毕时,剩下的图片不会被发出的问题

* 根据更新后的 Telegram Bot API 文档,增加了图片长宽比限制

* 优化了标题存在性判断

* 更新依赖 bs4 到 4.10.0

* 移除了不再需要的旧代码

加入频道 | 加入群组 | GitHub 仓库 | 捐赠支持
#dev 分支更新
* 重构权限检查,为将来的多用户功能做准备
* 使用 logging 库来记录 log
* 更新 README 和帮助消息

加入频道 | 加入群组 | GitHub 仓库 | 捐赠支持
#master 分支更新
合入 dev 分支更新内容,包含大量更新,tag 1.5。

更新概要:
注意:由于未来可能加入多用户功能而导致数据库及配置文件变更,请时常备份订阅列表(目前仅可通过 `/test` 备份)

* 文章解码完全重写,更加稳定及更加忠实还原原有格式
|- 针对大量短动态类 RSS 源进行了测试
|- 即使是长文 RSS 源,也可以正确处理
* 支持 GIF
* 消息多于 10 张媒体时支持分条发送
* 支持视频与图片任意混合于同一条消息
* 超限媒体不再直接丢弃,而是作为链接附加到消息末尾
* 自动判断 RSS 源的标题是否为自动填充,并自动选择是否略去标题
* 自动显示作者名
* 自动替换 emoji shortcodes 为 emoji
* 自动替换满足某些特征的表情图片为 emoji 或其描述文本
* 因 telegram api 不稳定而无法发出图片时,自动更换图床服务器重发
|- 仅限微博图源,非微博图源自动将所有媒体转为链接附加到消息末尾
* 改进文本长度计数方式,不再因为链接 url 过长而导致消息被提前分割
* 更改 user-agent,规避某些网站屏蔽 requests UA 的问题
* 改进的日志记录

加入频道 | 加入群组 | GitHub 仓库 | 捐赠支持
#dev 分支更新
* 如果 Telegram Bot API 拒收了媒体,自动尝试使用媒体反代服务(实验性)
* 支持解析代码(<code>/<pre>
* 重构了超长消息分割方法,尝试修正一些问题(可能不稳定)
* 重写了有序列表 (<ol>) / 无序列表 (<ul>) 的解码方式,避免极端情况下错误地达到文本长度限制
* 支持为嵌套列表添加缩进

加入频道 | 加入群组 | GitHub 仓库 | 捐赠支持
提供两个频道供预览转发效果。

短动态类(新浪微博)转发:
@GZMTR

长文类(IT 之家)转发:
@ithome_full

不会自行搭建的订阅者也不用着急,本阶段功能完善后,下一阶段将进行多用户功能开发,待多用户功能开发完成,会有官方实例开放予公众使用。

加入频道 | 加入群组 | GitHub 仓库 | 捐赠支持
#dev 分支更新

* 支持使用 Redis 作为数据库(实验性)
|- 因此已经支持部署到 Railway 时持久化订阅
* 日志微调

加入频道 | 加入群组 | GitHub 仓库 | 捐赠支持
#dev 分支更新

* 支持通过 OPML 文件导入和导出订阅
* 有限的异步支持(实验性;所有命令及订阅定时检查之间,将异步运行)
* 其它小更新与修复

加入频道 | 加入群组 | GitHub 仓库 | 捐赠支持
#dev 分支更新

修复:
* 修复了数据库为空时无法添加订阅的问题
* 修复了错误的参数处理导致网络超时设置丢失,从而导致订阅检查任务无法自行结束的问题
* 修复了报错消息会无限重发的问题:当发送消息出现预料之外的错误而需要向管理员发送报错消息时,若报错消息也发送失败,不会尝试重发

新增:
* /list 命令现在拥有更简洁的输出
* 在 amd64 的基础上,docker 镜像增加 x86, arm64 构建(master 分支尚缺;为简化构建,改为使用 Python 3.9)
* 提供了一个使用 redis 作为数据库的 docker-compose 配置示例(因 master 分支尚未支持 redis,需在配置中指定 dev 分支)
* 日志输出支持着色
* 若订阅检查任务无法自行结束而导致订阅检查任务冲突,连续四次后将通过 Telegram 通知管理员
* 如果发生 getUpdates 冲突,在日志里提示用户少于十次这样的错误对于在 railway.app 里运行的示例来说是正常的

加入频道 | 加入群组 | GitHub 仓库 | 捐赠支持
#dev 分支更新

新增:
* 过长的消息可转为使用 Telegraph 发送
|- 需要设置环境变量 TELEGRAPH_TOKEN,不设置则不启用。每个 token 以逗号,分号,换行或空格中的任意一种分隔,为保证体验,请多设置几个。在这里申请 access_token
|- 如果实在不想申请,就直接输入连续的逗号,需要启用 n 个 Telegraph 账号就输入 n-1 个逗号,bot 会自动申请 token,但是这样会延长 bot 的启动时间
|- 消息过长乃至于 Telegraph 拒收时,转为链接发送
* 新增 /version 命令用于查看版本
|- git clone 后手动运行或通过官方 docker 镜像部署者,可以看到最近的 git tag、与前者的 commit 距离和 commit hash
|- 通过 Railway 部署者,只能看到部署时间

更新:
* 更新了 /help 命令返回的帮助
* 简化了命令列表的描述
* 每个 feed 中检查到的新 post,将多线程发送
* 每次检查 feed 更新,都会多线程检查
* 将 feed 更新检查均摊到每分钟,这在订阅较多时非常有用,可避免负载集中及触及 flood control
|- 为此,大于 60 分钟的检查间隔将会被重置为 60 分钟
|- 特定的某个 feed 的检查间隔仍为设置的间隔,但已四舍五入到整分钟
|- 程序启动时会一次性检查所有 feed,之后会将所有 feed 检查任务均摊到每分钟

变更:
* 官方构建 docker 镜像删去了 x86 支持,现在仅支持 amd64 (x86-64) 和 arm64,这对绝大部分用户没有影响

附注:
* 针对 Telegraph API 也设置了 flood control 自动等待;若等待时间过长,将直接重开在本次运行期间丢弃原账号并请求新的 Telegraph 账号
* post 发送任务最多允许 10 个线程同时生成消息,5 个线程同时发送消息
* feed 检查任务最多允许 5 个线程同时检查更新
* 由于 Telegraph API 非常容易触及 flood control,最多允许 1 个线程在同一时刻通过同一个 token 生成 Telegraph 文章,且每次请求附加了一个 1s 的间隔,因此最好多填几个 token

* 如果想测试多线程和 flood control 自动防止的效果: 盯着日志,然后 /test https://www.ithome.com/rss/ all

加入频道 | 加入群组 | GitHub 仓库 | 捐赠支持
#dev 分支更新

重大变更:
* 完全异步化,替换了所有涉及同步网络请求的库为异步库
* 与 Telegram 交互的库由使用 HTTP Bot API 的同步库
python-telegram-bot 改为使用 MTProto Bot API 的异步库 telethon
|- 这引入了 API key 的需求,程序已经内置了 7 个公开的 API key,即使遇到问题,重试几次就可登入成功。如果无法登入,可以自己申请 API key (详见 docker-compose.yml.sample 中的说明)
|- 由于直接连接到 bot 所属的 DC,不需绕经 HTTP Bot API 所在的 DC2/4,且不需轮询获得消息更新,它在接收及发送消息方面都更为迅速,资源占用也更低(现有证据表明,HTTP Bot API 很可能就是 MTProto Bot API 的一个包装)
|- 即使 HTTP Bot API 宕机,bot 也可以正常工作
|- 其他比较请见
这里这里

新增:
* 支持 <iframe> 元素的解析
* 支持 <video><source><source>...</video> 的解析
* 启用相对链接解析
* 将自定义表情替换为替代文字放入文本中时,可将其 emoji 化(如可能)
* 如果环境变量中设置了全局代理 (SOCKS_PROXY/HTTP_PROXY),会使用它们
* /test 接受了一个不合法的 URL 时,警示用户
* 一些新的环境变量,详见 docker-compose.yml.sample 中的说明

修复:
* 如果一个自定义表情的 width/height 是以 em 而非 px 为单位指定的,现在也能识别到它并将它从图片中剔除并替换为替代文字放入文本中
* 改为使用 post 的 guid/id 而不是 link 来辨识最后一次发送的 post,以规避某些特殊的 RSS feed 的 post 的 link 每次都会变化的问题
* 其他小问题修复

变更:
* 简化了 Telegraph 标题
* 修改 version 格式使之更合理
* 程序启动时不再一次性检查所有 feed 以避免一些问题

加入频道 | 加入群组 | GitHub 仓库 | 捐赠支持
#Release v1.6.0
#master branch updated

BREAKING CHANGE:
* Telegram bot library has been migrated from
python-telegram-bot (which uses HTTP Bot API and is synchronous) to telethon (which uses MTProto Bot API and is asynchronous)
|- However, to use MTProto Bot API, an API key is needed. The bot has 7 built-in API keys (collected from the Internet) and in most cases it should not be unable to log in. But if so, please obtain your own API key ( see
docker-compose.yml.sample for details)

New features
:
* Thanks to the migration of Telegram bot library, bot can now connect to its DC directly, need not detour through the HTTP Bot API and keep polling to get new messages. Which makes the bot receive and reply messages more rapidly and lightweightedly. Even if the HTTP Bot API is down, the bot can still run unaffectedly. (more details: Advantages of MTProto over Bot API , MTProto vs HTTP Bot API)
* Support parsing more HTML elements
|- <iframe>
|- <video><source><source>...</video>
|- <code>
|- <pre>
* Support OPML importing and exporting
* Support sending too-long post via Telegraph (env var TELEGRAPH_TOKEN must be set)
* Support redis as db
|- Note: This is a workaround for deploying the bot on railway.app, will be dropped in the future
* Support arm64 (docker build)
* Support resending a message using a media relay server if Telegram cannot send a message with media due to Telegram server instability or network instability between media server and Telegram server
* Support colored logging
* docker-compose.yml.sample
* /version command to check bot version
* Automatically use proxy if global proxy (env var SOCKS_PROXY/HTTP_PROXY) set

Changes:
* Assign feed monitoring tasks to every minute, instead of executing all at once each DELAY
|- Thus, env var DELAY can only be 60~3600
|- Note: env var DELAY will be deprecated in the future
* Recognize a post by its guid/id instead of link
* Simplify the output of /list
* Bump Python to 3.9 (docker build)
* Minor fixes

Official channel | Official group | GitHub repo | Patreon