parent
3a5631b9a2
commit
110bfd4cdd
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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":
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue