From d8943b6cb494dc8ab6bf9e657897562096819c05 Mon Sep 17 00:00:00 2001 From: xds Date: Mon, 2 Feb 2026 16:19:24 +0300 Subject: [PATCH] init --- docker-compose.yml | 6 ++-- routers/char_router.py | 64 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 55 insertions(+), 15 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 8ca0893..7eda1e9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ services: - tot-bot: - image: tot-bot:latest - container_name: tot-bot + ai-bot: + image: ai-bot:latest + container_name: ai-bot build: context: . network: host diff --git a/routers/char_router.py b/routers/char_router.py index 9d43604..5fcc3db 100644 --- a/routers/char_router.py +++ b/routers/char_router.py @@ -17,7 +17,10 @@ class States(StatesGroup): @router.message(F.document, Command("add_char")) async def add_char(message: Message, state: FSMContext, dao: DAO): - await state.set_data({"photo": bot.download(file=message.document.file_id)}) + if not message.document.mime_type.startswith("image/"): + await message.answer("❌ Пожалуйста, отправьте файл изображения (png/jpg).") + return + await state.set_data({"photo": message.document.file_id}) await state.set_state(States.char_wait_name) await message.answer("Кайф, теперь напиши ее имя") @@ -29,20 +32,57 @@ async def new_char_name(message: Message, state: FSMContext, dao: DAO): await message.answer("А теперь напиши био. Хоть чуть чуть.") -@router.callback_query(States.char_wait_bio) -async def new_char_bio(message: Message, state: FSMContext, dao: DAO): +# 3. Хендлер био (Финал) +@router.message(States.char_wait_bio, F.text) +async def new_char_bio(message: Message, state: FSMContext, dao: DAO, bot: Bot): + # Получаем все накопленные данные data = await state.get_data() - photo = data["photo"] + file_id = data["file_id"] name = data["name"] - char = Character(id=None, name=name, character_image=photo, character_bio=message.text) - await dao.chars.add_character(char) - await message.answer_photo(photo=BufferedInputFile(char.character_image, "img.png"), caption="Персонаж создан!\n" - f"Имя:{char.name}\n" - f"Био: {char.character_bio}\n" - ) + bio = message.text + + wait_msg = await message.answer("💾 Сохраняю персонажа...") + + try: + # ВОТ ТУТ скачиваем файл (прямо перед сохранением) + file_io = await bot.download(file_id) + photo_bytes = file_io.getvalue() # Получаем байты + + # Создаем модель + char = Character( + id=None, + name=name, + character_image=photo_bytes, + character_bio=bio + ) + + # Сохраняем через DAO + await dao.chars.add_character(char) + + # Отправляем подтверждение + # Используем байты для отправки обратно + await message.answer_photo( + photo=BufferedInputFile(photo_bytes, filename="char.png"), + caption=( + "🎉 **Персонаж создан!**\n\n" + f"👤 **Имя:** {char.name}\n" + f"📝 **Био:** {char.character_bio}" + ) + ) + await wait_msg.delete() + + # Сбрасываем состояние + await state.clear() + + except Exception as e: + await wait_msg.edit_text(f"❌ Ошибка при сохранении: {e}") + # Не сбрасываем стейт, даем возможность попробовать ввести био снова или начать заново +# 4. Хендлер-помощник (если отправили команду без файла) @router.message(Command("add_char")) -async def add_char_cmd(message: Message): +async def add_char_help(message: Message): await message.answer( - "Добавление персонажа производится через отправку документа-фото исходного изображения персонажа.") + "ℹ️ **Как добавить персонажа:**\n" + "Прикрепите фото (файлом/документом) и добавьте в подпись команду `/add_char`." + ) \ No newline at end of file