@rvasutenko

В чем ошибка в этом фрагменте кода?

Написал фрагмент кода с хендлерами для тг бота на 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)
  • Вопрос задан
  • 302 просмотра
Пригласить эксперта
Ответы на вопрос 1
jabir_sabitov
@jabir_sabitov
@dp.message_handler(Text(equals='товары'))

@dp.callback_query_handler(Text(equals='firm'))
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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