init
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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`."
|
||||
)
|
||||
Reference in New Issue
Block a user