Найти - Пользователи
Полная версия: callback_query_handler запуск и поиск ошибки
Начало » Python для новичков » callback_query_handler запуск и поиск ошибки
1
rmn
Здравствуйте.
Продолжаю душить изучать змея.
Второй день бьюсь над колбек-отловом.
Объясните на пальцах пжл, почему не срабатывает callback и как отловить текущее состояние приложения для анализа действующих хендлеров.

В main файле регистрирую хендлер :
 from app.handlers.find import register_handlers_find
async def main():
    # Объявление и инициализация объектов бота и диспетчера
    bot =  Bot(token = config.tg_bot.token)
    # Диспетчер регистрирует функции-обработчики
    dp = Dispatcher(bot, storage=MemoryStorage())
    # Регистрация хэндлеров
    register_handlers_find(dp)
    # Запуск поллинга
    # await dp.skip_updates()  # пропуск накопившихся апдейтов (необязательно)
    await dp.start_polling()
if __name__ == '__main__':
    asyncio.run(main())

В модуле хендлера (последняя строка) регистрирую собственные обработчики действий:

 from aiogram import Dispatcher, types
from aiogram.dispatcher.filters import Text
""" Подготовка к поиску """
async def find_text_message(message: types.Message):
    # Предложить добавить
    buttons = [
        types.InlineKeyboardButton(text="Да", callback_data="add_yes"),
        types.InlineKeyboardButton(text="Нет", callback_data="add_no"),
      ]
    keyboard = types.InlineKeyboardMarkup(row_width = 2)
    keyboard.add(*buttons)
    await message.answer("Да или Нет", reply_markup = keyboard)
""" Предложение """
async def ask_to_add(call: types.CallbackQuery, message: types.Message):
    await message.answer("callback for " + call.data)
""" Регистрация хендлеров """
def register_handlers_find(dp: Dispatcher):
    dp.register_message_handler(find_text_message, commands="find")
    dp.callback_query_handler(lambda c: c.data == Text(startswith="add_"))

 ask_to_add
абсолютно никак не отрабатывает. Ни ошибок, ничего.
Даже не знаю как вопрос сформулировать, чтобы отдебажить этот процесс верно.

Идея была в том, чтобы разделить код на модули, относящиеся к основным командам.
xam1816
rmn
абсолютно никак не отрабатывает. Ни ошибок, ничего.
Даже не знаю как вопрос сформулировать, чтобы отдебажить этот процесс верно.
Задайте вопрос так:
В каком месте я вызваю корутину ask_to_add?
rmn
xam1816
Задайте вопрос так:
В каком месте я вызваю корутину ask_to_add?
Я убрал другие хендлеры, которые отрабатывали. А колбэк - нет. Поэтому на этот вопрос я для себя сразу ответил : В том самом месте вызываю.
Не вижу логики, т.к. знаний мало пока.
far4ikg
rmn
dp.callback_query_handler(lambda c: c.data == Text(startswith=“add_”))

попробуй так:
 dp.register_callback_query_handler(ask_to_add, Text(equals="add_"))

Фильтр Text из аёграмма используется без lamda-функции
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB