import traceback from asyncio import get_running_loop from io import BytesIO from googletrans import Translator from gtts import gTTS from pyrogram import Client, filters from pyrogram.types import Message def convert(text): audio = BytesIO() i = Translator().translate(text, dest="en") lang = i.src tts = gTTS(text, lang=lang) audio.name = lang + ".mp3" tts.write_to_fp(audio) return audio @Client.on_message(filters.command("tts")) async def text_to_speech(_, message: Message): if not message.reply_to_message: return await message.reply_text("Reply To Some Text FFS.") if not message.reply_to_message.text: return await message.reply_text("Reply To Some TextFFS.") m = await message.reply_text("Processing") text = message.reply_to_message.text try: loop = get_running_loop() audio = await loop.run_in_executor(None, convert, text) await message.reply_audio(audio) await m.delete() audio.close() except Exception as e: await m.edit(e) e = traceback.format_exc() print(e)