+ fixes
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
import logging
|
||||
import traceback
|
||||
|
||||
from aiogram.filters import Command
|
||||
from aiogram.fsm.context import FSMContext
|
||||
from aiogram.fsm.state import State, StatesGroup
|
||||
@@ -47,36 +50,43 @@ async def new_char_bio(message: Message, state: FSMContext, dao: DAO, bot: Bot):
|
||||
|
||||
try:
|
||||
# ВОТ ТУТ скачиваем файл (прямо перед сохранением)
|
||||
file_io = await bot.download(file_id)
|
||||
photo_bytes = file_io.getvalue() # Получаем байты
|
||||
# file_io = await bot.download(file_id)
|
||||
# photo_bytes = file_io.getvalue() # Получаем байты
|
||||
|
||||
# Создаем модель
|
||||
char = Character(
|
||||
id=None,
|
||||
name=name,
|
||||
character_image=photo_bytes,
|
||||
# character_image=photo_bytes,
|
||||
character_image_tg_id=None,
|
||||
character_image_doc_tg_id=file_id,
|
||||
character_bio=bio
|
||||
)
|
||||
|
||||
# Сохраняем через DAO
|
||||
await dao.chars.add_character(char)
|
||||
|
||||
file_info = await bot.get_file(char.character_image_doc_tg_id)
|
||||
file_bytes = await bot.download_file(file_info.file_path)
|
||||
# Отправляем подтверждение
|
||||
# Используем байты для отправки обратно
|
||||
await message.answer_photo(
|
||||
photo=BufferedInputFile(photo_bytes, filename="char.png"),
|
||||
photo_msg = await message.answer_photo(
|
||||
photo=BufferedInputFile(file_bytes.read(),
|
||||
filename="char.jpg") if not char.character_image_tg_id else char.character_image_tg_id,
|
||||
caption=(
|
||||
"🎉 <b>Персонаж создан!</b>\n\n"
|
||||
f"👤 <b>Имя:</b> {char.name}\n"
|
||||
f"📝 <b>Био:</b> {char.character_bio}"
|
||||
)
|
||||
)
|
||||
char.character_image_tg_id = photo_msg.photo[0].file_id
|
||||
await dao.chars.update_char(char.id, char)
|
||||
await wait_msg.delete()
|
||||
|
||||
# Сбрасываем состояние
|
||||
await state.clear()
|
||||
|
||||
except Exception as e:
|
||||
logging.error(e)
|
||||
await wait_msg.edit_text(f"❌ Ошибка при сохранении: {e}")
|
||||
# Не сбрасываем стейт, даем возможность попробовать ввести био снова или начать заново
|
||||
|
||||
@@ -98,7 +108,7 @@ async def get_chars(message: Message, state: FSMContext, dao: DAO):
|
||||
|
||||
|
||||
@router.callback_query(F.data.startswith("char_info_"))
|
||||
async def get_char_info(callback_query: CallbackQuery, state: FSMContext, dao: DAO):
|
||||
async def get_char_info(callback_query: CallbackQuery, state: FSMContext, dao: DAO, bot: Bot):
|
||||
await callback_query.message.delete()
|
||||
wait_msg = await callback_query.message.answer("Ищем инфу о персонаже")
|
||||
char = await dao.chars.get_character(callback_query.data.split("_")[-1])
|
||||
@@ -109,17 +119,19 @@ async def get_char_info(callback_query: CallbackQuery, state: FSMContext, dao: D
|
||||
return
|
||||
keyboard = InlineKeyboardMarkup(inline_keyboard=[
|
||||
[InlineKeyboardButton(text="Запросить фото в документе", callback_data=f'char_photo_file_{char.id}')]])
|
||||
await callback_query.message.answer_photo(photo=BufferedInputFile(char.character_image, f"photo_{char.id}.png"), caption=f"👤 <b>Имя:</b> {char.name}\n"
|
||||
f"📝 <b>Био:</b> {char.character_bio}",
|
||||
reply_markup=keyboard)
|
||||
|
||||
photo_msg = await callback_query.message.answer_photo(
|
||||
photo=char.character_image_tg_id,
|
||||
caption=f"👤 <b>Имя:</b> {char.name}\n"
|
||||
f"📝 <b>Био:</b> {char.character_bio}",
|
||||
reply_markup=keyboard)
|
||||
await wait_msg.delete()
|
||||
|
||||
|
||||
@router.callback_query(F.data.startswith("char_photo_file"))
|
||||
async def get_char_info_photo_file(callback_query: CallbackQuery, state: FSMContext, dao: DAO):
|
||||
char = await dao.chars.get_character(callback_query.data.split("_")[-1])
|
||||
await callback_query.message.answer_document(BufferedInputFile(char.character_image, f"photo_{char.id}.png"))
|
||||
await callback_query.message.answer_document(char.character_image_doc_tg_id)
|
||||
|
||||
|
||||
# 4. Хендлер-помощник (если отправили команду без файла)
|
||||
|
||||
Reference in New Issue
Block a user