{"id":13827417,"url":"https://github.com/zenwarr/telegram-feed-bot","last_synced_at":"2025-07-09T03:32:05.106Z","repository":{"id":149705456,"uuid":"461103106","full_name":"zenwarr/telegram-feed-bot","owner":"zenwarr","description":"Posts rss feeds or top reddit posts to telegram channels","archived":false,"fork":false,"pushed_at":"2023-10-16T18:15:39.000Z","size":108,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-08-04T09:06:43.171Z","etag":null,"topics":["rss","telegram","telegram-bot","telegram-rss","telegram-rss-bot"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zenwarr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-19T06:07:32.000Z","updated_at":"2024-08-04T09:06:48.765Z","dependencies_parsed_at":"2024-08-04T09:06:47.540Z","dependency_job_id":"6e44f7d5-b336-41b9-833b-ddbebc9ce8e2","html_url":"https://github.com/zenwarr/telegram-feed-bot","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zenwarr%2Ftelegram-feed-bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zenwarr%2Ftelegram-feed-bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zenwarr%2Ftelegram-feed-bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zenwarr%2Ftelegram-feed-bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zenwarr","download_url":"https://codeload.github.com/zenwarr/telegram-feed-bot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225481530,"owners_count":17481175,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["rss","telegram","telegram-bot","telegram-rss","telegram-rss-bot"],"created_at":"2024-08-04T09:01:56.035Z","updated_at":"2024-11-20T06:31:45.739Z","avatar_url":"https://github.com/zenwarr.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"This bot posts rss feeds to telegram channels.\nIt can also collect top posts from a subreddit and post them to a telegram channel hourly.\n\nIt can save original post formatting (to the extent supported by Telegram).\n\n![License](https://img.shields.io/badge/license-MIT-green?style=for-the-badge)\n\n## Feed configuration\n\nConfiguration is stored in `data/config.yaml` file.\nExample configuration:\n\n```yaml\nfeeds:\n- url: https://xkcd.com/rss.xml # RSS feed url\n\n  # Handle of a telegram channel to post to.\n  # You can reuse same channel for multiple feeds.\n  channel: \"@xkcd\"\n\n  # Optional, `generic` by default\n  # Filter to convert a feed entry to a telegram message\n  filter: xkcd\n\n  # Optional, none by default\n  # Regexp to not post messages not matching it.\n  # Matching is done against an already generated telegram message, not source html provided in a feed entry.\n  should_match: \"^xkcd\"\n\n  # Optional, none by default\n  # Regexp to not post messages matching it. It can be an array of patterns.\n  # Matching is done against an already generated telegram message, not source html provided in a feed entry.\n  should_not_match: \"^xkcd\"\n  \n  # Optional, none by default\n  # Prefix is added to the message title and can be useful if you post multiple feeds to the same telegram channel\n  # Title with a prefix looks like this: `[XKCD] Original entry title`\n  title_prefix: \"XKCD\"\n  \n  # Optional, true by default\n  # If set to false, disables link previews for telegram messages \n  link_preview: true\n  \n  # Optional, true by default\n  # If set to true, text in the title is going to be a clickable link to an original post.\n  # Setting this to true automatically disables footer.\n  title_link: true\n  \n  # Optional, false by default\n  # If true, telegram messages will have footer with clickable link to an original post\n  footer: true\n  \n  # Optional, none by default\n  # If set, links to original posts for this feed are going to be replaced with links to\n  # t.me/iv?url=original_link\u0026rhash=instant_view_rhash, so you can use your own instant view templates\n  instant_view_rhash: \"some_rhash\"\n\nreddit:\n- name: funny # Name of a subreddit\n  channel: \"@funny\" # Handle of a telegram channel to post to. You can reuse same channel for multiple subreddits.\n```\n\nFilters are functions that convert incoming rss feed entry to telegram message.\n`generic` filter is used by default.\nIt tries its best to extract content from a feed entry and convert it to simple markdown Telegram understands.\n\nThere are two types of filters: built-in and custom.\nBuilt-in filters are located in `src/builtin_filters` directory — each file here exports a function named `content_filter` and the name of the file is a name of the filter.\nIf a filter with given name is not found in `src/builtin_filter`, application tries to find it in `src/custom_filters` directory.\nYou can use it to create your custom filters (take a look at a filter in `src/builtin_filter` for example).\n\nIf you are using default `docker-compose.yml` config for deploy, you do not need to modify code in the repository.\n`filters` directory is mounted into `src/custom_filters`, so you can just place your custom filters there.\n\nApplication does not need to be restarted to pick up a new configuration.\nUpdated config is going to be used on next update.\n\n### Reusing config\n\nYou can reuse configuration for multiple feeds with YAML links:\n\n```yaml\nconfigs:\n  feed: \u0026feed\n    channel: \"-129837198239123\"\n    link_preview: no\n\nfeeds:\n- url: https://example.com/rss.xml\n  title_prefix: Example\n  \u003c\u003c : *feed\n```\n\n## Bot configuration\n\nYou have to set bot token in `data/.env` file.\nFor example:\n\n```dotenv\nTELEGRAM_BOT_TOKEN=my_telegram_bot_token\n```\n\n## Deployment\n\nYou can use an example provided in `prod.docker-compose.yml` file for deployment.\nCreate `docker-compose.yml` file and paste contents from `prod.docker-compose.yml` file into it.\nYou should also create `data` (for keeping `data/.env` and `data/config.yaml`) and `filters` (for keeping custom filters) directories. \n\nAfter setting up feeds in config and configuring bot token, you can start the bot with docker-compose.\n\n```sh\ndocker-compose up --build\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzenwarr%2Ftelegram-feed-bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzenwarr%2Ftelegram-feed-bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzenwarr%2Ftelegram-feed-bot/lists"}