Помогите с кодом . Aiogram, dict, python, iter
Всем привет ,помогите с кодом. Это часть кода. Я пишу телеграм бота на aiogram 3x, который в основном будет из InlineKeyboard'ов и чтобы не писать кучу обработчиков callback'ов я решил создать словарь с товарами и через билдеры и колбек фабрики сделать InlineKeyboard'ы. Получается условно когда пользователь нажмёт на кнопку product_1 через callback клавиатура должна изменться на клавиатуру из категории товаров данного продукта, соответственно когда пользователь нажмет на категорию клавиатура измениться на товары в этой категории, но у меня возникла проблема в цикле то есть когда пользователь нажимает на товар клавиатура изменяется на клавиатуры с категориями всех продуктов , но мне надо категории конкретного продукта - я подумал чтобы в классе колбек был эквиалентен названию продукта в словаре, но коллбеки создаются через фабрику. Подскажите пожалуйста как сделать код чтобы при нажатий на product_1 вылазили категории конкретного product_1.
Если что то не понятно напишите в ответе - я поясню.
from aiogram.filters import Command
from aiogram.filters.callback_data import CallbackData
from aiogram.utils.keyboard import InlineKeyboardBuilder
from aiogram.types import InputMediaPhoto, FSInputFile, InlineKeyboardMarkup, InlineKeyboardButton
class ProductCallbackFactory(CallbackData, prefix="product"):
name: str
class CategoryCallbackFactory(CallbackData, prefix="category"):
name: str
products = {
"product_1": {
"category_1": {
"good_1":{
"param_1": "",
"param_2": "",
},
"good_2": {
"param_1": "",
"param_2": "",
}
},
"category_2": {
"good_1": {
"param_1": "",
"param_2": "",
},
"good_2": {
"param_1": "",
"param_2": ""
}
}
},
"product_2": {
"category_1": {
"good_1": {
"param_1": "",
"param_2": "",
},
"good_2": {
"param_1": "",
"param_2": "",
}
},
"category_2": {
"good_1": {
"param_1": "",
"param_2": "",
}
}
}
}
async def product_menu_kb(products_game_dict: dict) -> InlineKeyboardMarkup:
kb_builder = InlineKeyboardBuilder()
for product in products_game_dict.keys():
kb_builder.button(text=f"{category}", callback_data=ProductCallbackFactory(name=product))
kb_builder.adjust(2)
kb_builder.add(InlineKeyboardButton(text="Назад", callback_data="main_page"))
return kb_builder.as_markup()
async def category_menu_kb(product_dict_category: dict) -> InlineKeyboardMarkup:
category_kb_builder = InlineKeyboardBuilder()
for product in product_dict_category.keys():
for category in product_dict_category.get(product):
category_kb_builder.button(text=f"{category}", callback_data=CategoryCallbackFactory(name=category))
category_kb_builder.adjust(2)
return category_kb_builder.as_markup()