Merge branch 'master' of https://github.com/SlamDevs/slam-mirrorbot
This commit is contained in:
commit
3f1b109801
15
README.md
15
README.md
|
|
@ -8,7 +8,7 @@
|
|||

|
||||
[](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
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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:'):
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
Loading…
Reference in New Issue