Задать вопрос
@qx00qx

Телеграмм бот не выдает информацию о выбранном товаре из базы данных, как можно исправить?

Код ниже имеет трехуровневую навигацию, все работает до перехода к show_items, далее не вызывается ни одна ошибка, просто ничего не происходит, подскажите как можно решить?

Ниже так же показаны скрины того как это выглядит в сообщениях с ботом

@dp.message_handler(commands=['products'])
@dp.message_handler(Text(equals=[' Товары']))
async def show_menu(message: types.Message):
    await list_categories(message)


async def list_categories(message: Union[types.Message, types.CallbackQuery], **kwargs):
    markup = await categories_keyboard()

    if isinstance(message, types.Message):
        await message.answer("Смотри что у нас есть", reply_markup=markup)
    elif isinstance(message, types.CallbackQuery):
        call = message
        await call.message.edit_reply_markup(markup)


async def list_subcategories(call: types.CallbackQuery, category: str, subcategory: str = None):
    markup = await subcategories_keyboard(category_code=category)
    await call.message.edit_reply_markup(markup)


async def list_items(call, category=None, subcategory=None, item_id=None, callback=None):
    markup = await items_kb(category_code=category, subcategory_code=subcategory)
    message = call.message
    try:
        await message.edit_reply_markup(reply_markup=markup)
    except MessageNotModified:
        pass


async def show_items(callback: types.CallbackQuery, category_code, subcategory_code, item_id):
    markup = await item_keyboard(category_code, subcategory_code, item_id)

    item = await db.sql_get_products(callback)
    item_name, item_price = item[7], item[9]
    text = f"Купите {item_name} за {item_price} рублей."
    await callback.message.edit_text(text, reply_markup=markup)


@dp.callback_query_handler(menu_cd.filter())
async def navigate(call: types.CallbackQuery, callback_data: dict):
    current_level = callback_data.get('level')
    category = callback_data.get('category')
    subcategory = callback_data.get('subcategory')
    item_id = callback_data.get('item_id')

    levels = {
        "0": list_categories,
        "1": list_subcategories,
        "2": list_items,
        "3": show_items
    }

    current_level_func = levels[current_level]
    callback = {"callback_data": callback_data}

    if current_level == "1":
        await current_level_func(call, category=category, subcategory=subcategory)
    else:
        await current_level_func(call, category=category, subcategory=subcategory, item_id=item_id,
                                 callback={**callback_data, 'level': '3'})


648de61ed30dd147477314.jpeg
648de62c9e967814225282.jpeg
648de63435310685805430.jpeg
  • Вопрос задан
  • 55 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@lamanoff
На show_items следует также добавить декоратор @dp.callback_query_handler.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы