This commit is contained in:
xds
2026-02-02 16:19:24 +03:00
parent e6aad48e72
commit d8943b6cb4
2 changed files with 55 additions and 15 deletions

View File

@@ -1,7 +1,7 @@
services: services:
tot-bot: ai-bot:
image: tot-bot:latest image: ai-bot:latest
container_name: tot-bot container_name: ai-bot
build: build:
context: . context: .
network: host network: host

View File

@@ -17,7 +17,10 @@ class States(StatesGroup):
@router.message(F.document, Command("add_char")) @router.message(F.document, Command("add_char"))
async def add_char(message: Message, state: FSMContext, dao: DAO): 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 state.set_state(States.char_wait_name)
await message.answer("Кайф, теперь напиши ее имя") await message.answer("Кайф, теперь напиши ее имя")
@@ -29,20 +32,57 @@ async def new_char_name(message: Message, state: FSMContext, dao: DAO):
await message.answer("А теперь напиши био. Хоть чуть чуть.") await message.answer("А теперь напиши био. Хоть чуть чуть.")
@router.callback_query(States.char_wait_bio) # 3. Хендлер био (Финал)
async def new_char_bio(message: Message, state: FSMContext, dao: DAO): @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() data = await state.get_data()
photo = data["photo"] file_id = data["file_id"]
name = data["name"] name = data["name"]
char = Character(id=None, name=name, character_image=photo, character_bio=message.text) bio = message.text
await dao.chars.add_character(char)
await message.answer_photo(photo=BufferedInputFile(char.character_image, "img.png"), caption="Персонаж создан!\n" wait_msg = await message.answer("💾 Сохраняю персонажа...")
f"Имя:{char.name}\n"
f"Био: {char.character_bio}\n" 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")) @router.message(Command("add_char"))
async def add_char_cmd(message: Message): async def add_char_help(message: Message):
await message.answer( await message.answer(
"Добавление персонажа производится через отправку документа-фото исходного изображения персонажа.") " **Как добавить персонажа:**\n"
"Прикрепите фото (файлом/документом) и добавьте в подпись команду `/add_char`."
)