RobotRSS — популярный открытый Telegram-бот (191 звезда на GitHub), который присылает новые записи из RSS-лент: новости, блоги, релизы, вакансии. Автор забросил его в 2021 году и отправил в архив. Код был написан на Python 2.7 и библиотеке для Telegram образца 2017 года — на современном Python он не запускается вообще.
Задача — вернуть проект к жизни: сохранить команды и идею, перенести на актуальный стек, исправить накопившиеся ошибки и довести до состояния, когда бота можно запустить одной командой.
Переписал бота на Python 3 и aiogram 3 с асинхронной загрузкой лент через httpx и разбором через feedparser. Команды оригинала сохранил: подписка, отписка, последние записи, список, пауза рассылки.
Нашёл и исправил ошибки оригинала. Лента скачивалась заново для каждого подписчика — теперь один раз на всех. Новые записи определялись по датам, и ленты без нужного поля отвергались целиком — теперь бот запоминает уже отправленные записи. При сбое ленты бот каждые пять минут слал всем одно и то же сообщение об ошибке — теперь предупреждает один раз. Символ «<» в заголовке ломал отправку. Адрес ленты переводился в нижний регистр и ломал часть ссылок.
Добавил фильтр по словам для каждой подписки, условные запросы (если лента не менялась, ничего не скачивается), защиту от наводнения после простоя, кнопки удаления в списке, Docker и 25 автотестов на настоящих лентах Хабра и GitHub.
Пока снимал скриншоты, поймал ещё одну ошибку уже в своём фильтре: слово «бот» находилось внутри «работает». Теперь поиск идёт с начала слова — «бот» находит «бота» и «ботов», но не «работу».
Бот снова работает: проверен на настоящих лентах Хабра и релизах aiogram на GitHub — подписка, последние записи, фильтр и рассылка только нового. Если лента не менялась, сервер отвечает «без изменений» и бот ничего не качает.
Проект — открытый форк с сохранением лицензии и указанием автора оригинала; в README подробно расписано, что изменено.