Telegram Drive
Go to file
2023-09-08 16:08:20 +05:30
.github added embedded ui and migrations 2023-09-08 16:08:20 +05:30
.vscode update 2023-08-16 03:24:51 +05:30
cache initial commit 2023-08-07 01:02:46 +05:30
database added embedded ui and migrations 2023-09-08 16:08:20 +05:30
models added 2fa support 2023-08-22 20:30:14 +05:30
public chnaged package name 2023-08-16 03:23:02 +05:30
routes added embedded ui and migrations 2023-09-08 16:08:20 +05:30
schemas added 2fa support 2023-08-22 20:30:14 +05:30
services fixed total parts calculation 2023-09-05 00:06:52 +05:30
types added 2fa support 2023-08-22 20:30:14 +05:30
ui added embedded ui and migrations 2023-09-08 16:08:20 +05:30
utils added embedded ui and migrations 2023-09-08 16:08:20 +05:30
.gitignore update schema 2023-08-17 21:02:40 +05:30
.gitmodules added embedded ui and migrations 2023-09-08 16:08:20 +05:30
.goreleaser.yaml added embedded ui and migrations 2023-09-08 16:08:20 +05:30
docker-compose.yml added embedded ui and migrations 2023-09-08 16:08:20 +05:30
Dockerfile added embedded ui and migrations 2023-09-08 16:08:20 +05:30
go.mod added embedded ui and migrations 2023-09-08 16:08:20 +05:30
go.sum added embedded ui and migrations 2023-09-08 16:08:20 +05:30
LICENSE Update LICENSE 2023-08-19 15:12:56 +05:30
main.go added embedded ui and migrations 2023-09-08 16:08:20 +05:30
Makefile added embedded ui and migrations 2023-09-08 16:08:20 +05:30
README.md Update README.md 2023-08-29 20:17:13 +05:30

Telegram Drive

Telegram Drive is a powerful utility that enables you to create your own cloud storage service using Telegram as the backend.

Discord

Table of Contents
  1. Setting up things

Features

  • UI: Based on Material You to create nice looking UI themes.
  • Fast Downloads: Get your files quickly with high-speed downloads.
  • Fast Uploads: Upload your files faster using multi bots.
  • Multi-Client Support: Avoid rate limits and maximize download speeds with multiple clients.
  • Secure: Your data is secured using Telegram's robust encryption.
  • Flexible Deployment: Use Docker Compose or deploy without Docker.
  • Authentication: Supports Phone, QR and 2FA login.
  • Rclone: Supports almost all rclone operations.

Demo

demo

UI Repo

Deploy using docker-compose

First clone the repository

git clone https://github.com/divyam234/teldrive
cd teldrive

Follow Below Steps

  • Create the .env or teldrive.env file with your variables and start your container.
docker compose up -d
  • Uploads from UI will be slower due to limitations of browser use Teldrive Uploader for faster uploads.Make sure to use Multi Client mode if you are using uploader.

  • If you intend to share download links with others, ensure that you enable multi-client mode with bots.

Use without docker

First clone the repository

git clone https://github.com/divyam234/teldrive

Follow Below Steps

  • Fork the UI Repository mentioned above and deploy it to Vercel, or simply use https://teldrive.vercel.app.
  • Download the release binary of Teldrive from the releases section.
  • Your .env file will remain the same as mentioned earlier. Additionally, set variables as specified below. Since the UI is hosted on HTTPS, we need a local server on HTTPS for cookies to function.
HTTPS=true
COOKIE_SAME_SITE=false
  • Generate HTTPS certificates for localhost using mkcert and place them in the sslcerts directory where the executable is located.

  • If you are using Windows, ensure that you add the certificate as trusted using mkcert or manually (you can find instructions in the mkcert documentation).

  • Rename generated cert and key as cert.pem and key.pem respectively.

  • Make sure to add database migrations directory where executable is present.

  • Now, run the Teldrive executable from the releases.

  • Finally, update the API URL in the UI deployed on Vercel to https://localhost:8080 in the settings.

Setting up things

If you're locally or remotely hosting, create a file named .env or teldrive.env in the root directory and add all the variables there. An example of .env file:

APP_ID=1234
APP_HASH=abc
CHANNEL_ID=1234
HTTPS=false
COOKIE_SAME_SITE=true
JWT_SECRET=abc
DATABASE_URL=abc
RATE_LIMIT=true
TG_CLIENT_DEVICE_MODEL="Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0" # Any valid  browser user agent here
TG_CLIENT_SYSTEM_VERSION=Win32
TG_CLIENT_APP_VERSION=2.1.9 K
TG_CLIENT_LANG_CODE=en
TG_CLIENT_SYSTEM_LANG_CODE=en
TG_CLIENT_LANG_PACK=webk
MULTI_CLIENT=false
MULTI_TOKEN1=55838383:yourfirstmulticlientbottokenhere
MULTI_TOKEN2=55838383:yoursecondmulticlientbottokenhere
MULTI_TOKEN3=55838383:yourthirdmulticlientbottokenhere

According to Telegram TOS: all accounts that sign up or log in using unofficial Telegram API clients are automatically put under observation to avoid violations of the Terms of Service.So you can use APP_ID and APP_HASH from official K Telegram webclient from here

Use strong JWT secret instead of pure guessable string.You can use openssl to generate it.

$ openssl rand -base64 32

Multi-Client Mode is recommended to avoid flood errors and enable maximum download speed, especially if you are using downloaders like IDM and aria2c which use multiple connections for downloads.

Mandatory Vars

Before running the bot, you will need to set up the following mandatory variables:

  • APP_ID : Use official ones as mentioned above.

  • APP_HASH : Use official ones as mentioned above.

  • JWT_SECRET : Used for signing jwt tokens

  • DATABASE_URL : Connection String obtained from Postgres DB (you can use Neon db as free alternative fro postgres)

  • CHANNEL_ID : This is the channel ID for the log channel where app will store files . To obtain a channel ID, create a new telegram channel (public or private), post something in the channel, forward the message to @missrose_bot and reply the forwarded message with the /id command. Copy the forwarded channel ID and paste it into the this field.

Optional Vars

In addition to the mandatory variables, you can also set the following optional variables:

  • HTTPS : Only needed when frontend is deployed on vercel.

  • COOKIE_SAME_SITE : Only needed when frontend is deployed on vercel.

  • MULTI_CLIENT : Enable or Disable Multi Token mode. If true you have pass atleast one Multi Token

  • MULTI_TOKEN[1....] : Recommended to add atleast 10-12 tokens

For making use of Multi-Client support

Note

What it multi-client feature and what it does?
This feature shares the Telegram API requests between other bots to avoid getting floodwaited (A kind of rate limiting that Telegram does in the backend to avoid flooding their servers) and to make the server handle more requests.

To enable multi-client, generate new bot tokens and add it as your environmental variables with the following key names.

MULTI_TOKEN1: Add your first bot token here.

MULTI_TOKEN2: Add your second bot token here.

you may also add as many as bots you want. (max limit is not tested yet) MULTI_TOKEN3, MULTI_TOKEN4, etc.

Warning

Don't forget to add all these bots to the CHANNEL_ID as admin for the proper functioning

FAQ

  • How to get Postgres DB url ?

You can set up a local Postgres instance, but it's not recommended due to backup and data transfer hassles. The recommended approach is to use a free cloud-based Postgres DB like Neon DB.

Contributing

Feel free to contribute to this project if you have any further ideas.