telemirror
telemirror copied to clipboard
Telegram message forwarder (client API)
Telegram forwarder from channels (make channel mirrors) via Telegram Client API (telethon)
Functionality
- No need to be added by the channel's admin
- Listen to update events (new message, message edited, message deleted and etc)
- Live forwarding and updating messages
- Flexible mapping of source and target channels/chats (one-to-one, many-to-one, many-to-many)
- Configurable incoming message filters: appending forward header, filter URLs and so on
Prepare
-
It's better not to use your main account. Register a new Telegram account
-
Obtain API_ID and API_HASH
-
Setup Postgres database or use InMemoryDatabase with
USE_MEMORY_DB=true
parameter in.env
file -
Fill .env-example with your data and rename it to
.env
.env-example contains the minimum environment configuration to run with an in-memory database.
SESSION_STRING can be obtained by running login.py locally (on your PC with installed python 3.9+) with putted API_ID and API_HASH before.
Channels ID can be fetched by using @messageinformationsbot Telegram bot (just send it a message from the desired channel).
.env overview
# Telegram app ID API_ID=test # Telegram app hash API_HASH=test # Telegram session string (telethon session, see login.py in root directory) SESSION_STRING=test # Mapping between source and target channels/chats # Channel/chat id can be fetched by using @messageinformationsbot telegram bot # Channel id should be prefixed with -100 # [id1, id2, id3:id4] means send messages from id1, id2, id3 to id4 # id5:id6 means send messages from id5 to id6 # [id1, id2, id3:id4];[id5:id6] semicolon means AND CHAT_MAPPING=[-100999999,-100999999,-100999999:-1009999999]; # Remove URLs from incoming messages (true or false). Defaults to false REMOVE_URLS=false # Comma-separated list of URLs to remove (reddit.com,youtube.com) REMOVE_URLS_LIST=google.com,twitter.com # Comma-separated list of URLs to exclude from removal (google.com,twitter.com). # Will be applied after the REMOVE_URLS_LIST REMOVE_URLS_WL=youtube.com,youtu.be,vk.com,twitch.tv,instagram.com # Disable mirror message deleting (true or false). Defaults to false DISABLE_DELETE=false # Disable mirror message editing (true or false). Defaults to false DISABLE_EDIT=false # Use an in-memory database instead of Postgres DB (true or false). Defaults to false USE_MEMORY_DB=false # Postgres credentials DATABASE_URL=postgres://user:pass@host/dbname # or DB_NAME=test DB_USER=test DB_HOST=test DB_PASS=test # Logging level (debug, info, warning, error or critical). Defaults to info LOG_LEVEL=info
- Make sure the account has joined source and target channels
Be careful with forwards from channels with restricted saving content
. It may lead to an account ban.
Help is also welcome to work around this limitation. See sources.
Deploy
Host on Heroku:
or manually:
-
Clone project
git clone https://github.com/khoben/telemirror.git
-
Create new heroku app within Heroku CLI
heroku create {your app name}
-
Add heroku remote
heroku git:remote -a {your app name}
-
Set environment variables to your heroku app from .env by running bash script
./set_heroku_env.bash
-
Upload on heroku host
git push heroku master
-
Start heroku app
heroku ps:scale run=1
Locally:
-
Create and activate python virtual environment
python -m venv myvenv source myvenv/Scripts/activate # linux myvenv/Scripts/activate # windows
-
Install dependencies
pip install -r requirements.txt
-
Run
python main.py
Keep up-to-date with Heroku
If you deployed manually, move to step 2.
-
Get project to your PC:
heroku git:clone -a {your app name}
-
Init upstream repo
git remote add origin https://github.com/khoben/telemirror
-
Get latest changes
git pull origin master
-
Push latest changes to heroku
git push heroku master -f