A Telegram Bot to transfer files to OneDrive.
- 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.
- Open
docker-compose.yml
and edit the environment config. server_uri
is your domain. You need to specify a port, likehttps://example.com:8080
, orhttps://127.0.0.1:8080
if you don't have a web server. Protocol must be "https", not "http".- The self-signed ssl keys may be expired, you can remind me for an update.
- Some web browser 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, or the self-signed ssl keys have expired, 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 ...
- If you're on Linux, simply use
if you're on Windows or macOS, use
services: telegram-onedrive: ... network_mode: host ...
services: telegram-onedrive: ... ports: - xxxx:xxxx ...
xxxx
is your port inserver_uri
. - 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.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
. Optional, default to void. If you don't set this parameter, every one 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:8080/auth
.- Explain: The authorization code will be sent through the uri you offer, like
https://example.com:8080/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 it in docker-compose.yml:
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 ability to Delete Messages.
If you don't follow these steps, the bot may not works.
- 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 all history except status message./autoDelete
to toggle whether bot should auto delete message./clearLogs
to clear logs./logs
to show all logs./logout
to logout OneDrive./links message_link range
to transfer sequential restricted content./url file_url
to upload file through url./logs range
to show the most recent logs for the specified page number./help
for help.
Example:
/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
to Onedrive. It calls Onedrive's API, which means Onedrive's server will visit the url and download the file for you. If the url is invalid to OneDrive, the bot will try using bot's uploader to transfer./logs 2
will show 2 pages of the most recent logs. Each page contains 50 lines of logs.
# install docker-compose
sudo apt-get install docker-compose
# launch
sudo docker-compose up -d
build your docker image
sudo docker build -t YOUR_HOST_NAME/telegram-onedrive --no-cache .