Skip to content

A Telegram Bot to transfer files to OneDrive. No file size limitation. Restricted content supported. Doesn't occupy local space.

License

Notifications You must be signed in to change notification settings

hlf20010508/telegram-onedrive

Repository files navigation

telegram-onedrive

A Telegram Bot to transfer files to OneDrive.

Attention

  • This project is being rewritten in Rust in branch rust.
  • Please read Preparation carefully and don't omit any steps.
  • Please read Usage - Before Start, or the bot may not work.

Account Types

Supported

  • Persoanl account.
  • All types of business accounts, details.
  • All types of educational accounts if domain administrator exists.

Not Supported

  • All types of educational accounts if domain administrator doesn't exist.

Not Supported Yet

  • Microsoft 365 operated by 21Vianet(世纪互联).

Introductions

  • Based on telethon.
  • Works only in Group.
  • Transfer files you send or forward.
  • Transfer restricted content.
  • Transfer files from url.
  • No file size limitation.
  • Doesn't occupy local space, works entirely on memory through multipart transfer.
  • Support multiple OneDrive accounts.
  • Support OneDrive directory changing.

Demos

/auth Telegram /auth Telegram
/auth OneDrive /auth OneDrive
transfer single transfer single
transfer multi transfer multi
link link
/links $message_link $range /links message_link range
/clear /clear
/autoDelete /autoDelete
/url $file_url /url file_url

Preparation

  1. Open docker-compose.yml and edit the environment configuration.
  2. server_uri is your domain, like https://example.com, or https://127.0.0.1:xxxx if you don't have a web server. Protocol must be "https", not "http".
    • Some web browsers may prevent you from visiting this url because of ssl mismatch. Try using Chromium.
    • If you want to specify your own ssl keys, especially if you have your own site, you can import your ssl keys like this:
      services:
      telegram-onedrive:
        ...
        volumes:
          - /path/to/*.crt:/telegram-onedrive/server/ssl/server.crt
          - /path/to/*.key:/telegram-onedrive/server/ssl/server.key
        ...
  3. Reflect the port:
    services:
        telegram-onedrive:
          ...
          ports:
            - xxxx:8080
          ...
  4. Optional, if you're using reverse proxy, you need to set reverse_proxy to true. Default to false. Make sure your reverse proxy use ssl, real server protocol is http. For example, in Nginx:
    listen 443 ssl;
    listen [::]:443 ssl;
    
    server_name example.com;
    
    ssl_certificate path/to/public.pem;
    ssl_certificate_key path/to/private.key;
    
    location / {
        proxy_pass http://127.0.0.1:xxxx/;
    }
  5. Create a Telegram bot through BotFather. Record token as tg_bot_token.
  6. Create a Telegram application on my.telegram.org. See details. Record api_id as tg_api_id, api_hash as tg_api_hash.
  7. tg_user_phone is the phone number you just used to login to my.telegram.org. It's in international format, like +xxyyyyyyyyyyy.
  8. Optional, if you have two-step verification enabled, set tg_user_password as your 2FA password.
  9. tg_user_name is your telegram user name. Check your profile, find your user name, it should be like @user, then record user as tg_user_name. If you need multiple users, use , to split, like user1,user2. Optional, default to void. If you don't set this parameter, everyone can control your bot.
  10. Create a OneDrive application on portal.azure.com App registrations.
    • Press New registrations.
    • Fill Name.
    • In Supported account types choose Accounts in any organizational directory and personal Microsoft accounts.
    • In Redirect URI, platform select Web, uri domain should be the same with server_uri, route must be /auth, like https://example.com/auth.
      • Explain: The authorization code will be sent through the uri you offer, like https://example.com/auth?code=xxxxxxx. So in this project, it use flask as a server to handle this request.
    • Press Register.
    • In application's Overview, record Application (client) ID as od_client_id.
    • Go to application's Certificates & secrets, press Client secrets, and press New client secret. Then fill Description, and choose an Expires. Finnaly, press Add. Record Value as od_client_secret.
  11. remote_root_path is a directory on OneDrive. Like /Videos/from-telegram. Default to /.
  12. delete_flag decides whether bot can auto delete message. Pass true or false. Optional, default to false.
  13. Optional, to keep sessions after recreating docker container, create a volume to store them:
    services:
    telegram-onedrive:
      ...
      volumes:
        - telegram-onedrive-session:/telegram-onedrive/session
      ...
    volumes:
      telegram-onedrive-session:

Usage

Before Start (Important!)

  • Create a group.
  • In bot's profile, press Add to Group or Channel.
  • Add this bot to your group.
  • Set this bot as Admin, and give it all rights like this
    image

If you don't follow these steps, the bot may not work.

Authorization Steps

  • Send /auth.
  • Wait and you'll receive the login code from telegram.
  • Visit the uri the bot sends, and submit the code.
  • After submission, it will send the authorization uri for OneDrive. Visit, login and authorize.
  • If the bot says Onedrive authorization successful!, everything is done.

Start

  • In the group, forward or upload files (or videos, photos, gifs, stickers, voices).
  • If you want to transfer restricted content from a group or channel, right click the content, copy the message link, and send the link.
  • Wait until the transfer completes. You can check status on replied message, tap Status to locate current job.
  • Use /help for more information about other command.

Bot Command

  • /start to start with bot.
  • /auth to authorize telegram and onedrive.
  • /clear to clear history.
  • /autoDelete to toggle whether bot should auto delete message.
  • /drive to list all OneDrive accounts.
  • /drive add to add a OneDrive account.
  • /drive $index to change the OneDrive account.
  • /drive logout to logout current OneDrive account.
  • /drive logout $index to logout specified OneDrive account.
  • /links $message_link $range to transfer sequential restricted content.
  • /url $file_url to upload the file through url.
  • /logs to send log file.
  • /logs clear to clear logs.
  • /dir to show current OneDrive directory.
  • /dir $remote_path to set OneDrive directory.
  • /dir temp $remote_path to set temporary OneDrive directory.
  • /dir temp cancel to restore OneDrive directory to the previous one.
  • /dir reset to reset OneDrive directory to default.
  • /help for help.

The bot support files with extension .t2o as scripts. You can use them to automate the bot.

Example

  • /links https://t.me/c/xxxxxxx/100 2 will transfer https://t.me/c/xxxxxxx/100 and https://t.me/c/xxxxxxx/101.
  • /url https://example.com/file.txt will upload file.txt. The headers of the file response must includes Content-Length.
  • In a file named example.t2o, write these lines for example:
    [link]
    https://t.me/xxxx/100
    https://t.me/yyyy/200 2
    https://t.me/zzzz/40
    
    [url]
    https://example.com/file1.txt
    https://example.com/file2.txt
    
    This will transfer https://t.me/xxxx/100, https://t.me/yyyy/200, https://t.me/yyyy/201, https://t.me/zzzz/40, file1.txt, file2.txt.

Launch Through Docker

Install docker compose

sudo apt-get install docker-compose-plugin

Launch

sudo docker compose up -d

Build your docker image

sudo docker build -t YOUR_HOST_NAME/telegram-onedrive --no-cache .

Links

About

A Telegram Bot to transfer files to OneDrive. No file size limitation. Restricted content supported. Doesn't occupy local space.

Topics

Resources

License

Stars

Watchers

Forks