This commit is contained in:
anas 2021-09-22 07:17:44 +03:00
commit 3f1b109801
8 changed files with 75 additions and 70 deletions

View File

@ -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>
@ -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

View File

@ -105,21 +105,21 @@ help_string_telegraph = f'''<br>
<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>
@ -133,15 +133,15 @@ help_string_telegraph = f'''<br>
<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>

View File

@ -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):

View File

@ -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)

View File

@ -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:'):

View File

@ -81,15 +81,11 @@ class TgUploader:
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,

View File

@ -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}")
@ -51,15 +48,17 @@ 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":
@ -67,13 +66,11 @@ def setLeechType(update, context):
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):

View File

@ -205,13 +205,13 @@ class MirrorListener(listeners.MirrorListeners):
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):