Skip to content

Commit

Permalink
Tidying up
Browse files Browse the repository at this point in the history
  • Loading branch information
breakdowns authored May 10, 2021
1 parent 080039d commit cc120a0
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 58 deletions.
78 changes: 39 additions & 39 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[![Slam](https://telegra.ph/file/db03910496f06094f1f7a.jpg)](https://youtu.be/Pk_TthHfLeE)

# Slam Mirror Bot
This is a telegram bot writen in python for mirroring files on the internet to our beloved Google Drive.
This is a Telegram bot writen in Python for mirroring files on the Internet to our beloved Google Drive.

# Features supported:

Expand All @@ -19,20 +19,20 @@ This is a telegram bot writen in python for mirroring files on the internet to o
## From Source Repos
- Mirroring direct download links, Torrent, and Telegram files to Google Drive
- Mirroring Mega.nz links to Google Drive (If your Mega account not premium, it will limit 4-5gb/day)
- Copy files from someone's drive to your drive (Using Autorclone)
- Copy files from someone's Drive to your Drive (Using Autorclone)
- Download/upload progress, speeds and ETAs
- Mirror all youtube-dl supported links
- Mirror all Youtube-dl supported links
- Docker support
- Uploading To Team Drives
- Uploading To Team Drive
- Index Link support
- Service account support
- Delete files from drive
- Delete files from Drive
- Shortener support
- Custom Filename (Only for url, telegram files and ytdl. Not for mega links and magnet/torrents)
- Custom Filename (Only for url, Telegram files and Youtube-dl. Not for Mega links and magnet/torrents)
- Extracting password protected files, using custom filename and download from password protected index links see these examples:
<p><a href="https://telegra.ph/Magneto-Python-Aria---Custom-Filename-Examples-01-20"> <img src="https://img.shields.io/badge/see%20on%20telegraph-grey?style=for-the-badge" width="190""/></a></p>

- Extract these filetypes and uploads to google drive
- Extract these filetypes and uploads to Google Drive
```
ZIP, RAR, TAR, 7z, ISO, WIM, CAB, GZIP, BZIP2,
APM, ARJ, CHM, CPIO, CramFS, DEB, DMG, FAT,
Expand All @@ -57,7 +57,6 @@ sudo apt install python3
```
Install Docker by following the [official docker docs](https://docs.docker.com/engine/install/debian/)


- For Arch and it's derivatives:
```
sudo pacman -S docker python
Expand All @@ -80,30 +79,30 @@ cp config_sample.env config.env
_____REMOVE_THIS_LINE_____=True
```
Fill up rest of the fields. Meaning of each fields are discussed below:
- **BOT_TOKEN**: The telegram bot token that you get from [@BotFather](https://t.me/BotFather)
- **BOT_TOKEN**: The Telegram bot token that you get from [@BotFather](https://t.me/BotFather)
- **GDRIVE_FOLDER_ID**: This is the folder ID of the Google Drive Folder to which you want to upload all the mirrors.
- **DOWNLOAD_DIR**: The path to the local folder where the downloads should be downloaded to
- **DOWNLOAD_STATUS_UPDATE_INTERVAL**: A short interval of time in seconds after which the Mirror progress message is updated. (I recommend to keep it 5 seconds at least)
- **OWNER_ID**: The Telegram user ID (not username) of the owner of the bot
- **OWNER_ID**: The Telegram user ID (not username) of the Owner of the bot
- **AUTHORIZED_CHATS**: Fill user_id and chat_id of you want to authorize.
- **AUTO_DELETE_MESSAGE_DURATION**: Interval of time (in seconds), after which the bot deletes it's message (and command message) which is expected to be viewed instantly. Note: Set to -1 to never automatically delete messages
- **IS_TEAM_DRIVE**: (Optional field) Set to `True` if GDRIVE_FOLDER_ID is from a Team Drive else False or Leave it empty.
- **USE_SERVICE_ACCOUNTS**: (Optional field) (Leave empty if unsure) Whether to use service accounts or not. For this to work see "Using service accounts" section below.
- **IS_TEAM_DRIVE**: (Optional field) Set to `True` if `GDRIVE_FOLDER_ID` is from a Team Drive else False or Leave it empty.
- **USE_SERVICE_ACCOUNTS**: (Optional field) (Leave empty if unsure) Whether to use Service Accounts or not. For this to work see [Using service accounts](https://github.com/breakdowns/slam-mirrorbot#generate-service-accounts-what-is-service-account) section below.
- **INDEX_URL**: (Optional field) Refer to https://github.com/maple3142/GDIndex/ The URL should not have any trailing '/'
- **API_KEY**: This is to authenticate to your telegram account for downloading Telegram files. You can get this from https://my.telegram.org DO NOT put this in quotes.
- **API_HASH**: This is to authenticate to your telegram account for downloading Telegram files. You can get this from https://my.telegram.org
- **API_KEY**: This is to authenticate to your Telegram account for downloading Telegram files. You can get this from https://my.telegram.org DO NOT put this in quotes.
- **API_HASH**: This is to authenticate to your Telegram account for downloading Telegram files. You can get this from https://my.telegram.org
- **MEGA_API_KEY**: Mega.nz api key to mirror mega.nz links. Get it from [Mega SDK Page](https://mega.nz/sdk)
- **MEGA_EMAIL_ID**: Your email id you used to sign up on mega.nz for using premium accounts (Leave th)
- **MEGA_PASSWORD**: Your password for your mega.nz account
- **BLOCK_MEGA_FOLDER**: (Optional field) If you want to remove mega.nz folder support, set it to `True`.
- **BLOCK_MEGA_LINKS**: (Optional field) If you want to remove mega.nz mirror support (bcoz it's too much buggy and unstable), set it to `True`.
- **STOP_DUPLICATE_MIRROR**: (Optional field) (Leave empty if unsure) if this field is set to `True` , bot will check file in drive, if it is present in drive, downloading will ne stopped. (Note: File will be checked using filename, not using filehash, so this feature is not perfect yet)
- **BLOCK_MEGA_LINKS**: (Optional field) If you want to remove mega.nz mirror support, set it to `True`.
- **STOP_DUPLICATE_MIRROR**: (Optional field) (Leave empty if unsure) if this field is set to `True`, bot will check file in drive, if it is present in Drive, downloading will be stopped. (Note: File will be checked using filename, not using filehash, so this feature is not perfect yet)
- **ENABLE_FILESIZE_LIMIT**: Set it to `True` if you want to use `MAX_TORRENT_SIZE`.
- **MAX_TORRENT_SIZE**: To limit the torrent mirror size, Fill The amount you want to limit, examples: if you fill `15` it will limit `15gb`.
- **MAX_TORRENT_SIZE**: To limit the Torrent mirror size, Fill The amount you want to limit, examples: if you fill `15` it will limit `15gb`.
- **IMAGE_URL**: (Optional field) Show Image/Logo in /start message. Fill value of image your link image, use telegra.ph or any direct link image.
- **UPTOBOX_TOKEN**: Uptobox token to mirror uptobox links. Get it from [Uptobox Premium Account](https://uptobox.com/my_account).
- **SHORTENER_API**: Fill your shortener api key if you are using shortener.
- **SHORTENER**: (Optional field) if you want to use shortener in Gdrive and index link, fill shotener url here. Examples:
- **SHORTENER_API**: Fill your Shortener api key if you are using Shortener.
- **SHORTENER**: (Optional field) if you want to use Shortener in Gdrive and index link, fill shotener url here. Examples:
```
exe.io, gplinks.in, shrinkme.io, urlshortx.com, shortzon.com
```
Expand Down Expand Up @@ -131,7 +130,7 @@ python3 generate_drive_token.py

## Deploying

- Start docker daemon (skip if already running):
- Start Docker daemon (skip if already running):
```
sudo dockerd
```
Expand All @@ -147,7 +146,7 @@ sudo docker run mirrorbot
## Deploying on Heroku

- Fork this repo then upload **token.pickle** to your forks
- Hit the deploy to heroku button and follow the further instructions in the screen
- Hit the **DEPLOY TO HEROKU** button and follow the further instructions in the screen

**NOTE**: If you didn't upload **token.pickle**, uploading will not work.
<p><a href="https://heroku.com/deploy"> <img src="https://img.shields.io/badge/Deploy%20To%20Heroku-blueviolet?style=for-the-badge&logo=heroku" width="200""/></a></p>
Expand All @@ -156,8 +155,8 @@ sudo docker run mirrorbot
<details>
<summary><b>Click here for more details</b></summary>

- Install [Heroku cli](https://devcenter.heroku.com/articles/heroku-cli)
- Login into your heroku account with command:
- Install [heroku-cli](https://devcenter.heroku.com/articles/heroku-cli)
- Login into your Heroku account with command:
```
heroku login
```
Expand Down Expand Up @@ -185,7 +184,7 @@ git commit -m "Added Creds."
```
git push heroku master --force
```
- Restart Worker by these commands,You can Do it manually too in heroku.
- Restart Worker by these commands,You can Do it manually too in Heroku.
- For Turning off the Bot:
```
heroku ps:scale worker=0 -a appname
Expand All @@ -203,56 +202,57 @@ heroku ps:scale worker=1 -a appname
mirror - Start Mirroring
tarmirror - Upload tar (zipped) file
unzipmirror - Extract files
clone - copy file/folder to drive
watch - mirror YT-DL support link
tarwatch - mirror youtube playlist link as tar
clone - Copy file/folder to Drive
watch - Mirror YT-DL support link
tarwatch - Mirror Youtube playlist link as tar
cancel - Cancel a task
cancelall - Cancel all tasks
del - Delete file from Drive
list - [query] searches files in G-Drive
list - [query] Searches files in G-Drive
status - Get Mirror Status message
stats - Bot Usage Stats
help - Get Detailed Help
speedtest - Check Speed of the host
log - Bot Log [owner only]
restart - restart bot [owner only]
repo - Get the bot repo
```

## Using service accounts for uploading to avoid user rate limit
## Using Service Accounts for uploading to avoid user rate limit
For Service Account to work, you must set **USE_SERVICE_ACCOUNTS="True"** in config file or environment variables
Many thanks to [AutoRClone](https://github.com/xyou365/AutoRclone) for the scripts
**NOTE**: Using service accounts is only recommended while uploading to a team drive.
**NOTE**: Using service accounts is only recommended while uploading to a Team Drive.

## Generate service accounts. [What is service account](https://cloud.google.com/iam/docs/service-accounts)
## Generate Service Accounts. [What is service account](https://cloud.google.com/iam/docs/service-accounts)

Let us create only the service accounts that we need.
**Warning**: abuse of this feature is not the aim of this project and we do **NOT** recommend that you make a lot of projects, just one project and 100 sa allow you plenty of use, its also possible that over abuse might get your projects banned by google.
Let us create only the Service Accounts that we need.
**Warning**: abuse of this feature is not the aim of this project and we do **NOT** recommend that you make a lot of projects, just one project and 100 SAs allow you plenty of use, its also possible that over abuse might get your projects banned by Google.

```
Note: 1 service account can copy around 750gb a day, 1 project can make 100 service accounts so that's 75tb a day, for most users this should easily suffice.
Note: 1 Service Account can copy around 750gb a day, 1 project can make 100 Service Accounts so that's 75tb a day, for most users this should easily suffice.
```

`python3 gen_sa_accounts.py --quick-setup 1 --new-only`

A folder named accounts will be created which will contain keys for the service accounts
A folder named accounts will be created which will contain keys for the Service Accounts

**NOTE**: If you have created SAs in past from this script, you can also just re download the keys by running:
```
python3 gen_sa_accounts.py --download-keys project_id
```

## Add all the service accounts to the Team Drive
## Add all the Service Accounts to the Team Drive
- Run:
```
python3 add_to_team_drive.py -d SharedTeamDriveSrcID
```

## Youtube-dl authentication using .netrc file
For using your premium accounts in youtube-dl, edit the netrc file according to following format:
For using your premium accounts in Youtube-dl, edit the netrc file according to following format:
```
machine host login username password my_youtube_password
```
where host is the name of extractor (eg. youtube, twitch). Multiple accounts of different hosts can be added each separated by a new line
Where host is the name of extractor (eg. Youtube, Twitch). Multiple accounts of different hosts can be added each separated by a new line

# Support Group
<p><a href="https://t.me/SlamMirrorSupport"> <img src="https://img.shields.io/badge/Slam%20Mirror%20Support-black?style=for-the-badge&logo=telegram" width="230""/></a></p>
Expand All @@ -266,4 +266,4 @@ Thanks to:
- [magneto261290](https://github.com/magneto261290/) for some features
- [SVR666](https://github.com/SVR666/) for some features & fixes

and many more people who aren't mentioned here, but may be found in [Contributors](https://github.com/breakdowns/slam-mirrorbot/graphs/contributors).
And many more people who aren't mentioned here, but may be found in [Contributors](https://github.com/breakdowns/slam-mirrorbot/graphs/contributors).
12 changes: 6 additions & 6 deletions bot/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,13 +101,13 @@ def bot_help(update, context):
help_string = f'''
/{BotCommands.HelpCommand}: To get this message
/{BotCommands.MirrorCommand} [download_url][magnet_link]: Start mirroring the link to google drive
/{BotCommands.MirrorCommand} [download_url][magnet_link]: Start mirroring the link to Google Drive
/{BotCommands.UnzipMirrorCommand} [download_url][magnet_link]: Starts mirroring and if downloaded file is any archive, extracts it to google drive
/{BotCommands.UnzipMirrorCommand} [download_url][magnet_link]: Starts mirroring and if downloaded file is any archive, extracts it to Google Drive
/{BotCommands.TarMirrorCommand} [download_url][magnet_link]: Start mirroring and upload the archived (.tar) version of the download
/{BotCommands.CloneCommand}: Copy file/folder to google drive
/{BotCommands.CloneCommand}: Copy file/folder to Google Drive
/{BotCommands.WatchCommand} [youtube-dl supported link]: Mirror through youtube-dl. Click /{BotCommands.WatchCommand} for more help.
Expand All @@ -133,11 +133,11 @@ def bot_help(update, context):
/{BotCommands.RepoCommand}: Get the bot repo.
/tshelp: Get help for torrent search module.
/tshelp: Get help for Torrent search module.
/weebhelp: Get help for anime, manga and character module.
/weebhelp: Get help for Anime, Manga, and Character module.
/stickerhelp: Get help for stickers module.
/stickerhelp: Get help for Stickers module.
'''
sendMessage(help_string, context.bot, update)

Expand Down
6 changes: 3 additions & 3 deletions bot/modules/anime.py
Original file line number Diff line number Diff line change
Expand Up @@ -252,9 +252,9 @@ def manga(update: Update, _):
@run_async
def weebhelp(update, context):
help_string = '''
• `/anime`*:* search anime
• `/character`*:* search character
• `/manga`*:* search manga
• `/anime`*:* Search Anime
• `/character`*:* Search Character
• `/manga`*:* Search Manga
'''
update.effective_message.reply_photo(IMAGE_URL, help_string, parse_mode=ParseMode.MARKDOWN)

Expand Down
2 changes: 1 addition & 1 deletion bot/modules/mirror.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ def _mirror(bot, update, isTar=False, extract=False):
if link_type == "folder" and BLOCK_MEGA_FOLDER:
sendMessage("Mega folder are blocked!", bot, update)
elif BLOCK_MEGA_LINKS:
sendMessage("Mega links are blocked bcoz mega downloading is too much unstable and buggy. mega support will be added back after fix", bot, update)
sendMessage("Mega links are blocked!", bot, update)
else:
mega_dl = MegaDownloadHelper()
mega_dl.add_download(link, f'{DOWNLOAD_DIR}/{listener.uid}/', listener)
Expand Down
10 changes: 5 additions & 5 deletions bot/modules/stickers.py
Original file line number Diff line number Diff line change
Expand Up @@ -441,11 +441,11 @@ def makepack_internal(
@run_async
def stickhelp(update, context):
help_string = '''
• `/stickerid`*:* Reply to a sticker to me to tell you its file ID.
• `/getsticker`*:* Reply to a sticker to me to upload its raw PNG file.
• `/kang`*:* Reply to a sticker to add it to your pack.
• `/remove`*:* Replay to a sticker to remove sticker from an existing pack.
• `/stickers`*:* Find stickers for given term on combot sticker catalogue.
• `/stickerid`*:* Reply to a Sticker to me to tell you its file ID.
• `/getsticker`*:* Reply to a Sticker to me to upload its raw PNG file.
• `/kang`*:* Reply to a Sticker to add it to your pack.
• `/remove`*:* Replay to a Sticker to remove Sticker from an existing pack.
• `/stickers`*:* Find Stickers for given term on combot Sticker catalogue.
'''
update.effective_message.reply_photo(IMAGE_URL, help_string, parse_mode=ParseMode.MARKDOWN)

Expand Down
2 changes: 1 addition & 1 deletion bot/modules/usage.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ def dyno_usage(update, context):
AppMinutes = math.floor(AppQuotaUsed % 60)

sendMessage(
f"<b>Dyno Usage for</b> <code>{app.name}</code><b>:</b>\n"
f"<b>Dyno Usage for</b> <code>{app.name}</code>:\n"
f"• <code>{AppHours}</code> <b>Hours and</b> <code>{AppMinutes}</code> <b>Minutes - {AppPercent}%</b>\n\n"
"<b>Dyno Remaining this month:</b>\n"
f"• <code>{hours}</code> <b>Hours and</b> <code>{minutes}</code> <b>Minutes - {quota_percent}%</b>\n\n"
Expand Down
6 changes: 3 additions & 3 deletions bot/modules/watch.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ def _watch(bot: Bot, update, isTar=False):
try:
link = message_args[1]
except IndexError:
msg = f"/{BotCommands.WatchCommand} [yt_dl supported link] [quality] |[CustomName] to mirror with youtube_dl.\n\n"
msg += "<b>Note :- Quality and custom name are optional</b>\n\nExample of quality :- audio, 144, 240, 360, 480, 720, 1080, 2160."
msg = f"/{BotCommands.WatchCommand} [youtube-dl supported link] [quality] |[CustomName] to mirror with youtube-dl.\n\n"
msg += "<b>Note: Quality and custom name are optional</b>\n\nExample of quality: audio, 144, 240, 360, 480, 720, 1080, 2160."
msg += "\n\nIf you want to use custom filename, plz enter it after |"
msg += f"\n\nExample :-\n<code>/{BotCommands.WatchCommand} https://youtu.be/Pk_TthHfLeE 720 |Slam</code>\n\n"
msg += f"\n\nExample:\n<code>/{BotCommands.WatchCommand} https://youtu.be/Pk_TthHfLeE 720 |Slam</code>\n\n"
msg += "This file will be downloaded in 720p quality and it's name will be <b>Slam</b>"
sendMessage(msg, bot, update)
return
Expand Down

0 comments on commit cc120a0

Please sign in to comment.