Сначала импортируй зависимости:
from aiogram import types
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
И собственно сам код:
@dp.message_handler(text=['? Каталог'])
async def listofitems(message: types.Message):
items = await get_items()
if items:
markup = InlineKeyboardMarkup(row_width=1)
for item in items:
button_text = f"{item['name']} - {item['price']}р."
callback_data = f"item_{item['i_id']}"
markup.add(InlineKeyboardButton(button_text, callback_data=callback_data))
await message.answer("Выберите товар:", reply_markup=markup)
else:
await message.answer("Каталог пуст!")
@dp.callback_query_handler(lambda c: c.data and c.data.startswith('item_'))
async def item_callback_handler(callback_query: types.CallbackQuery):
item_id = int(callback_query.data.split('_')[1])
items = await get_user_items(item_id)
if items:
item = items[0]
text = f"Название: {item['name']}\nОписание: {item['desc']}\nЦена: {item['price']}р."
await bot.send_photo(callback_query.from_user.id, item['photo'], caption=text)
else:
await callback_query.answer("Товар не найден", show_alert=True)
await callback_query.answer()
Функции get_items и get_user_items, должны использовать async с ключевым словом await, если раз ты используешь асинхронный SQL-клиент.
Кроме того, убедись, что items и get_user_items возвращают список словарей.
вот сам код бд и кнопка каталога (На всякий прикреплю скрин бд) Буду оч благодарен если поможет кто-нибудь