async def g_drive_setup(message): # The gDrive table stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. creds = sql.get_credential(message.from_user.id) # If there are no (valid) credentials available, let the user log in. if not creds or not creds.invalid: if creds and creds.refresh_token: creds.refresh(get_new_http_instance()) # Save the credentials for the next run sql.set_credential(message.from_user.id, creds) # await message.edit_text(text="gDrive authentication credentials, refreshed") else: global flow # Run through the OAuth flow and retrieve credentials flow = OAuth2WebServerFlow( G_DRIVE_CLIENT_ID, G_DRIVE_CLIENT_SECRET, OAUTH_SCOPE, redirect_uri=REDIRECT_URI, ) authorize_url = flow.step1_get_authorize_url() reply_string = f"please visit {authorize_url} and " reply_string += "send back " reply_string += ( f"<code>{COMMAND_HAND_LER}gdrive confirm (RECEIVED_CODE)</code>" ) await message.edit_text(text=reply_string, disable_web_page_preview=True) else: await message.edit_text(text="don't type this command -_-")
async def g_drive_commands(client, message): status_message = await message.reply_text("...", quote=True) if len(message.command) > 1: current_recvd_command = message.command[1] if current_recvd_command == "setup": await g_drive_setup(message) elif current_recvd_command == "reset": sql.clear_credential(message.from_user.id) await status_message.edit_text(text="cleared saved credentials") elif current_recvd_command == "confirm": if len(message.command) == 3: await AskUserToVisitLinkAndGiveCode(status_message, message.command[2]) else: await status_message.edit_text(text="please give auth_code correctly") elif current_recvd_command == "search": # The gDrive table stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. creds = sql.get_credential(message.from_user.id) # If there are no (valid) credentials available, throw error if not creds or not creds.invalid: if creds and creds.refresh_token: creds.refresh(get_new_http_instance()) # Save the credentials for the next run sql.set_credential(message.from_user.id, creds) # if len(message.command) > 2: search_query = " ".join(message.command[2:]) message_string = "<b>gDrive <i>Search Query</i></b>:" message_string += f"<code>{search_query}</code>\n\n" message_string += "<i>Results</i>:\n" message_string += await search_g_drive(creds, search_query) await status_message.edit_text( text=message_string, disable_web_page_preview=True ) else: await status_message.edit_text( "syntax:\n" f"<code>{COMMAND_HAND_LER}gdrive search (QUERY)</code> " ) else: await status_message.edit_text( "invalid credentials, supplied??!\n" f"use <code>{COMMAND_HAND_LER}gdrive reset</code> " "to clear saved credentials" ) return else: await status_message.edit_text( text=f"please run <code>{COMMAND_HAND_LER}gdrive setup</code> first" ) elif current_recvd_command == "upload": # The gDrive table stores the user's access and refresh tokens, and is # created automatically when the authorization flow completes for the first # time. creds = sql.get_credential(message.from_user.id) # If there are no (valid) credentials available, throw error if not creds or not creds.invalid: if creds and creds.refresh_token: creds.refresh(get_new_http_instance()) # Save the credentials for the next run sql.set_credential(message.from_user.id, creds) # if len(message.command) > 2: upload_file_name = " ".join(message.command[2:]) if not os.path.exists(upload_file_name): await status_message.edit_text( "invalid file path provided?" ) return gDrive_file_id = await gDrive_upload_file( creds, upload_file_name, status_message ) reply_message_text = "" if gDrive_file_id is not None: reply_message_text += "Uploaded to <a href='" reply_message_text += "https://drive.google.com/open?id=" reply_message_text += gDrive_file_id reply_message_text += "'>" + gDrive_file_id + "</a>" else: reply_message_text += "failed to upload.. check logs?" await status_message.edit_text( text=reply_message_text, disable_web_page_preview=True ) elif message.reply_to_message is not None: if not os.path.isdir(TMP_DOWNLOAD_DIRECTORY): os.makedirs(TMP_DOWNLOAD_DIRECTORY) download_location = TMP_DOWNLOAD_DIRECTORY + "/" c_time = time.time() the_real_download_location = await client.download_media( message=message.reply_to_message, file_name=download_location, progress=progress_for_pyrogram, progress_args=( "trying to download", status_message, c_time, ), ) await status_message.edit( f"Downloaded to <code>{the_real_download_location}</code>" ) if not os.path.exists(the_real_download_location): await message.edit_text("invalid file path provided?") return gDrive_file_id = await gDrive_upload_file( creds, the_real_download_location, status_message ) reply_message_text = "" if gDrive_file_id is not None: reply_message_text += "Uploaded to <a href='" reply_message_text += "https://drive.google.com/open?id=" reply_message_text += gDrive_file_id reply_message_text += "'>" + gDrive_file_id + "</a>" else: reply_message_text += "failed to upload.. check logs?" os.remove(the_real_download_location) await status_message.edit_text( text=reply_message_text, disable_web_page_preview=True ) else: await status_message.edit_text( "syntax:\n" f"<code>{COMMAND_HAND_LER}gdrive upload (file name)</code> " ) else: await status_message.edit_text( "invalid credentials, supplied??!\n" f"use <code>{COMMAND_HAND_LER}gdrive reset</code> " "to clear saved credentials" ) return else: await status_message.edit_text( text=f"please run <code>{COMMAND_HAND_LER}gdrive setup</code> first" ) else: await status_message.edit_text(text="type correctly")