{"id":40250739,"url":"https://github.com/reagento/relator","last_synced_at":"2026-02-14T01:06:32.883Z","repository":{"id":312737734,"uuid":"1042956307","full_name":"reagento/relator","owner":"reagento","description":"A GitHub Action that sends beautifully formatted Telegram notifications when new issues are created in your repository. Get instant alerts with issue details, labels as hashtags, and clean formatting.","archived":false,"fork":false,"pushed_at":"2025-11-06T12:25:43.000Z","size":1483,"stargazers_count":53,"open_issues_count":3,"forks_count":6,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-02-11T17:51:27.899Z","etag":null,"topics":["github-actions","notifications","sulguk","telegram"],"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/reagento.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-22T21:34:00.000Z","updated_at":"2026-02-04T20:15:33.000Z","dependencies_parsed_at":"2025-09-01T18:32:44.566Z","dependency_job_id":"e6b9aced-0a24-4ba6-8ff3-e015d68949e9","html_url":"https://github.com/reagento/relator","commit_stats":null,"previous_names":["sehat1137/telegram-notifier"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/reagento/relator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reagento%2Frelator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reagento%2Frelator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reagento%2Frelator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reagento%2Frelator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/reagento","download_url":"https://codeload.github.com/reagento/relator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reagento%2Frelator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29427780,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-13T22:20:51.549Z","status":"ssl_error","status_checked_at":"2026-02-13T22:20:49.838Z","response_time":78,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["github-actions","notifications","sulguk","telegram"],"created_at":"2026-01-20T01:02:13.974Z","updated_at":"2026-02-14T01:06:32.872Z","avatar_url":"https://github.com/reagento.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Relator \u003ca href=\"https://github.com/marketplace/actions/reagento-relator\"\u003e🔔\u003c/a\u003e\n\n![GitHub Actions](https://img.shields.io/badge/GitHub_Actions-success?style=flat\u0026logo=githubactions)\n![Python](https://img.shields.io/badge/Python-3.10%2B-blue?style=flat\u0026logo=python)\n![Telegram](https://img.shields.io/badge/Telegram-Bot-blue?style=flat\u0026logo=telegram)\n![Discord](https://img.shields.io/badge/Discord-Webhook-5865F2?style=flat\u0026logo=discord)\n[![CodeQL](https://github.com/reagento/relator/actions/workflows/codeql.yml/badge.svg)](https://github.com/reagento/relator/actions/workflows/codeql.yml)\n\n**Relator** (Latin _referre_ - \"to report\") - delivers beautifully formatted GitHub notifications to Telegram and Discord. Get instant alerts for issues and PRs with smart labeling and clean formatting, keeping your team informed in real-time.\n\n## ✨ Features\n\n- **Multi-Platform**: Send notifications to Telegram, Discord, or both simultaneously\n- **Instant Notifications**: Get real-time alerts for new events\n- **Rich Formatting**: HTML for Telegram, rich embeds for Discord\n- **Label Support**: Automatically converts GitHub labels to hashtags\n- **Customizable**: Multiple configuration options for different needs\n- **Reliable**: Built-in retry mechanism with exponential backoff\n\n## 🚀 Quick Start\n\n### Telegram Notifications\n\n```yaml\nname: Event Notifier\n\non:\n  issues:\n    types: [opened, reopened]\n  pull_request_target:\n    types: [opened, reopened]\n\npermissions:\n  issues: read\n  pull_request: read\n\njobs:\n  notify:\n    name: \"Telegram notification\"\n    runs-on: ubuntu-latest\n    steps:\n      - name: Send Telegram notification for new issue or pull request\n        uses: reagento/relator@v1.6.0\n        with:\n          tg-bot-token: ${{ secrets.TELEGRAM_BOT_TOKEN }}\n          tg-chat-id: ${{ vars.TELEGRAM_CHAT_ID }}\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n```\n\n### Discord Notifications\n\n```yaml\nname: Event Notifier\n\non:\n  issues:\n    types: [opened, reopened]\n  pull_request_target:\n    types: [opened, reopened]\n\npermissions:\n  issues: read\n  pull_request: read\n\njobs:\n  notify:\n    name: \"Discord notification\"\n    runs-on: ubuntu-latest\n    steps:\n      - name: Send Discord notification for new issue or pull request\n        uses: reagento/relator@v1.6.0\n        with:\n          discord-webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n```\n\n### Both Platforms Simultaneously\n\n```yaml\n- name: Send notification to Telegram and Discord\n  uses: reagento/relator@v1.6.0\n  with:\n    tg-bot-token: ${{ secrets.TELEGRAM_BOT_TOKEN }}\n    tg-chat-id: ${{ vars.TELEGRAM_CHAT_ID }}\n    discord-webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}\n    github-token: ${{ secrets.GITHUB_TOKEN }}\n```\n\n\u003e github-token it's not required for public projects and is unlikely to hit any [limits](https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api?apiVersion=2022-11-28#primary-rate-limit-for-unauthenticated-users). However, github actions uses IP-based limits, and since github actions has a limited pool of addresses, these limits are considered public, and you'll hit them very quickly.\n\n### Advanced Configuration\n\n```yaml\n- name: Send Telegram notification for new issue\n  uses: reagento/relator@v1.6.0\n  with:\n    tg-bot-token: ${{ secrets.TELEGRAM_BOT_TOKEN }}\n    tg-chat-id: ${{ vars.TELEGRAM_CHAT_ID }}\n    github-token: ${{ secrets.GITHUB_TOKEN }}\n    base-url: \"https://github.com/your-org/your-repo\"\n    python-version: \"3.10\"\n    attempt-count: \"5\"\n    # if you want to join the input with a list of labels\n    join-input-with-list: \"1\"\n    # if you have topics\n    telegram-message-thread-id: 2\n    # by default templates exist, these parameters override them\n    html-template: \"\u003cb\u003eNew issue by \u003ca href=/{user}\u003e@{user}\u003c/a\u003e \u003c/b\u003e\u003cbr/\u003e\u003cb\u003e{title}\u003c/b\u003e (\u003ca href='{url}'\u003e#{id}\u003c/a\u003e)\u003cbr/\u003e{body}{labels}\u003cbr/\u003e{promo}\"\n    # Custom tags to add to every notification (comma-separated)\n    custom-labels: \"my_project,custom,etc\"\n```\n\n## 🔧 Setup Instructions\n\n### Telegram Setup\n\n1. Create a Telegram Bot\n\n- Message `@BotFather` on [Telegram](https://t.me/botfather)\n- Create a new bot with `/newbot`\n- Save the bot token\n\n2. Get Chat ID\n\n- Add your bot to the desired chat\n- Send a message in the chat\n- Visit `https://api.telegram.org/bot\u003cYOUR_BOT_TOKEN\u003e/getUpdates`\n- Find the chat.id in the response\n\n3. Configure GitHub Secrets\n   Add these secrets in your repository settings:\n\n- `TELEGRAM_BOT_TOKEN`\n- `TELEGRAM_CHAT_ID`\n\n### Discord Setup\n\n1. Create a Discord Webhook\n\n- Go to your Discord server settings\n- Navigate to **Integrations** → **Webhooks**\n- Click **New Webhook**\n- Customize the webhook name and select the target channel\n- Copy the **Webhook URL**\n\n2. Configure GitHub Secrets\n   Add these secrets in your repository settings:\n\n- `DISCORD_WEBHOOK_URL`\n- `DISCORD_THREAD_ID` (optional)\n\n## 📋 Example Output\n\n### Telegram\n\nYour Telegram notifications will look like this:\n\nIssue:\n\n```text\n🚀 New issue by @username\n📌 Bug in authentication module (#123)\n\n[Issue description content here...]\n\n#bug #high_priority #authentication\nsent via relator\n```\n\nPull requests:\n\n```text\n🎉 New Pull Request to test/repo by @username\n✨ Update .gitignore (#3)\n📊 +1/-0\n🌿 Sehat1137:test → master\n\n[Pull requests description content here...]\n\n#bug #high_priority #authentication\nsent via relator\n```\n\n### Discord\n\nDiscord notifications appear as rich embeds with:\n\n- **Color-coded embeds**: Green for issues, purple for pull requests\n- **User avatars**: GitHub profile picture displayed\n- **Repository links**: Clickable links to repository and issue/PR\n- **Organized fields**: Repository, issue/PR number, changes (for PRs), branch info (for PRs)\n- **Markdown formatting**: Clean formatting with proper code blocks, bold, italic, and links\n- **Labels as hashtags**: Same label format as Telegram\n\n## 🤝 Acknowledgments\n\nThis action uses:\n- [sulguk](https://github.com/Tishka17/sulguk) by `@Tishka17` for reliable Telegram message delivery\n- [markdownify](https://github.com/matthewwithanm/python-markdownify) for HTML to Markdown conversion for Discord\n\n## 🌟 Support\n\nIf you find this action useful, please consider:\n\n- ⭐ Starring the repository on GitHub\n- 🐛 Reporting issues if you find any bugs\n- 💡 Suggesting features for future improvements\n- 🔄 Sharing with your developer community\n\n## 📝 License\n\nThis project is open source and available under the [MIT License](https://opensource.org/licenses/MIT).\n\n## ⚙️ Used by\n\n**Relator** is used by many open source projects here we highlight a few:\n\n| Project                                                                        | Logo                                               | Description                                               |\n| ------------------------------------------------------------------------------ | -------------------------------------------------- | --------------------------------------------------------- |\n| [FastStream](https://github.com/ag2ai/faststream)                              | \u003cimg src=\".static/faststream.png\" width=\"45\"\u003e      | FastStream is a powerful and easy-to-use Python framework |\n| [Dishka](https://github.com/reagento/dishka)                                   | \u003cimg src=\".static/reagento.png\" width=\"45\"\u003e        | Cute dependency injection (DI) framework for Python       |\n| [easyp](https://github.com/easyp-tech/easyp)                                   | \u003cimg src=\".static/easyp.png\" width=\"45\"\u003e           | Easyp is a cli tool for workflows with proto files        |\n| [wemake.services](https://github.com/wemake-services/wemake-python-styleguide) | \u003cimg src=\".static/wemake-services.png\" width=\"45\"\u003e | The strictest and most opinionated python linter ever!    |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freagento%2Frelator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freagento%2Frelator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freagento%2Frelator/lists"}