Home
Softono
pubgate-telegram

pubgate-telegram

Open source BSD-3-Clause Python
20
Stars
2
Forks
2
Issues
3
Watchers
3 months
Last Commit

About pubgate-telegram

PubGate Telegram is an extension for the PubGate server that bridges Telegram channels with the ActivityPub fediverse. It allows content from Telegram channels to be broadcast to federated networks and enables posting from ActivityPub accounts back to Telegram. Key features include bidirectional content synchronization between Telegram and ActivityPub platforms, automated tagging of bridged posts, profile customization to represent the bridge in the fediverse, and account management through both configuration files and API endpoints. Setup requires creating a Telegram bot with admin permissions in the target channels, configuring API credentials from my.telegram.org and a bot token from BotFather, and adding the extension to PubGate's configuration. The bridge account can be created at deployment time or later via API using the /user POST endpoint. Bot settings including channel lists can be updated through the PATCH / endpoint. Use cases include content creators who maintain Telegram channels and want to rea

Platforms

Web Self-hosted

Languages

Python

Links

PubGate Telegram <-> ActivityPub bridge

Extension for PubGate, federates Telegram channels and back

Requires PubGate >= 0.2.19

Deploy

Create Telegram bot and invite it to channels going to be bridged with admin permissions

Install Docker + Docker Compose

Shell

git clone https://github.com/autogestion/pubgate.git
cp -r config/extensions_sample_conf.cfg config/conf.cfg
Edit config/conf.cfg to change setup of your instance, next values should be added
EXTENSIONS = [..., "pg_telegram"]
# These example values won't work. You must get your own api_id and
# api_hash from https://my.telegram.org, under API Development.
TELEGRAM_API_ID = 12345
TELEGRAM_API_HASH = '0123456789abcdef0123456789abcdef'
TELEGRAM_BOT_TOKEN = "get from https://core.telegram.org/bots#6-botfather"
CHECK_BOXES_TIMEOUT = 3

This will connect Telegram bot to PubGate server. To connect it to Fediverse, setup PubGate AP account. Account could be created on deploy by adding next value to config/conf.cfg or later via API (described below)

USER_ON_DEPLOY = """{
    "username": "user",
    "password": "pass",                                 
    "profile": {
        "type": "Service",                                                  
        "name": "TelePub",
        "summary": "Broadcast from <a href='https://t.me/telapub' target='_blank'>Telegram channel</a>",
        "icon": {
            "type": "Image",
            "mediaType": "image/png",
            "url": "https://cdn1.iconfinder.com/data/icons/blockchain-8/48/icon0008_decentralize-512.png"
        }
    },
    "details": {
        "tgbot": {
            "channels": ["<username_of_telegram_channel>"],                                    
            "enable": true,
            "tags": ["telegram", "bridge"]                              
        }
    }
}"""

More on user configuration

  • profile - contains information which will represent bridge in Fediverse
  • details.tgbot.channels - should be updated with targeted Telegram channel(s)
  • details.tgbot.tags - tags which will be auto-added to every post, could be []
Edit requirements/extensions.txt by adding next row
git+https://github.com/autogestion/pubgate-telegram.git

Then, instance could be started

domain=put-your-domain-here.com docker-compose up -d

Usage

  • To get updates from Telegram channels (where Telegram bot was added) just follow PubGate account from any other AP account
  • To send updates to Telegram, make PubGate account follow targeted accounts (regular AP Follow, via UI or API, endpoint and payload are described in postman collection in Pubgate repo

Bots Creation via API

/user  POST

payload

Same as used for USER_ON_DEPLOY value, triple quotes should be stripped

If register by invite enabled, "invite": "<invite_code_from_config/conf.cfg>" should be added to payload

Restart app after adding new bot or updating old one

Disable/Update bot

/<username>  PATCH   (auth required)

payload

{
    "details": {
        "tgbot": {
            "channels": ["telapub"],                                    #change to update channel's list
            "enable": false,                                            #"enable": true to re-enable
            "tags": ["telegram", "bridge"]                              
        }
    }
}