def clone(self, link): self.transferred_size = 0 try: file_id = self.getIdFromUrl(link) except (KeyError, IndexError): msg = "Google drive ID could not be found in the provided link" return msg, "" msg = "" LOGGER.info(f"File ID: {file_id}") try: meta = self.getFileMetadata(file_id) if meta.get("mimeType") == self.__G_DRIVE_DIR_MIME_TYPE: dir_id = self.create_directory(meta.get('name'), parent_id) result = self.cloneFolder(meta.get('name'), meta.get('name'), meta.get('id'), dir_id) msg += f'<b>Filename : </b><code>{meta.get("name")}</code>\n<b>Size : </b>{get_readable_file_size(self.transferred_size)}' buttons = button_builder.ButtonMaker() buttons.buildbutton( "✨Drive Link✨", self.__G_DRIVE_DIR_BASE_DOWNLOAD_URL.format(dir_id)) if INDEX_URL is not None: url_path = requests.utils.quote(f'{meta.get("name")}') url = f'{INDEX_URL}/{url_path}/' buttons.buildbutton("🌩️ Cloud Mirror 🌩️", url) buttons.buildbutton("🎥 CINEMAFLIX 🎥", self.__cinemaflix) else: file = self.copyFile(meta.get('id'), parent_id) msg += f'<b>Filename : </b><code>{file.get("name")}</code>' buttons = button_builder.ButtonMaker() buttons.buildbutton( "✨Drive Link✨", self.__G_DRIVE_BASE_DOWNLOAD_URL.format(file.get("id"))) try: msg += f'\n<b>Size : </b><code>{get_readable_file_size(int(meta.get("size")))}</code>' except TypeError: pass if INDEX_URL is not None: url_path = requests.utils.quote(f'{file.get("name")}') url = f'{INDEX_URL}/{url_path}' buttons.buildbutton("🌩️ Cloud Mirror 🌩️", url) buttons.buildbutton("🎥 CINEMAFLIX 🎥", self.__cinemaflix) except Exception as err: if isinstance(err, RetryError): LOGGER.info( f"Total Attempts: {err.last_attempt.attempt_number}") err = err.last_attempt.exception() err = str(err).replace('>', '').replace('<', '') LOGGER.error(err) return err, "" return msg, InlineKeyboardMarkup(buttons.build_menu(3))
def drive_list(self, fileName): msg = '' INDEX = -1 content_count = 0 add_title_msg = True for parent_id in DRIVE_ID: response = self.drive_query(parent_id, fileName) INDEX += 1 if response: if add_title_msg == True: msg = f'<h3>Sᴇᴀʀᴄʜ Rᴇsᴜʟᴛs Fᴏʀ Yᴏᴜʀ Kᴇʏᴡᴏʀᴅ : {fileName}</h3><br><b><a href="https://telegram.dog/TVSERIESHOME">💖 JOIN SERIES HUB 💖</a></b> ||<b><a href="https://telegram.dog/MOVIECLUB_CHAT">📥 JOIN MOVIE CLUB 📥</a></b><br><br>' add_title_msg = False msg += f"╾────────────╼<br><b>{DRIVE_NAME[INDEX]}</b><br>╾────────────╼<br>" for file in response: if file.get( 'mimeType' ) == "application/vnd.google-apps.folder": # Detect Whether Current Entity is a Folder or File. msg += f"🗃️<code>{file.get('name')}</code> <b>[Folder]</b><br>" \ f"<b><a href='https://drive.google.com/drive/folders/{file.get('id')}'>🌎G-Dʀɪᴠᴇ Lɪɴᴋ</a></b>" if INDEX_URL[INDEX] is not None: url_path = requests.utils.quote( f'{file.get("name")}') url = f'{INDEX_URL[INDEX]}/{url_path}/' msg += f'<b> | <a href="{url}">📇Iɴᴅᴇx Lɪɴᴋ</a></b>' else: msg += f"🌀<code>{file.get('name')}</code> <b>({self.get_readable_file_size(file.get('size'))})</b><br>" \ f"<b><a href='https://drive.google.com/uc?id={file.get('id')}&export=download'>🌎G-Dʀɪᴠᴇ Lɪɴᴋ</a></b>" if INDEX_URL[INDEX] is not None: url_path = requests.utils.quote( f'{file.get("name")}') url = f'{INDEX_URL[INDEX]}/{url_path}' msg += f'<b> | <a href="{url}">📇Iɴᴅᴇx Lɪɴᴋ</a></b>' msg += '<br><br>' content_count += 1 if content_count == TELEGRAPHLIMIT: self.telegraph_content.append(msg) msg = "" content_count = 0 if msg != '': self.telegraph_content.append(msg) if len(self.telegraph_content) == 0: return "<b>➼Nᴏ Rᴇsᴜʟᴛs Fᴏᴜɴᴅ Fᴏʀ Yᴏᴜʀ Fɪʟᴇ Nᴀᴍᴇ Kᴇʏᴡᴏʀᴅ :(</b>", None for content in self.telegraph_content: self.path.append( telegra_ph.create_page(title='☁️@DEV_BOTSS CLOUD☁️', html_content=content)['path']) self.num_of_path = len(self.path) if self.num_of_path > 1: self.edit_telegraph() msg = f" <b>Sᴇᴀʀᴄʜ Rᴇsᴜʟᴛs Fᴏʀ Yᴏᴜʀ Kᴇʏᴡᴏʀᴅ :</b> ➼ {fileName} 👇 " buttons = button_builder.ButtonMaker() buttons.buildbutton("☘️ CLICK HERE FOR FILE ☘️", f"https://telegra.ph/{self.path[0]}") return msg, InlineKeyboardMarkup(buttons.build_menu(1))
def onUploadComplete(self, link: str): with download_dict_lock: msg = f'<b>Filename : </b><code>{download_dict[self.uid].name()}</code>\n<b>Size : </b><code>{download_dict[self.uid].size()}</code>' buttons = button_builder.ButtonMaker() buttons.buildbutton("⚡Drive Link⚡", link) LOGGER.info(f'Done Uploading {download_dict[self.uid].name()}') if INDEX_URL is not None: url_path = requests.utils.quote(f'{download_dict[self.uid].name()}') share_url = f'{INDEX_URL}/{url_path}' if os.path.isdir(f'{DOWNLOAD_DIR}/{self.uid}/{download_dict[self.uid].name()}'): share_url += '/' buttons.buildbutton("💥Index Link💥", share_url) if self.message.from_user.username: uname = f"@{self.message.from_user.username}" else: uname = f'<a href="tg://user?id={self.message.from_user.id}">{self.message.from_user.first_name}</a>' if uname is not None: msg += f'\n\nHey {uname}, your file is uploaded' try: fs_utils.clean_download(download_dict[self.uid].path()) except FileNotFoundError: pass del download_dict[self.uid] count = len(download_dict) sendMarkup(msg, self.bot, self.update, InlineKeyboardMarkup(buttons.build_menu(2))) if count == 0: self.clean() else: update_all_messages()
def onUploadComplete(self, link: str): with download_dict_lock: msg = f'<u>𝗣𝗼𝘄𝗲𝗿𝗲𝗱 𝗕𝘆</u> <a href="https://t.me/premiumcoursesdrive">📚 Courses Drive 📚</a>\n\n𝗙𝗶𝗹𝗲𝗻𝗮𝗺𝗲🗂 : <code>{download_dict[self.uid].name()}</code>\n𝗦𝗶𝘇𝗲 ⚖️ : <code>{download_dict[self.uid].size()}</code>\n\nOnly Use TeamDrive Link if you have Access.\nDon\'t request access through this link' buttons = button_builder.ButtonMaker() buttons.buildbutton("📚 Course Link 📚", link) LOGGER.info(f'Done Uploading {download_dict[self.uid].name()}') if INDEX_URL is not None: url_path = requests.utils.quote( f'{download_dict[self.uid].name()}') share_url = f'{INDEX_URL}/{url_path}' if os.path.isdir( f'{DOWNLOAD_DIR}/{self.uid}/{download_dict[self.uid].name()}' ): share_url += '/' buttons.buildbutton("Index Link", share_url) if self.message.from_user.username: uname = f"@{self.message.from_user.username}" else: uname = f'<a href="tg://user?id={self.message.from_user.id}">{self.message.from_user.first_name}</a>' if uname is not None: msg += f'\n\nHey {uname}, your file is uploaded' try: fs_utils.clean_download(download_dict[self.uid].path()) except FileNotFoundError: pass del download_dict[self.uid] count = len(download_dict) sendMarkup(msg, self.bot, self.update, InlineKeyboardMarkup(buttons.build_menu(2))) if count == 0: self.clean() else: update_all_messages()
def start(update, context): buttons = button_builder.ButtonMaker() buttons.buildbutton("Repo", "https://github.com/usmanmughalji/Drive-X-Search-Bot") reply_markup = InlineKeyboardMarkup(buttons.build_menu(1)) uptime = get_readable_time((time.time() - botStartTime)) LOGGER.info('UID: {} - UN: {} - MSG: {}'.format( update.message.chat.id, update.message.chat.username, update.message.text)) if CustomFilters.authorized_user(update) or CustomFilters.authorized_chat( update): if update.message.chat.type == "private": sendMessage( f"Hey I'm Alive 🙂 \n\nSince: {uptime} \n\nWelcome to <b>Search-X Bot</b>", context.bot, update) else: start_string = '\x1f<b>This Bot Can Search In All Of Your Google Drives!</b>\x1f' sendMessage(start_string, context.bot, update) else: sendMarkup( 'Oops! not a Authorized user.\n\nPlease Deploy Your Own <b>Drive-X-Search-Bot</b>.', context.bot, update, reply_markup, )
def drive_list(self, fileName): msg = "" # Create Search Query for API request. query = f"'{parent_id}' in parents and (name contains '{fileName}')" response = self.__service.files().list(supportsTeamDrives=True, includeTeamDriveItems=True, q=query, spaces='drive', pageSize=200, fields='files(id, name, mimeType, size)', orderBy='modifiedTime desc').execute() if response["files"]: content_count = 0 self.telegraph_content = [] self.path = [] msg += f'<h4>Results : {fileName}</h4><br>@Oreooo #Misaka<br><br>' for file in response.get('files', []): if file.get('mimeType') == "application/vnd.google-apps.folder": # Detect Whether Current Entity is a Folder or File. msg += f"⁍<code>{file.get('name')}<br>(folder📁)</code><br>" \ f"<b><a href='https://drive.google.com/drive/folders/{file.get('id')}'>Drive Link</a></b>" if INDEX_URL is not None: url_path = requests.utils.quote(f'{file.get("name")}') url = f'{INDEX_URL}/{url_path}/' msg += f' <b>| <a href="{url}">Index Link</a></b>' else: msg += f"⁍<code>{file.get('name')}<br>({get_readable_file_size(int(file.get('size')))})📄</code><br>" \ f"<b><a href='https://drive.google.com/uc?id={file.get('id')}&export=download'>Drive Link</a></b>" if INDEX_URL is not None: url_path = requests.utils.quote(f'{file.get("name")}') url = f'{INDEX_URL}/{url_path}' msg += f' <b>| <a href="{url}">Index Link</a></b>' msg += '<br><br>' content_count += 1 if content_count == TELEGRAPHLIMIT : self.telegraph_content.append(msg) msg = "" content_count = 0 if msg != '': self.telegraph_content.append(msg) for content in self.telegraph_content : self.path.append(telegra_ph.create_page(title = 'Misaka', html_content=content )['path']) self.num_of_path = len(self.path) if self.num_of_path > 1: self.edit_telegraph() msg = f"<b>Search Results For {fileName} 👇</b>" buttons = button_builder.ButtonMaker() buttons.buildbutton("HERE", f"https://telegra.ph/{self.path[0]}") return msg, InlineKeyboardMarkup(buttons.build_menu(1)) else : return "No Result Found :(", None
def drive_list(self, fileName): msg = '' INDEX = -1 content_count = 0 add_title_msg = True for parent_id in DRIVE_ID: response = self.drive_query(parent_id, fileName) INDEX += 1 if response: if add_title_msg == True: msg = f'<h3>Search Results for : {fileName}</h3><br><br><h4>№ To Get Access To Drive Links <a href="https://groups.google.com/g/gdrivemirrorcloud">№Join Google Group</a></h4><br><br>' add_title_msg = False msg += f"тОтттттттттттттМ<br><b>{DRIVE_NAME[INDEX]}</b><br>тОтттттттттттттМ<br>" for file in response: if file.get( 'mimeType' ) == "application/vnd.google-apps.folder": # Detect Whether Current Entity is a Folder or File. msg += f"№<code>{file.get('name')}</code> <b>(folder)</b><br>" \ f"<b><a href='https://drive.google.com/drive/folders/{file.get('id')}'>Drive Link</a></b>" if INDEX_URL[INDEX] is not None: url_path = requests.utils.quote( f'{file.get("name")}') url = f'{INDEX_URL[INDEX]}/{url_path}/' msg += f'<b> | <a href="{url}">Index Link</a></b>' else: msg += f"№<code>{file.get('name')}</code> <b>({self.get_readable_file_size(file.get('size'))})</b><br>" \ f"<b><a href='https://drive.google.com/uc?id={file.get('id')}&export=download'>Drive Link</a></b>" if INDEX_URL[INDEX] is not None: url_path = requests.utils.quote( f'{file.get("name")}') url = f'{INDEX_URL[INDEX]}/{url_path}' msg += f'<b> | <a href="{url}">Index Link</a></b>' msg += '<br><br>' content_count += 1 if content_count == TELEGRAPHLIMIT: self.telegraph_content.append(msg) msg = "" content_count = 0 if msg != '': self.telegraph_content.append(msg) if len(self.telegraph_content) == 0: return "No Result Found :(", None for content in self.telegraph_content: self.path.append( telegra_ph.create_page(title='Gdrive Mirror Cloud', html_content=content)['path']) self.num_of_path = len(self.path) if self.num_of_path > 1: self.edit_telegraph() msg = f" Search Results For {fileName} № " buttons = button_builder.ButtonMaker() buttons.buildbutton("CLICK HERE", f"https://telegra.ph/{self.path[0]}") return msg, InlineKeyboardMarkup(buttons.build_menu(1))
def drive_list(self, fileName): msg = f'<h4>Search Results for : {fileName}</h4><br><br>' # Create Search Query for API request. Search_fileName = fileName.replace(" ", "' and name contains '") INDEX_ID = 0 for parent_id in DRIVE_ID: query = f"'{parent_id}' in parents and (name contains '{Search_fileName}')" response = self.__service.files().list( supportsTeamDrives=True, includeTeamDriveItems=True, q=query, spaces='drive', pageSize=PAGE_SIZE, fields='files(id, name, mimeType, size)', orderBy='modifiedTime desc').execute() index_url = INDEX_URL[INDEX_ID] INDEX_ID += 1 if response["files"]: for file in response.get('files', []): if file.get( 'mimeType' ) == "application/vnd.google-apps.folder": # Detect Whether Current Entity is a Folder or File. msg += f"📁 <code>{file.get('name')}<br>(folder)</code><br>" \ f"<b><a href='https://drive.google.com/drive/folders/{file.get('id')}'>GDrive Link</a></b>" if index_url is not None: url_path = requests.utils.quote( f'{file.get("name")}') url = f'{index_url}/{url_path}/' msg += f' <b>| <a href="{url}">Index Link</a></b>' else: msg += f"📄 <code>{file.get('name')}<br>({self.get_readable_file_size(file.get('size'))})</code><br>" \ f"<b><a href='https://drive.google.com/uc?id={file.get('id')}&export=download'>GDrive Link</a></b>" if index_url is not None: url_path = requests.utils.quote( f'{file.get("name")}') url = f'{index_url}/{url_path}' msg += f' <b>| <a href="{url}">Index Link</a></b>' msg += '<br><br>' else: None telegraph = Telegraph() telegraph.create_account(short_name='Asta') response = telegraph.create_page(title='GDrive Search Bot', author_name='Adnan Ahmad', author_url='https://t.me/viperadnan', html_content=msg)['path'] msg = f"<b>Search Results For :</b> <code>{fileName}</code>" buttons = button_builder.ButtonMaker() buttons.buildbutton("Open in Telegraph", f"https://telegra.ph/{response}") return msg, InlineKeyboardMarkup(buttons.build_menu(1))
def drive_list(self, fileName): msg = '' INDEX = -1 content_count = 0 add_title_msg = True for parent_id in DRIVE_ID : response = self.drive_query(parent_id, fileName) INDEX += 1 if response: if add_title_msg == True: msg = f'<h3>Search Results for : {fileName}</h3><br>@LoaderXbot #ProjektX<br><br>' add_title_msg = False msg += f"╾────────────╼<br><b>{DRIVE_NAME[INDEX]}</b><br>╾────────────╼<br>" for file in response: if file.get('mimeType') == "application/vnd.google-apps.folder": # Detect Whether Current Entity is a Folder or File. msg += f"�<code>{file.get('name')}</code> <b>(folder)</b><br>" \ f"<b><a href='https://drive.google.com/drive/folders/{file.get('id')}'>Drive Link</a></b>" if INDEX_URL[INDEX] is not None: url_path = "/".join([requests.utils.quote(n, safe='') for n in self.get_recursive_list(file, parent_id)]) url = f'{INDEX_URL[INDEX]}/{url_path}/' msg += f'<b> | <a href="{url}">Index Link</a></b>' else: msg += f"📄<code>{file.get('name')}</code> <b>({self.get_readable_file_size(file.get('size'))})</b><br>" \ f"<b><a href='https://drive.google.com/uc?id={file.get('id')}&export=download'>Drive Link</a></b>" if INDEX_URL[INDEX] is not None: url_path = "/".join([requests.utils.quote(n, safe ='') for n in self.get_recursive_list(file, parent_id)]) url = f'{INDEX_URL[INDEX]}/{url_path}' msg += f'<b> | <a href="{url}">Index Link</a></b>' msg += '<br><br>' content_count += 1 if content_count == TELEGRAPHLIMIT : self.telegraph_content.append(msg) msg = "" content_count = 0 if msg != '': self.telegraph_content.append(msg) if len(self.telegraph_content) == 0: return "No Result Found :(", None for content in self.telegraph_content : self.path.append(telegra_ph.create_page(title = 'LoaderX', html_content=content )['path']) self.num_of_path = len(self.path) if self.num_of_path > 1: self.edit_telegraph() msg = f" Search Results For {fileName} 👇 " buttons = button_builder.ButtonMaker() buttons.buildbutton("CLICK HERE", f"https://telegra.ph/{self.path[0]}") return msg, InlineKeyboardMarkup(buttons.build_menu(1))
def drive_list(self, fileName): msg = f'<h4>Results : {fileName}</h4><br>@LoaderXbot #ProjektX<br><br>' # Create Search Query for API request. INDEX_ID = 0 for parent_id in DRIVE_ID: query = f"'{parent_id}' in parents and (name contains '{fileName}')" response = self.__service.files().list( supportsTeamDrives=True, includeTeamDriveItems=True, q=query, spaces='drive', pageSize=200, fields='files(id, name, mimeType, size)', orderBy='modifiedTime desc').execute() index_url = INDEX_URL[INDEX_ID] INDEX_ID += 1 msg += f"тОтттттттттттттМ<br><b>Team Drive : {INDEX_ID}</b><br>тОтттттттттттттМ<br>" if response["files"]: for file in response.get('files', []): if file.get( 'mimeType' ) == "application/vnd.google-apps.folder": # Detect Whether Current Entity is a Folder or File. msg += f"т<code>{file.get('name')}<br>(folder№)</code><br>" \ f"<b><a href='https://drive.google.com/drive/folders/{file.get('id')}'>Drive Link</a></b>" if index_url is not None: url_path = requests.utils.quote( f'{file.get("name")}') url = f'{index_url}/{url_path}/' msg += f' <b>| <a href="{url}">Index Link</a></b>' else: msg += f"т<code>{file.get('name')}<br>({self.get_readable_file_size(file.get('size'))})№</code><br>" \ f"<b><a href='https://drive.google.com/uc?id={file.get('id')}&export=download'>Drive Link</a></b>" if index_url is not None: url_path = requests.utils.quote( f'{file.get("name")}') url = f'{index_url}/{url_path}' msg += f' <b>| <a href="{url}">Index Link</a></b>' msg += '<br><br>' else: msg += "т <code>No Results</code><br><br>" telegraph = Telegraph() telegraph.create_account(short_name='Asta') response = telegraph.create_page(title='LoaderX', author_name='svr666', author_url='https://t.me/svr666', html_content=msg)['path'] msg = f"<b>Search Results For {fileName} №</b>" buttons = button_builder.ButtonMaker() buttons.buildbutton("HERE", f"https://telegra.ph/{response}") return msg, InlineKeyboardMarkup(buttons.build_menu(1))
def drive_list(self, fileName): fileName = self.escapes(str(fileName)) msg = '' content_count = 0 add_title_msg = True for INDEX, parent_id in enumerate(DRIVE_ID): response = self.drive_query(parent_id, fileName) if response: if add_title_msg: msg = f'<h3>Search Results for : {fileName}</h3>' add_title_msg = False msg += f"————————————<br><b>{DRIVE_NAME[INDEX]}</b><br>————————————<br>" for file in response: if file.get( 'mimeType' ) == "application/vnd.google-apps.folder": # Detect Whether Current Entity is a Folder or File. furl = f"https://drive.google.com/drive/folders/{file.get('id')}" msg += f"📁 <code>{file.get('name')}<br>(folder)</code><br>" msg += f"<b><a href={furl}>Drive Link</a></b>" if INDEX_URL[INDEX] is not None: url_path = requests.utils.quote( f'{file.get("name")}') url = f'{INDEX_URL[INDEX]}/{url_path}/' msg += f' <b>| <a href="{url}">Index Link</a></b>' elif file.get('mimeType' ) == 'application/vnd.google-apps.shortcut': msg += f"⁍<a href='https://drive.google.com/drive/folders/{file.get('id')}'>{file.get('name')}" \ f"</a> (shortcut)" # Excluded index link as indexes cant download or open these shortcuts else: furl = f"https://drive.google.com/uc?id={file.get('id')}&export=download" msg += f"📄 <code>{file.get('name')}<br>({self.get_readable_file_size(file.get('size'))})</code><br>" \ f"<b><a href={furl}>Drive Link</a></b>" if INDEX_URL[INDEX] is not None: url_path = requests.utils.quote( f'{file.get("name")}') url = f'{INDEX_URL[INDEX]}/{url_path}' msg += f'<b> | <a href="{url}">Index Link</a></b>' msg += '<br><br>' content_count += 1 if content_count == TELEGRAPHLIMIT: self.telegraph_content.append(msg) msg = "" if msg != '': self.telegraph_content.append(msg) if len(self.telegraph_content) == 0: return "No Result Found ❌", None for content in self.telegraph_content: self.path.append( Telegraph(access_token=telegraph_token).create_page( title=TELEGRAPH_CHANGES + ' ' + 'Bot', author_name=TELEGRAPH_CHANGES + ' ' + 'Search Bot', author_url=BOT_SOURCE_CODE, html_content=content)['path']) self.num_of_path = len(self.path) if self.num_of_path > 1: self.edit_telegraph() msg = f"<b>Found {content_count} results for <i>{fileName}</i></b>" buttons = button_builder.ButtonMaker() buttons.buildbutton("🔎 VIEW", f"https://telegra.ph/{self.path[0]}") return msg, InlineKeyboardMarkup(buttons.build_menu(1))