- Added Custom Filename support
This commit is contained in:
Hafitz Setya 2021-03-15 09:25:23 +07:00 committed by GitHub
parent 3a5631b9a2
commit 110bfd4cdd
Signed by untrusted user: GitHub
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 67 additions and 37 deletions

View File

@ -49,6 +49,7 @@ Fork this repo, than upload credentials.json and token.pickle to your forks
- Shell and Executor
- Index Link support
- Shortener support
- Custom Filename
- Custom Buttons
- Speedtest with picture results
- Extract these filetypes and uploads to google drive

View File

@ -83,11 +83,11 @@ class AriaDownloadHelper(DownloadHelper):
on_download_complete=self.__onDownloadComplete)
def add_download(self, link: str, path,listener):
def add_download(self, link: str, path, listener, filename):
if is_magnet(link):
download = aria2.add_magnet(link, {'dir': path})
download = aria2.add_magnet(link, {'dir': path, 'out': filename})
else:
download = aria2.add_uris([link], {'dir': path})
download = aria2.add_uris([link], {'dir': path, 'out': filename})
if download.error_message: # no need to proceed further at this point
listener.onDownloadError(download.error_message)
return

View File

@ -84,7 +84,7 @@ class TelegramDownloadHelper(DownloadHelper):
if not self.__is_cancelled:
self.__onDownloadError('Internal error occurred')
def add_download(self, message, path):
def add_download(self, message, path, filename):
_message = self._bot.get_messages(message.chat.id, message.message_id)
media = None
media_array = [_message.document, _message.video, _message.audio]
@ -96,9 +96,13 @@ class TelegramDownloadHelper(DownloadHelper):
with global_lock:
# For avoiding locking the thread lock for long time unnecessarily
download = media.file_id not in GLOBAL_GID
if filename == "":
name = media.file_name
else:
name = filename
path = path + name
if download:
self.__onDownloadStart(media.file_name, media.file_size, media.file_id)
self.__onDownloadStart(name, media.file_size, media.file_id)
LOGGER.info(f'Downloading telegram file with id: {media.file_id}')
threading.Thread(target=self.__download, args=(_message, path)).start()
else:

View File

@ -19,7 +19,10 @@ class MyLogger:
# Hack to fix changing changing extension
match = re.search(r'.ffmpeg..Merging formats into..(.*?).$', msg)
if match and not self.obj.is_playlist:
self.obj.name = match.group(1)
newname = match.group(1)
newname = newname.split("/")
newname = newname[-1]
self.obj.name = newname
@staticmethod
def warning(msg):
@ -98,14 +101,17 @@ class YoutubeDLHelper(DownloadHelper):
def onDownloadError(self, error):
self.__listener.onDownloadError(error)
def extractMetaData(self, link, qual):
def extractMetaData(self, link, qual, name):
if 'hotstar' or 'sonyliv' in link:
self.opts['geo_bypass_country'] = 'IN'
with YoutubeDL(self.opts) as ydl:
try:
result = ydl.extract_info(link, download=False)
name = ydl.prepare_filename(result)
if name == "":
name = ydl.prepare_filename(result)
else:
name = name
# noobway hack for changing extension after converting to mp3
if qual == "audio":
name = name.replace(".mp4", ".mp3").replace(".webm", ".mp3")
@ -144,12 +150,12 @@ class YoutubeDLHelper(DownloadHelper):
LOGGER.info("Download Cancelled by User!")
self.onDownloadError("Download Cancelled by User!")
def add_download(self, link, path, qual):
def add_download(self, link, path, qual, name):
pattern = '^.*(youtu\.be\/|youtube.com\/)(playlist?)'
if re.match(pattern, link):
self.opts['ignoreerrors'] = True
self.__onDownloadStart()
self.extractMetaData(link, qual)
self.extractMetaData(link, qual, name)
LOGGER.info(f"Downloading with YT-DL: {link}")
self.__gid = f"{self.vid_id}{self.__listener.uid}"
if qual == "audio":

View File

@ -322,16 +322,16 @@ class GoogleDriveHelper:
buttons = button_build.ButtonMaker()
if SHORTENER is not None and SHORTENER_API is not None:
surl = requests.get('https://{}/api?api={}&url={}&format=text'.format(SHORTENER, SHORTENER_API, durl)).text
buttons.buildbutton("Drive Link", surl)
buttons.buildbutton("⚡Drive Link⚡", surl)
else:
buttons.buildbutton("Drive Link", durl)
buttons.buildbutton("⚡Drive Link⚡", durl)
if INDEX_URL is not None:
url = requests.utils.requote_uri(f'{INDEX_URL}/{meta.get("name")}/')
if SHORTENER is not None and SHORTENER_API is not None:
siurl = requests.get('https://{}/api?api={}&url={}&format=text'.format(SHORTENER, SHORTENER_API, url)).text
buttons.buildbutton("Index Link", siurl)
buttons.buildbutton("🔥Index Link🔥", siurl)
else:
buttons.buildbutton("Index Link", url)
buttons.buildbutton("🔥Index Link🔥", url)
if BUTTON_THREE_NAME is not None and BUTTON_THREE_URL is not None:
buttons.buildbutton(f"{BUTTON_THREE_NAME}", f"{BUTTON_THREE_URL}")
if BUTTON_FOUR_NAME is not None and BUTTON_FOUR_URL is not None:
@ -345,9 +345,9 @@ class GoogleDriveHelper:
buttons = button_build.ButtonMaker()
if SHORTENER is not None and SHORTENER_API is not None:
surl = requests.get('https://{}/api?api={}&url={}&format=text'.format(SHORTENER, SHORTENER_API, durl)).text
buttons.buildbutton("Drive Link ", surl)
buttons.buildbutton("⚡Drive Link⚡", surl)
else:
buttons.buildbutton("Drive Link", durl)
buttons.buildbutton("⚡Drive Link⚡", durl)
try:
msg += f'\n<b>Size: </b><code>{get_readable_file_size(int(meta.get("size")))}</code>'
except TypeError:
@ -356,9 +356,9 @@ class GoogleDriveHelper:
url = requests.utils.requote_uri(f'{INDEX_URL}/{file.get("name")}')
if SHORTENER is not None and SHORTENER_API is not None:
siurl = requests.get('https://{}/api?api={}&url={}&format=text'.format(SHORTENER, SHORTENER_API, url)).text
buttons.buildbutton("Index Link", siurl)
buttons.buildbutton("🔥Index Link🔥", siurl)
else:
buttons.buildbutton("Index Link", url)
buttons.buildbutton("🔥Index Link🔥", url)
if BUTTON_THREE_NAME is not None and BUTTON_THREE_URL is not None:
buttons.buildbutton(f"{BUTTON_THREE_NAME}", f"{BUTTON_THREE_URL}")
if BUTTON_FOUR_NAME is not None and BUTTON_FOUR_URL is not None:

View File

@ -143,9 +143,9 @@ class MirrorListener(listeners.MirrorListeners):
buttons = button_build.ButtonMaker()
if SHORTENER is not None and SHORTENER_API is not None:
surl = requests.get('https://{}/api?api={}&url={}&format=text'.format(SHORTENER, SHORTENER_API, link)).text
buttons.buildbutton("Drive Link", surl)
buttons.buildbutton("⚡Drive Link⚡", surl)
else:
buttons.buildbutton("Drive Link", link)
buttons.buildbutton("⚡Drive Link⚡", link)
LOGGER.info(f'Done Uploading {download_dict[self.uid].name()}')
if INDEX_URL is not None:
share_url = requests.utils.requote_uri(f'{INDEX_URL}/{download_dict[self.uid].name()}')
@ -153,9 +153,9 @@ class MirrorListener(listeners.MirrorListeners):
share_url += '/'
if SHORTENER is not None and SHORTENER_API is not None:
siurl = requests.get('https://{}/api?api={}&url={}&format=text'.format(SHORTENER, SHORTENER_API, share_url)).text
buttons.buildbutton("Index Link", siurl)
buttons.buildbutton("🔥Index Link🔥", siurl)
else:
buttons.buildbutton("Index Link", share_url)
buttons.buildbutton("🔥Index Link🔥", share_url)
if BUTTON_THREE_NAME is not None and BUTTON_THREE_URL is not None:
buttons.buildbutton(f"{BUTTON_THREE_NAME}", f"{BUTTON_THREE_URL}")
if BUTTON_FOUR_NAME is not None and BUTTON_FOUR_URL is not None:
@ -197,10 +197,15 @@ class MirrorListener(listeners.MirrorListeners):
def _mirror(bot, update, isTar=False, extract=False):
message_args = update.message.text.split(' ')
name_args = update.message.text.split('|')
try:
link = message_args[1]
except IndexError:
link = ''
try:
name = name_args[1]
except IndexError:
name = ''
LOGGER.info(link)
link = link.strip()
reply_to = update.message.reply_to_message
@ -213,12 +218,12 @@ def _mirror(bot, update, isTar=False, extract=False):
file = i
break
if len(link) == 0:
if not bot_utils.is_url(link) and not bot_utils.is_magnet(link) or len(link) == 0:
if file is not None:
if file.mime_type != "application/x-bittorrent":
listener = MirrorListener(bot, update, isTar, tag, extract)
tg_downloader = TelegramDownloadHelper(listener)
tg_downloader.add_download(reply_to, f'{DOWNLOAD_DIR}{listener.uid}/')
tg_downloader.add_download(reply_to, f'{DOWNLOAD_DIR}{listener.uid}/', name)
sendStatusMessage(update, bot)
if len(Interval) == 0:
Interval.append(setInterval(DOWNLOAD_STATUS_UPDATE_INTERVAL, update_all_messages))
@ -245,10 +250,10 @@ def _mirror(bot, update, isTar=False, extract=False):
sendMessage("Mega links are blocked bcoz mega downloading is too much unstable and buggy. mega support will be added back after fix", bot, update)
else:
mega_dl = MegaDownloadHelper()
mega_dl.add_download(link, f'{DOWNLOAD_DIR}/{listener.uid}/', listener)
mega_dl.add_download(link, f'{DOWNLOAD_DIR}/{listener.uid}/', listener, name)
sendStatusMessage(update, bot)
else:
ariaDlManager.add_download(link, f'{DOWNLOAD_DIR}/{listener.uid}/', listener)
ariaDlManager.add_download(link, f'{DOWNLOAD_DIR}/{listener.uid}/', listener, name)
sendStatusMessage(update, bot)
if len(Interval) == 0:
Interval.append(setInterval(DOWNLOAD_STATUS_UPDATE_INTERVAL, update_all_messages))

View File

@ -10,20 +10,36 @@ from bot.helper.telegram_helper.filters import CustomFilters
import threading
def _watch(bot: Bot, update: Update, args: list, isTar=False):
def _watch(bot: Bot, update, isTar=False):
mssg = update.message.text
message_args = mssg.split(' ')
name_args = mssg.split('|')
try:
link = args[0]
link = message_args[1]
except IndexError:
msg = f"/{BotCommands.WatchCommand} [yt_dl supported link] [quality] to mirror with youtube_dl.\n\n"
msg += "Example of quality :- audio, 144, 360, 720, 1080.\nNote :- Quality is optional"
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 += "\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 += "This file will be downloaded in 720p quality and it's name will be <b>Slam</b>"
sendMessage(msg, bot, update)
return
try:
qual = args[1]
if "|" in mssg:
mssg = mssg.split("|")
qual = mssg[0].split(" ")[2]
if qual == "":
raise IndexError
else:
qual = message_args[2]
if qual != "audio":
qual = f'bestvideo[height<={qual}]+bestaudio/best[height<={qual}]'
except IndexError:
qual = "bestvideo+bestaudio/best"
try:
name = name_args[1]
except IndexError:
name = ""
reply_to = update.message.reply_to_message
if reply_to is not None:
tag = reply_to.from_user.username
@ -32,7 +48,7 @@ def _watch(bot: Bot, update: Update, args: list, isTar=False):
listener = MirrorListener(bot, update, isTar, tag)
ydl = YoutubeDLHelper(listener)
threading.Thread(target=ydl.add_download,args=(link, f'{DOWNLOAD_DIR}{listener.uid}', qual)).start()
threading.Thread(target=ydl.add_download,args=(link, f'{DOWNLOAD_DIR}{listener.uid}', qual, name)).start()
sendStatusMessage(update, bot)
if len(Interval) == 0:
Interval.append(setInterval(DOWNLOAD_STATUS_UPDATE_INTERVAL, update_all_messages))
@ -40,18 +56,16 @@ def _watch(bot: Bot, update: Update, args: list, isTar=False):
@run_async
def watchTar(update, context):
_watch(context.bot, update, context.args, True)
_watch(context.bot, update, True)
def watch(update, context):
_watch(context.bot, update, context.args)
_watch(context.bot, update)
mirror_handler = CommandHandler(BotCommands.WatchCommand, watch,
pass_args=True,
filters=CustomFilters.authorized_chat | CustomFilters.authorized_user)
tar_mirror_handler = CommandHandler(BotCommands.TarWatchCommand, watchTar,
pass_args=True,
filters=CustomFilters.authorized_chat | CustomFilters.authorized_user)
dispatcher.add_handler(mirror_handler)
dispatcher.add_handler(tar_mirror_handler)