Code Monkey home page Code Monkey logo

telemirror's Introduction

Telegram forwarder from channels (make channel mirrors) via Telegram Client API (telethon)

Functionality

Prepare

  1. It's better not to use your main account. Register a new Telegram account

  2. Create Telegram App

  3. Obtain API_ID and API_HASH

    Telegram API Credentials

  4. Setup Postgres database or use InMemoryDatabase with USE_MEMORY_DB=true parameter in .env file

  5. Fill .env-example with your data and rename it to .env

    โ— Note: never push your .env/.yml files with real crendential to a public repo. Use a separate branch (eg, heroku-branch) with .env/.yml files to push to git-based deployment system like Heroku:

    git push heroku heroku-branch:master

    .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

    For more flexible configurations (setup directions and filters), use yaml:

    mirror.config.yml overview
    # (Optional) Global filters, will be applied in order
    filters:
      - ForwardFormatFilter: # Filter name under telemirror/messagefilters.py
          format: ""           # Filters arguments
      - EmptyMessageFilter
      - UrlMessageFilter:
          blacklist: !!set
            ? t.me
      - SkipUrlFilter:
          skip_mention: false
    
    # (Optional) Global settings
    disable_edit: true
    disable_delete: true
    
    # (Required) Mirror directions
    directions:
      - from: [-1001, -1002, -1003]
        to: [-100203]
    
      - from: [-100226]
        to: [-1006, -1008]
    
    # (Optional) Targets config
    targets:
        # Config will be applied to target channel with id=-100203
      - id: -100203
        # Overwrite global settings
        disable_edit: false
        disable_delete: false
        # Overwrite global filters
        filters:
          - UrlMessageFilter:
              blacklist: !!set
                ? t.me
  6. 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.

If you want to bypass forward restriction, see RestrictSavingContentBypassFilter sources to start.

Deploy

Heroku

Deploy

Manually:

  1. Clone project

    git clone https://github.com/khoben/telemirror.git
  2. Create new heroku app within Heroku CLI

    heroku create {your app name}
  3. Add heroku remote

    heroku git:remote -a {your app name}
  4. Set environment variables to your heroku app from .env by running bash script

    ./set_heroku_env.bash
  5. Upload on heroku host

    git push heroku master
  6. Start heroku app

    heroku ps:scale run=1

Keep up-to-date with Heroku

If you deployed manually, move to step 2.

  1. Get project to your PC:

    heroku git:clone -a {your app name}
  2. Init upstream repo (this repository or its fork)

    git remote add origin https://github.com/khoben/telemirror
  3. Get latest changes

    git pull origin master
  4. Push latest changes to heroku

    git push heroku master -f

Locally:

  1. Create and activate python virtual environment

    python -m venv myvenv
    source myvenv/Scripts/activate # linux
    myvenv/Scripts/activate # windows
  2. Install dependencies

    pip install -r requirements.txt
  3. Run

    python main.py

telemirror's People

Contributors

khoben avatar mashed-potatoes avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.