Не обрабатывается Inline кнопка;
есть код:
@dp.callback_query_handler(function=lambda c: c.data)
async def inlines(c):
if c.data == 'нет':
await bot.send_message(c.message.from_user.id, 'привет')
он должен обработать нажатие Inline кнопки и написать сообщение;
но он выводит ошибку, что фильтр удалён:
raise NameError("Invalid filter name(s): '" + "', ".join(full_config.keys()) + "'")
NameError: Invalid filter name(s): 'function'
как я понимаю этот способ уже не работает;
как мне обработать callback Inline кнопок?
Ответы (2 шт):
Не существует c и function ! Вместо этого call и func!
Правильное построение -
@dp.callback_query_handler(func=lambda call: True)
async def answer(call):
if call.data == 'pgtod': # Calldata лучше писать на английском)
await bot.send_message(call.message.from_user.id, 'привет')
От части @Alex_Zab прав, но.. пожалуйста прекратите делать так как делаете вы. Делайте так
@dp.callback_query_handler(text="нет")
async def inlines(callback: types.CallbackQuery):
await bot.send_message(callback.message.from_user.id, 'привет')
text проверяет то что написано в колбек дате, а если месседж хендлер, то то что написано в сообщении. Есть ещё text_startswith, text_endswith, text_contains. С чего начинается, чем заканчивается и содержит ли.
В общем не делайте этот "лямбда колл равен тру", это какой-то кошмар который пришел с телебота.