Написал фрагмент кода с хендлерами для тг бота на aiogram. Первый хендлер срабатывает, а следующие уже нет. Не могу понять, что не так с type в cb.filter. Причем до того как я добавил в cb 'firm_id', второй хендлер срабатывал...
from aiogram.types import Message, PreCheckoutQuery, InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery, \
LabeledPrice
from aiogram.dispatcher.filters import Command, Text
from aiogram.types.message import ContentType
from aiogram.utils.callback_data import CallbackData
from src.services.sql import DataBase
from src.bot import dp, bot
from src.config import Config
cb = CallbackData('btn', 'type', 'product_id', 'category_id', 'firm_id')
db = DataBase('tgbot_database.db')
async def gen_products(data, user_id):
keyboard = InlineKeyboardMarkup()
for i in data:
count = await db.get_count_in_cart(user_id, i[1])
count = 0 if not count else sum(j[0] for j in count)
keyboard.add(InlineKeyboardButton(text=f'{i[2]}: {i[3]}p - {count}шт',
callback_data=f'btn:plus:{i[1]}:{i[5]}'))
keyboard.add(InlineKeyboardButton(text='', callback_data=f'btn:minus:{i[1]}:{i[5]}'),
InlineKeyboardButton(text='', callback_data=f'btn:plus:{i[1]}:{i[5]}'),
InlineKeyboardButton(text='❌', callback_data=f'btn:del:{i[1]}:{i[5]}'))
keyboard.add(InlineKeyboardButton(text='Назад', callback_data=f'btn:back:-:-'))
return keyboard
@dp.message_handler(Text(' Товары'))
@dp.message_handler(Text("Товары"))
@dp.message_handler(Text("товары"))
async def shop(message: Message):
data = await db.get_categories()
keyboard = InlineKeyboardMarkup()
for i in data:
keyboard.add(InlineKeyboardButton(text=f'{i[0]}', callback_data=f'btn:category:-:{i[1]}'))
await message.answer('Что хотите купить?', reply_markup=keyboard)
@dp.callback_query_handler(cb.filter(type='category'))
async def firm(call: CallbackQuery, callback_data: dict):
data = await db.get_firms(callback_data.get('category_id'))
keyboard = InlineKeyboardMarkup()
for i in data:
keyboard.add(InlineKeyboardButton(text=f'{i[0]}', callback_data=f'btn:firm:-:{i[1]}'))
await call.message.edit_reply_markup(keyboard)
@dp.callback_query_handler(cb.filter(type='firm'))
async def goods(call: CallbackQuery, callback_data: dict):
data = await db.get_products(callback_data.get('firm_id'))
keyboard = await gen_products(data, call.message.chat.id)
await call.message.edit_reply_markup(keyboard)