from pyrogram import Client from pyrogram import filters import asyncio import subprocess from pathlib import Path # api_id = #api_hash = "" #bot_token = "" # app = Client( # "2pdf", # api_id=api_id, api_hash=api_hash, # bot_token=bot_token # ) app = Client("2pdf") def validDocument(mime_type): # Checks if we support this file format if mime_type == "application/msword" or mime_type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document": return True else: return False async def downloadDocument(file_id, file_name): filepath = await app.download_media(file_id, file_name=file_name) return filepath async def convertDocument(sourceDocumentPath, sourceDocumentName): convertArgs = "/usr/bin/libreoffice --headless -env:UserInstallation=file:///tmp/2g2pdf_${USER} --convert-to pdf " + "\"downloads/" + sourceDocumentName + "\"" + " --outdir output" subprocess.call(convertArgs, shell=True) outputDocumentPath = "$(pwd)/output/" + sourceDocumentName sourceCleanup = "rm " + "\"downloads/" + sourceDocumentName + "\"" outputDocumentName = Path(f"{sourceDocumentName}").with_suffix('.pdf') subprocess.call(sourceCleanup, shell=True) outputDocumentPath = Path("./output") / outputDocumentName return outputDocumentPath async def uploadDocument(outputDocumentPath, chat, message): await app.send_document(document=outputDocumentPath, chat_id=chat, reply_to_message_id=message) @app.on_message(filters.text) async def echo(client, message): print(message.text) await message.reply(message.text) @app.on_message(filters.document) # Get all of the messages that have files in them async def documentFetcher(client, message): mime_type = message.document.mime_type if validDocument(mime_type=mime_type) == True: sourceDocumentPath = await downloadDocument(message.document.file_id, message.document.file_name) outputDocumentPath = await convertDocument(sourceDocumentPath, message.document.file_name) await uploadDocument(outputDocumentPath, message.chat.id, message.id) else: return # Hopefully message will get ignored and no futher resources will be used app.run()