Не работает CallbackData.filter причины неясны. Python
purchase.py
from aiogram import types
from aiogram.dispatcher.filters.builtin import Command
from aiogram.types import CallbackQuery
from keyboards.inline.callback_database import buy_callback
from keyboards.inline.menu import bcd, choice
from loader import dp
@dp.message_handler(Command('items'))
async def show_items(message: types.Message):
await message.answer('Привет, выбери понравившеюся жидкость, для получения информации о ней и дальнейшей оплаты, ну а если ты передумал нажми отмену', reply_markup=choice)
@dp.callback_query_handler(buy_callback.filter(item_name='woody'))
async def buy_woody(call: CallbackQuery, callback_data: dict):
await call.answer()
if quantity != 0:
await call.message.answer('Отличный выбор!\nДля получения подробного описания этой жидкости нажмите кнопку ниже.\nДля продолжения покупки и оплаты нажмите кнопку "Оплатить".\n\nДля отмены выбора нажмите кнопку ниже', reply_markup=bcd)
else:
await call.message.answer('Извините данной жидкости сейчас нет в наличии, бот вас уведомит о новом поступлении.\nВыберите другой вкус или нажмите отмену для завершения покупок :(')
@dp.callback_query_handler(buy_callback.filter(item_name='woody'))
async def descripwoody(call: CallbackQuery):
await call.message.answer('123')
menu.py
bcd = InlineKeyboardMarkup(row_width=3,
inline_keyboard=[
[
InlineKeyboardButton(
text='Описание',
callback_data="descrip",
),
InlineKeyboardButton(
text='Оплатить',
callback_data="buy"
),
InlineKeyboardButton(
text='Отмена',
callback_data="cancel"
)
]
])
callback_database.py
from aiogram.utils.callback_data import CallbackData
buy_callback = CallbackData('buy', 'item_name', 'quantity')
Ответы (1 шт):
Автор решения: MyZik
→ Ссылка
Ну так у Вас имеется обработчик на отлавливание конкретного значения, но это значение Вы нигде не передаёте.
Вместо:
bcd = InlineKeyboardMarkup(row_width=3,
inline_keyboard=[
[
InlineKeyboardButton(
text='Описание',
callback_data="descrip",
),
InlineKeyboardButton(
text='Оплатить',
callback_data="buy"
),
InlineKeyboardButton(
text='Отмена',
callback_data="cancel"
)
]
])
Используйте:
bcd = InlineKeyboardMarkup(row_width=3,
inline_keyboard=[
[
InlineKeyboardButton(
text='Описание',
callback_data="descrip",
),
InlineKeyboardButton(
text='Оплатить',
callback_data=buy_callback.new(item_name="woody", quantity=10)
),
InlineKeyboardButton(
text='Отмена',
callback_data="cancel"
)
]
])