Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
anasty17 committed Sep 22, 2021
2 parents 8d0ff42 + 85a732f commit 3f1b109
Show file tree
Hide file tree
Showing 8 changed files with 75 additions and 70 deletions.
15 changes: 14 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
![Docker Pulls](https://img.shields.io/docker/pulls/breakdowns/mega-sdk-python?label=Docker%20Pull)
[![Channel](https://img.shields.io/badge/Join%20Channel-!-red)](https://t.me/SlamMirrorUpdates)

**Slam Mirror Bot** is a _multipurpose_ Telegram Bot written in Python for mirroring/leeching files on the Internet to our beloved Google Drive. Based on [python-aria-mirror-bot](https://github.com/lzzy12/python-aria-mirror-bot)
**Slam Mirror Bot** is a _multipurpose_ Telegram Bot written in Python for mirroring files on the Internet to our beloved Google Drive. Based on [python-aria-mirror-bot](https://github.com/lzzy12/python-aria-mirror-bot)

# Features:
<details>
Expand Down Expand Up @@ -204,11 +204,24 @@ qbmirror - Start Mirroring using qBittorrent
qbtarmirror - Start mirroring and upload as .tar using qb
qbzipmirror - Start mirroring and upload as .zip using qb
qbunzipmirror - Extract files using qBittorrent
leech - Leech Torrent/Direct link
tarleech - Leech Torrent/Direct link and upload as .tar
zipleech - Leech Torrent/Direct link and upload as .zip
unzipleech - Leech Torrent/Direct link and extract
qbleech - Leech Torrent/Magnet using qBittorrent
qbtarleech - Leech Torrent/Magnet and upload as .tar using qb
qbzipleech - Leech Torrent/Magnet and upload as .zip using qb
qbunzipleech - Leech Torrent and extract using qb
clone - Copy file/folder to Drive
count - Count file/folder of Drive link
watch - Mirror Youtube-dl supported link
tarwatch - Mirror Youtube playlist link and upload as .tar
zipwatch - Mirror Youtube playlist link and upload as .zip
leechwatch - Leech through Youtube-dl supported link
leechtarwatch - Leech Youtube playlist link and upload as .tar
leechzipwatch - Leech Youtube playlist link and upload as .zip
leechset - Leech settings
setthumb - Set Thumbnail
status - Get Mirror Status message
list - [query] Searches files in Drive
cancel - Cancel a task
Expand Down
26 changes: 13 additions & 13 deletions bot/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,21 +105,21 @@ def log(update, context):
<br><br>
<b>/{BotCommands.QbUnzipMirrorCommand}</b> [magnet_link]: Starts mirroring using qBittorrent and if downloaded file is any archive, extracts it to Google Drive
<br><br>
<b>/{BotCommands.LeechCommand}</b> This command should be used as reply to Magnet link, Torrent link, or Direct link. [this command will SPAM the chat and send the downloads a seperate files, if there is more than one file, in the specified Torrent]
<b>/{BotCommands.LeechCommand}</b>: This command should be used as reply to Magnet link, Torrent link, or Direct link. [this command will SPAM the chat and send the downloads a seperate files, if there is more than one file, in the specified Torrent]
<br><br>
<b>/{BotCommands.TarLeechCommand}</b> This command should be used as reply to Magnet link, Torrent link, or Direct link and upload it as (.tar). [this command will SPAM the chat and send the downloads a seperate files, if there is more than one file, in the specified Torrent]
<b>/{BotCommands.TarLeechCommand}</b>: This command should be used as reply to Magnet link, Torrent link, or Direct link and upload it as (.tar). [this command will SPAM the chat and send the downloads a seperate files, if there is more than one file, in the specified Torrent]
<br><br>
<b>/{BotCommands.ZipLeechCommand}</b> This command should be used as reply to Magnet link, Torrent link, or Direct link and upload it as (.zip). [this command will SPAM the chat and send the downloads a seperate files, if there is more than one file, in the specified Torrent]
<b>/{BotCommands.ZipLeechCommand}</b>: This command should be used as reply to Magnet link, Torrent link, or Direct link and upload it as (.zip). [this command will SPAM the chat and send the downloads a seperate files, if there is more than one file, in the specified Torrent]
<br><br>
<b>/{BotCommands.UnzipLeechCommand}</b> This command should be used as reply to Magnet link, Torrent link, or Direct link and if file is any archive, extracts it. [this command will SPAM the chat and send the downloads a seperate files, if there is more than one file, in the specified Torrent]
<b>/{BotCommands.UnzipLeechCommand}</b>: This command should be used as reply to Magnet link, Torrent link, or Direct link and if file is any archive, extracts it. [this command will SPAM the chat and send the downloads a seperate files, if there is more than one file, in the specified Torrent]
<br><br>
<b>/{BotCommands.QbLeechCommand}</b> This command should be used as reply to Magnet link, Torrent link, or Direct link using qBittorrent. [this command will SPAM the chat and send the downloads a seperate files, if there is more than one file, in the specified Torrent]
<b>/{BotCommands.QbLeechCommand}</b>: This command should be used as reply to Magnet link, Torrent link, or Direct link using qBittorrent. [this command will SPAM the chat and send the downloads a seperate files, if there is more than one file, in the specified Torrent]
<br><br>
<b>/{BotCommands.QbTarLeechCommand}</b> This command should be used as reply to Magnet link, Torrent link, or Direct link and upload it as (.tar) using qBittorrent. [this command will SPAM the chat and send the downloads a seperate files, if there is more than one file, in the specified Torrent]
<b>/{BotCommands.QbTarLeechCommand}</b>: This command should be used as reply to Magnet link, Torrent link, or Direct link and upload it as (.tar) using qBittorrent. [this command will SPAM the chat and send the downloads a seperate files, if there is more than one file, in the specified Torrent]
<br><br>
<b>/{BotCommands.QbZipLeechCommand}</b> This command should be used as reply to Magnet link, Torrent link, or Direct link and upload it as (.zip) using qBittorrent. [this command will SPAM the chat and send the downloads a seperate files, if there is more than one file, in the specified Torrent]
<b>/{BotCommands.QbZipLeechCommand}</b>: This command should be used as reply to Magnet link, Torrent link, or Direct link and upload it as (.zip) using qBittorrent. [this command will SPAM the chat and send the downloads a seperate files, if there is more than one file, in the specified Torrent]
<br><br>
<b>/{BotCommands.QbUnzipLeechCommand}</b> This command should be used as reply to Magnet link, Torrent link, or Direct link and if file is any archive, extracts it using qBittorrent. [this command will SPAM the chat and send the downloads a seperate files, if there is more than one file, in the specified Torrent]
<b>/{BotCommands.QbUnzipLeechCommand}</b>: This command should be used as reply to Magnet link, Torrent link, or Direct link and if file is any archive, extracts it using qBittorrent. [this command will SPAM the chat and send the downloads a seperate files, if there is more than one file, in the specified Torrent]
<br><br>
<b>/{BotCommands.CloneCommand}</b> [drive_url]: Copy file/folder to Google Drive
<br><br>
Expand All @@ -133,15 +133,15 @@ def log(update, context):
<br><br>
<b>/{BotCommands.ZipWatchCommand}</b> [youtube-dl supported link]: Mirror through youtube-dl and zip before uploading
<br><br>
<b>/{BotCommands.LeechWatchCommand}</b> Leech through youtube-dl
<b>/{BotCommands.LeechWatchCommand}</b>: Leech through youtube-dl
<br><br>
<b>/{BotCommands.LeechTarWatchCommand}</b> Leech through youtube-dl and tar before uploading
<b>/{BotCommands.LeechTarWatchCommand}</b>: Leech through youtube-dl and tar before uploading
<br><br>
<b>/{BotCommands.LeechZipWatchCommand}</b> Leech through youtube-dl and zip before uploading
<b>/{BotCommands.LeechZipWatchCommand}</b>: Leech through youtube-dl and zip before uploading
<br><br>
<b>/{BotCommands.LeechSetCommand}</b> Leech Settings
<b>/{BotCommands.LeechSetCommand}</b>: Leech Settings
<br><br>
<b>/{BotCommands.SetThumbCommand}</b> Reply to photo to set it as thumbnail for next uploads
<b>/{BotCommands.SetThumbCommand}</b>: Reply to photo to set it as Thumbnail
<br><br>
<b>/{BotCommands.CancelMirror}</b>: Reply to the message by which the download was initiated and that download will be cancelled
<br><br>
Expand Down
15 changes: 7 additions & 8 deletions bot/helper/ext_utils/bot_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,14 +157,13 @@ def get_readable_message():
msg += "\n\n"
if STATUS_LIMIT is not None and index == STATUS_LIMIT:
break
if STATUS_LIMIT is not None:
if dick_no > STATUS_LIMIT:
msg += f"<b>Page:</b> <code>{PAGE_NO}</code>/<code>{pages}</code> | <b>Tasks:</b> <code>{dick_no}</code>\n"
buttons = button_build.ButtonMaker()
buttons.sbutton("Previous", "pre")
buttons.sbutton("Next", "nex")
button = InlineKeyboardMarkup(buttons.build_menu(2))
return msg, button
if STATUS_LIMIT is not None and dick_no > STATUS_LIMIT:
msg += f"<b>Page:</b> <code>{PAGE_NO}</code>/<code>{pages}</code> | <b>Tasks:</b> <code>{dick_no}</code>\n"
buttons = button_build.ButtonMaker()
buttons.sbutton("Previous", "pre")
buttons.sbutton("Next", "nex")
button = InlineKeyboardMarkup(buttons.build_menu(2))
return msg, button
return msg, ""

def flip(update, context):
Expand Down
18 changes: 9 additions & 9 deletions bot/helper/ext_utils/fs_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,23 +160,23 @@ def get_mime_type(file_path):
return mime_type

def take_ss(video_file, duration):
des_dir = f"Thumbnails"
des_dir = 'Thumbnails'
if not os.path.exists(des_dir):
os.mkdir(des_dir)
des_dir = os.path.join(des_dir, f"{round(time.time())}.jpg")
duration = int(duration) / 2
subprocess.run(["ffmpeg", "-hide_banner", "-loglevel", "error", "-ss", str(duration),
"-i", video_file, "-vframes", "1", des_dir])
if os.path.lexists(des_dir):
Image.open(des_dir).convert("RGB").save(des_dir)
img = Image.open(des_dir)
w, h = img.size
img.resize((320, h))
img.save(des_dir, "JPEG")
return des_dir, 320, h
else:
if not os.path.lexists(des_dir):
return None, 0, 0

Image.open(des_dir).convert("RGB").save(des_dir)
img = Image.open(des_dir)
w, h = img.size
img.resize((320, h))
img.save(des_dir, "JPEG")
return des_dir, 320, h

def split(path, size, split_size, start_time=0, i=1):
out_dir = os.path.dirname(path)
base_name = os.path.basename(path)
Expand Down
22 changes: 11 additions & 11 deletions bot/helper/mirror_utils/download_utils/qbit_downloader.py
Original file line number Diff line number Diff line change
Expand Up @@ -215,20 +215,20 @@ def get_confirm(update, context):
data = query.data
data = data.split(" ")
qdl = getDownloadByGid(data[1])
if qdl is not None:
if user_id != qdl.listener.message.from_user.id:
query.answer(text="Don't waste your time!", show_alert=True)
elif data[0] == "pin":
query.answer(text=data[2], show_alert=True)
elif data[0] == "done":
query.answer()
qdl.client.torrents_resume(torrent_hashes=data[2])
sendStatusMessage(qdl.listener.update, qdl.listener.bot)
query.message.delete()
else:
if qdl is None:
query.answer(text="This task has been cancelled!", show_alert=True)
query.message.delete()

elif user_id != qdl.listener.message.from_user.id:
query.answer(text="Don't waste your time!", show_alert=True)
elif data[0] == "pin":
query.answer(text=data[2], show_alert=True)
elif data[0] == "done":
query.answer()
qdl.client.torrents_resume(torrent_hashes=data[2])
sendStatusMessage(qdl.listener.update, qdl.listener.bot)
query.message.delete()


def get_hash_magnet(mgt):
if mgt.startswith('magnet:'):
Expand Down
8 changes: 2 additions & 6 deletions bot/helper/mirror_utils/upload_utils/pyrogramEngine.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,15 +81,11 @@ def upload_file(self, up_path, file):
if self.thumb is None and thumb is not None and os.path.lexists(thumb):
os.remove(thumb)
elif file.upper().endswith(AUDIO_SUFFIXES):
title = None
artist = None
metadata = extractMetadata(createParser(up_path))
if metadata.has("duration"):
duration = metadata.get('duration').seconds
if metadata.has("title"):
title = metadata.get("title")
if metadata.has("artist"):
artist = metadata.get("artist")
title = metadata.get("title") if metadata.has("title") else None
artist = metadata.get("artist") if metadata.has("artist") else None
self.sent_msg = self.sent_msg.reply_audio(audio=up_path,
quote=True,
caption=file,
Expand Down
33 changes: 15 additions & 18 deletions bot/modules/leech_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,16 @@ def leechSet(update, context):
user_id = update.message.from_user.id
path = f"Thumbnails/{user_id}.jpg"
msg = f"Leech Type for {user_id} user is "
if user_id in AS_DOC_USERS:
if (
user_id in AS_DOC_USERS
or user_id not in AS_MEDIA_USERS
and AS_DOCUMENT
):
msg += "DOCUMENT"
elif user_id in AS_MEDIA_USERS:
msg += "MEDIA"
elif AS_DOCUMENT:
msg += "DOCUMENT"
elif not AS_DOCUMENT:
else:
msg += "MEDIA"
msg += "\nCustom Thmubnail "
if os.path.exists(path):
msg += "exists"
else:
msg += "not exists"
msg += "exists" if os.path.exists(path) else "not exists"
buttons = button_build.ButtonMaker()
buttons.sbutton("As Document", f"doc {user_id}")
buttons.sbutton("As Media", f"med {user_id}")
Expand All @@ -51,29 +48,29 @@ def setLeechType(update, context):
if user_id != int(data[1]):
query.answer(text="Not Yours!", show_alert=True)
elif data[0] == "doc":
if user_id in AS_DOC_USERS:
if (
user_id in AS_DOC_USERS
or user_id not in AS_MEDIA_USERS
and AS_DOCUMENT
):
query.answer(text="Already As Document!", show_alert=True)
elif user_id in AS_MEDIA_USERS:
AS_MEDIA_USERS.remove(user_id)
AS_DOC_USERS.add(user_id)
query.answer(text="Done!", show_alert=True)
elif AS_DOCUMENT:
query.answer(text="Already As Document!", show_alert=True)
elif not AS_DOCUMENT:
else:
AS_DOC_USERS.add(user_id)
query.answer(text="Done!", show_alert=True)
elif data[0] == "med":
if user_id in AS_DOC_USERS:
AS_DOC_USERS.remove(user_id)
AS_MEDIA_USERS.add(user_id)
query.answer(text="Done!", show_alert=True)
elif user_id in AS_MEDIA_USERS:
elif user_id in AS_MEDIA_USERS or not AS_DOCUMENT:
query.answer(text="Already As Media!", show_alert=True)
elif AS_DOCUMENT:
else:
AS_MEDIA_USERS.add(user_id)
query.answer(text="Done!", show_alert=True)
elif not AS_DOCUMENT:
query.answer(text="Already As Media!", show_alert=True)
elif data[0] == "thumb":
path = f"Thumbnails/{user_id}.jpg"
if os.path.lexists(path):
Expand Down
8 changes: 4 additions & 4 deletions bot/modules/mirror.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,13 +205,13 @@ def onUploadComplete(self, link: str, size, files, folders, typ):
chat_id = str(self.message.chat.id)
count = len(files)
if OWNER_ID == int(chat_id):
msg = f'Name: {link}\n'
msg += f'Total Files: {count}'
msg = f'<b>Name:</b> {link}\n'
msg += f'<b>Total Files:</b> {count}'
sendMessage(msg, self.bot, self.update)
else:
chat_id = chat_id[4:]
msg = f"Name: <a href='https://t.me/c/{chat_id}/{self.uid}'>{link}</a>\n"
msg += f'Total Files: {count}\n'
msg = f"<b>Name:</b> <a href='https://t.me/c/{chat_id}/{self.uid}'>{link}</a>\n"
msg += f'<b>Total Files:</b> {count}\n'
msg += f'cc: {uname}\n\n'
fmsg = ''
for index, item in enumerate(list(files), start=1):
Expand Down

0 comments on commit 3f1b109

Please sign in to comment.