# ------------------------------------------------------------ # Module: Text2Speech # Description: Модуль для озвучки текста # Author: @kmodules # ------------------------------------------------------------ # Licensed under the GNU AGPLv3 # https:/www.gnu.org/licenses/agpl-3.0.html # ------------------------------------------------------------ # Author: @MeKsenon # Commands: .text2speech .t2s # scope: hikka_only # meta banner: https://i.ibb.co/Q6syvcG/5da73c45-b14f-4fe5-a8b6-85fc32a4b6c0.jpg # meta developer: @kmodules # ------------------------------------------------------------ from .. import loader, utils import requests import urllib.parse import os __version__ = (1, 0, 1) @loader.tds class Text2SpeechMod(loader.Module): """Module for converting text to speech""" strings = { "name": "Text2Speech", "processing": "🫥 Converting text to speech...\n\n🎤 Voice: {}", "completed": "🎤 Voice generated!\n\n Text: {}\n\n🗣 Voice: {}", "error": "❌ Error occurred while creating audio", "args_error": "❌ Please specify text and voice (alex/sophia)!" } strings_ru = { "name": "Text2Speech", "processing": "🫥 Озвучиваю текст...\n\n🎤 Голос: {}", "completed": "🎤 Голос озвучен!\n\n Текст: {}\n\n🗣 Голос: {}", "error": "❌ Произошла ошибка при создании аудио", "args_error": "❌ Укажите текст и голос (alex/sophia)!" } async def client_ready(self, client, db): self.client = client async def t2s_process(self, message): args = utils.get_args_raw(message).split() if len(args) < 2: await utils.answer(message, self.strings["args_error"]) return voice = args[-1].lower() text = " ".join(args[:-1]) if voice not in ["alex", "sophia"]: await utils.answer(message, self.strings["args_error"]) return await utils.answer(message, self.strings["processing"].format(voice.title())) base_url = "http://theksenon.pro/api/text2speech/generate" encoded_text = urllib.parse.quote(text) url = f"{base_url}?text={encoded_text}&voice={voice}" try: response = requests.get(url) if response.status_code == 200: with open("voice.mp3", "wb") as f: f.write(response.content) await message.client.send_file( message.chat_id, "voice.mp3", voice_note=True, caption=self.strings["completed"].format(text, voice.title()) ) if message.out: await message.delete() os.remove("voice.mp3") else: await utils.answer(message, self.strings["error"]) except Exception: await utils.answer(message, self.strings["error"]) @loader.command(ru_doc="Преобразовать текст в речь (использование: .text2speech <текст> )", en_doc="Convert text to speech (usage: .text2speech )") async def text2speech(self, message): await self.t2s_process(message) @loader.command(ru_doc="Алиас команды .text2speech (использование: .t2s <текст> )", en_doc="Alias for .text2speech command (usage: .t2s )") async def t2s(self, message): await self.t2s_process(message)