A Telegram Bot to transfer files to OneDrive.
- 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.
- Persoanl account.
- All types of business accounts, details.
- All types of educational accounts if domain administrator exists.
- All types of educational accounts if domain administrator doesn't exist.
- Microsoft 365 operated by 21Vianet(世纪互联).
- 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.
- Open
docker-compose.yml
and edit the environment configuration. server_uri
is your domain, likehttps://example.com
, orhttps://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 ...
- Reflect the port:
services: telegram-onedrive: ... ports: - xxxx:8080 ...
- Optional, if you're using reverse proxy, you need to set
reverse_proxy
totrue
. Default tofalse
. Make sure your reverse proxy use ssl, real server protocol ishttp
. For example, inNginx
: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/; }
- Create a Telegram bot through BotFather. Record
token
astg_bot_token
. - Create a Telegram application on my.telegram.org. See details. Record
api_id
astg_api_id
,api_hash
astg_api_hash
. tg_user_phone
is the phone number you just used to login to my.telegram.org. It's in international format, like+xxyyyyyyyyyyy
.- Optional, if you have two-step verification enabled, set
tg_user_password
as your 2FA password. tg_user_name
is your telegram user name. Check your profile, find your user name, it should be like@user
, then recorduser
astg_user_name
. If you need multiple users, use,
to split, likeuser1,user2
. Optional, default to void. If you don't set this parameter, everyone can control your bot.- Create a OneDrive application on portal.azure.com App registrations.
- Press
New registrations
. - Fill
Name
. - In
Supported account types
chooseAccounts in any organizational directory and personal Microsoft accounts
. - In
Redirect URI
,platform
selectWeb
, uri domain should be the same withserver_uri
, route must be/auth
, likehttps://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.
- Explain: The authorization code will be sent through the uri you offer, like
- Press
Register
. - In application's
Overview
, recordApplication (client) ID
asod_client_id
. - Go to application's
Certificates & secrets
, pressClient secrets
, and pressNew client secret
. Then fillDescription
, and choose anExpires
. Finnaly, pressAdd
. RecordValue
asod_client_secret
.
- Press
remote_root_path
is a directory on OneDrive. Like/Videos/from-telegram
. Default to/
.delete_flag
decides whether bot can auto delete message. Passtrue
orfalse
. Optional, default tofalse
.- 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:
- 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
If you don't follow these steps, the bot may not work.
- 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.
- 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.
/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.
/links https://t.me/c/xxxxxxx/100 2
will transferhttps://t.me/c/xxxxxxx/100
andhttps://t.me/c/xxxxxxx/101
./url https://example.com/file.txt
will uploadfile.txt
. The headers of the file response must includesContent-Length
.- In a file named
example.t2o
, write these lines for example:This will transfer[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
https://t.me/xxxx/100
,https://t.me/yyyy/200
,https://t.me/yyyy/201
,https://t.me/zzzz/40
,file1.txt
,file2.txt
.
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 .