🐂 El Monitorro是一款高性能的提要阅读器,是一个电报机器人。它支持RSS,Atom和JSON提要

#RSS 🐂 El Monitorro是一款高性能的提要阅读器,是一个电报机器人。它支持RSS,Atom和JSON提要

Aug 5, 2022 03:40 PM
notion image

notion image
+++ title = "El Monitorro" sort_by = "weight" +++
notion image

El Monitorro

El Monitorro is RSS, Atom and JSON feed reader as a Telegram bot.
It's available at @el_monitorro_bot.



/start - show the bot's description and contact information

/subscribe url - subscribe to feed

/unsubscribe url - unsubscribe from feed

/list_subscriptions - list your subscriptions

/help - show available commands

/set_timezone - set your timezone. All received dates will be converted to this timezone. It should be offset in minutes from UTC. For example, if you live in UTC +10 timezone, offset is equal to 600

/get_timezone - get your timezone

/set_template url template - set a template for all received items for the specified subscription. All new updates will be converted to the format defined by this subscription. Supported fields you can use for templates:
- bot_feed_name - name of the feed
- bot_feed_link - url of the feed
- bot_item_name - name of the item
- bot_item_link - url of the item
- bot_item_description - description of the item
- bot_date - publication date of the feed

Example: /set_template https://www.badykov.com/feed.xml {{bot_feed_name}}




Also, there is `substring` helper that can be used to limit the number of characters. For example, {{substring bot_item_description 100}}

/get_template url - get a template for the subscription

/remove_template url - remove the template

/set_global_template - set global template. This template will be used for all subscriptions. If the subscription has its own template, the subscription template will be used. See /set_template for available fields.

/remove_global_template - remove global template

/get_global_template - get global template

/get_filter url - get a filter for the subscription

/set_filter url filter - set filter, for example, /set_filter https://www.badykov.com/feed.xml telegram,bots. You'll start receiving posts only containing words in the filter. Use `!word` to stop receiving messages containing the specified `word`. You can combine regular filter words with ! filter words. For example, `!bot,telegram`

/remove_filter url - remove filter

/set_global_filter filter - set global filter

/get_global_filter - get a global filter

/remove_global_filter - remove global filter

/info - shows the number of subscriptions and chats. it's available only for the admin (`ADMIN_TELEGRAM_ID`)

/set_content_fields url fields - changes content hash fields of the specified feed. it's available only for the admin (`ADMIN_TELEGRAM_ID`).
Example: /set_content_fields https://www.badykov.com/feed.xml author,title

By default content hash is calculated from title and url.

Available fields:
 - link
 - title
 - publication_date
 - guid
 - description
 - author

Common info

  • Feed updates check interval is 1 minute.
  • Unread items delivery interval is 1 minute.
  • The number of subscriptions is limited to 20.
The bot works in private chats, groups and channels. A couple of channels created with el monitorro:


Manual setup

You can deploy your instance of el_monitorro by:
  1. Set postgres db url (DATABASE_URL) and telegram bot token (TELEGRAM_BOT_TOKEN) to .env file in the root directory. For example:
  1. Setup database by running:
diesel database setup
You'll need diesel-cli for this
  1. Start the bot
  • Start the command bot
RUST_LOG=info RUST_BACKTRACE=1 cargo run --bin el_monitorro
  • Start the sync binary
RUST_LOG=info RUST_BACKTRACE=1 cargo run --bin sync
  • Start the delivery binary
RUST_LOG=info RUST_BACKTRACE=1 cargo run --bin deliver
  • If you don't want to store all feed items that were synced and feeds without any subscriptions, start the cleaner binary
RUST_LOG=info RUST_BACKTRACE=1 cargo run --bin cleaner

Running all services from a single binary

Set ALL_BINARIES to run all binaries (clean, commands, deliver, sync) in the same binary:


All configuration is done through env variables
Default value
Example / Description
Db pool size to process user commands
If this var is set, all services will be started in the main binary
This value is used during parsing of commands. If you set autocompletion menu for your bot, the bot will understand commands like /subscribe@handle along with just /subscribe
The bot tries to sync feeds every SYNC_INTERVAL_SECONDS seconds
The number of workers to sync feeds
The bot tries to deliver new feed items every DELIVER_INTERVAL_SECONDS seconds
The number of workers to deliver updates
The bot cleans old feed items and feeds without subscriptions every CLEAN_INTERVAL_SECONDS seconds
The number of workers to remove old data
If this value is set, the bot will process commands only from the specified user id
Timeout in seconds for feed syncing requests
If this value is set, /info command with stats is available for ADMIN_TELEGRAM_ID

Using docker image

The image is published on docker hub under ayratbadykov/el_monitorro. It accepts additional env variables:
  • SETUP_DB - if this variable is not empty, diesel database setup is run. It creates DB and runs migrations.
  • RUN_MIGRATION - if this variable is not empty, diesel migration run is run. It just runs migrations.
  • BOT_BINARY - depending on this variable, docker container will run one of four binaries. Possible values are commands, sync, deliver, cleaner. To run all services in the main binary, set:
Run the docker container:
docker run --env-file ./.env --network host -t ayratbadykov/el_monitorro:latest
  • -network host is used so the docker container can access a host network if you're running Postgres on the same machine
You can check out an example of docker-compose file in the root directory of the project.

Creating a docker image from the latest master branch

Run the following command in the el_monitorro directory to build the image from the master branch:
docker build ./ -t ayratbadykov/el_monitorro:latest