diff --git a/bot/handlers.py b/bot/handlers.py index 1f7dd43..bcd6889 100644 --- a/bot/handlers.py +++ b/bot/handlers.py @@ -1,39 +1,79 @@ -from aiogram import Router +from aiogram import Router, F from aiogram.fsm.context import FSMContext -from aiogram.types import Message,FSInputFile +from aiogram.types import Message,FSInputFile,ReplyKeyboardRemove from aiogram.filters import Command +from aiogram.fsm.state import State, StatesGroup -from keyboards.main import keyboard_main +from keyboards.keyboards import get_main_keyboard +from keyboards.setLanguage import languagekb from modules.generateVocal import generateVocal from models.ModelForm import Form from models.ModelText2ImageAPI import Text2ImageAPI +import modules.translateText as TF + from modules.generateImage import generateImage from apiRequests.generateText import generateText import os + router = Router() +class LanguageState(StatesGroup): + CHOSENLANGUAGE = State() + @router.message(Command("start")) -async def start_handler(msg: Message): - await msg.answer("Привет! Я могу сгенерировать вокал!🎤🎧", reply_markup=keyboard_main) +async def cmd_start(msg: Message, state: FSMContext): + await msg.delete() + await msg.answer("Hello, setup my language!", reply_markup=languagekb) + await state.set_state(LanguageState.CHOSENLANGUAGE) -@router.message(lambda message: message.text == "У меня уже есть текст🎶") -async def request_text(msg: Message, state: FSMContext): - await msg.answer("Отправьте мне текст") +@router.message(LanguageState.CHOSENLANGUAGE) +async def choose_language(msg: Message,state: FSMContext): + if msg.text == "English 🇬🇧": + lang = 'en' + await msg.answer(await TF.translation("Вы успешно установили язык!",lang),reply_markup=ReplyKeyboardRemove()) + await state.update_data(Lang = lang) + await start_handler(msg, state) + + elif msg.text in "Russian 🇷🇺": + lang = 'ru' + await msg.answer(await TF.translation("Вы успешно установили язык!",lang),reply_markup=ReplyKeyboardRemove()) + await state.update_data(Lang = lang) + await start_handler(msg, state) +@router.message(LanguageState.CHOSENLANGUAGE) +async def start_handler(msg: Message,state: FSMContext): + data = await state.get_data() + lang = data.get('Lang') + await msg.answer(await TF.translation("Привет! Я могу сгенерировать вокал!🎤🎧", lang), reply_markup=get_main_keyboard(lang)) + await state.clear() + await state.update_data(Lang=lang) + +@router.message(lambda message: message.text in ["У меня уже есть текст🎶", "I already have text🎶"]) +async def request_text(msg: Message, state: FSMContext): + data = await state.get_data() + lang = data.get('Lang') + await msg.answer(await TF.translation("Отправьте мне текст", lang)) + await state.update_data(Lang=lang) await state.set_state(Form.waiting_for_text) @router.message(Form.waiting_for_text) async def generate(msg: Message, state: FSMContext): + data = await state.get_data() + lang = data.get('Lang') voice_file = await generateVocal(msg.text) - await msg.answer("⚙️⚙️⚙️*Погодите*...*Я сочиняю*...⚙️⚙️️⚙️",parse_mode="Markdown") - await msg.answer_voice(voice=FSInputFile(voice_file),caption="Сгенерированный вокал") + await msg.answer(await TF.translation("⚙️⚙️⚙️*Погодите*...*Я сочиняю*...⚙️⚙️️⚙️",lang),parse_mode="Markdown") + await msg.answer_voice(voice=FSInputFile(voice_file),caption= await TF.translation("Cгенерированный вокал",lang)) + await state.update_data(Lang=lang) await state.clear() -@router.message(lambda message: message.text == "Генерация с нуля🎹") -async def request_text(msg: Message): - await msg.answer("Напишите, о чем должен быть текст?", parse_mode="Markdown") +@router.message(lambda message: message.text in ["Генерация с нуля🎹", "Generation from scratch🎹"]) +async def request_text(msg: Message, state: FSMContext): + data = await state.get_data() + lang = data.get('Lang') + await msg.answer(await TF.translation("Напишите, о чем должен быть текст?", lang), parse_mode="Markdown") + await state.update_data(Lang=lang) @router.message() async def receive_text(msg: Message): text = msg.text @@ -41,9 +81,11 @@ async def receive_text(msg: Message): await msg.answer(genText, parse_mode="Markdown") -@router.message(lambda message: message.text == "Генерация") -async def request_text(msg: Message): - await msg.answer("⚙️⚙️⚙️*Погодите*...*Я творю*...⚙️⚙️️⚙️", parse_mode="Markdown") +@router.message(lambda message: message.text in ["Генерация", "Generation"]) +async def request_text(msg: Message, state: FSMContext): + data = await state.get_data() + lang = data.get('Lang') + await msg.answer(await TF.translation("⚙️⚙️⚙️*Погодите*...*Я творю*...⚙️⚙️️⚙️", lang), parse_mode="Markdown") api_kandinsky = Text2ImageAPI('https://api-key.fusionbrain.ai/', api_key=os.getenv("api_key"), @@ -53,4 +95,5 @@ async def request_text(msg: Message): generated_images = api_kandinsky.check_generation(prompt) photos = await generateImage(generated_images, msg.from_user.username) if photos: - await msg.answer_photo(photo=photos[0], caption="Вот ваша обложка") + await msg.answer_photo(photo=photos[0], caption= await TF.translation("Вот ваша обложка",lang)) + await state.update_data(Lang=lang) diff --git a/bot/keyboards/keyboards.py b/bot/keyboards/keyboards.py new file mode 100644 index 0000000..ac9d366 --- /dev/null +++ b/bot/keyboards/keyboards.py @@ -0,0 +1,38 @@ +from aiogram.types import KeyboardButton, ReplyKeyboardMarkup + +btn1 = KeyboardButton(text="У меня уже есть текст🎶") +btn2 = KeyboardButton(text="Генерация с нуля🎹") +btn3 = KeyboardButton(text="Генерация") + +btn4 = KeyboardButton(text="I already have the text🎶") +btn5 = KeyboardButton(text="Generation from scratch🎹") +btn6 = KeyboardButton(text="Generation") + +keyboard_main_ru = ReplyKeyboardMarkup( + keyboard=[[btn1, btn2, btn3]], + resize_keyboard=True, +), +keyboard_main_eng = ReplyKeyboardMarkup( + keyboard=[[btn4, btn5, btn6]], + resize_keyboard=True, +) + +def get_main_keyboard(lang='ru'): + if lang == 'en': + return ReplyKeyboardMarkup( + keyboard=[ + [KeyboardButton(text="I already have text🎶")], + [KeyboardButton(text="Generation from scratch🎹")], + [KeyboardButton(text="Generation")], + ], + resize_keyboard=True + ) + else: # Russian by default + return ReplyKeyboardMarkup( + keyboard=[ + [KeyboardButton(text="У меня уже есть текст🎶")], + [KeyboardButton(text="Генерация с нуля🎹")], + [KeyboardButton(text="Генерация")], + ], + resize_keyboard=True + ) diff --git a/bot/keyboards/main.py b/bot/keyboards/main.py deleted file mode 100644 index e3ad001..0000000 --- a/bot/keyboards/main.py +++ /dev/null @@ -1,12 +0,0 @@ -from aiogram.types import ReplyKeyboardMarkup, KeyboardButton - - -btn1 = KeyboardButton(text='У меня уже есть текст🎶') -btn2 = KeyboardButton(text='Генерация с нуля🎹') -btn3 = KeyboardButton(text='Генерация') - -keyboard_main = ReplyKeyboardMarkup( - keyboard=[[btn1, btn2, btn3]], - resize_keyboard=True -) - diff --git a/bot/keyboards/setLanguage.py b/bot/keyboards/setLanguage.py new file mode 100644 index 0000000..4c05b0e --- /dev/null +++ b/bot/keyboards/setLanguage.py @@ -0,0 +1,7 @@ +from aiogram.types import KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove + +rus = KeyboardButton(text="English 🇬🇧") +eng = KeyboardButton(text="Russian 🇷🇺") + +languagekb = ReplyKeyboardMarkup(keyboard=[[rus,eng]], resize_keyboard=True, + input_field_placeholder="Choose your language") \ No newline at end of file diff --git a/bot/modules/translateText.py b/bot/modules/translateText.py new file mode 100644 index 0000000..7ccc554 --- /dev/null +++ b/bot/modules/translateText.py @@ -0,0 +1,13 @@ +from googletrans import Translator +import asyncio + + +async def translation(text, language): + translator = Translator(service_urls=[ + 'translate.google.com', + 'translate.google.co.kr', + ]) + + translated = await asyncio.get_event_loop().run_in_executor(None, lambda: translator.translate(text, dest=language)) + + return translated.text \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 937aef3..6534f5b 100644 Binary files a/requirements.txt and b/requirements.txt differ