Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 24, 2022 14:35:26

rmn
Зарегистрирован: 2022-01-17
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

callback_query_handler запуск и поиск ошибки

Здравствуйте.
Продолжаю душить изучать змея.
Второй день бьюсь над колбек-отловом.
Объясните на пальцах пжл, почему не срабатывает 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
абсолютно никак не отрабатывает. Ни ошибок, ничего.
Даже не знаю как вопрос сформулировать, чтобы отдебажить этот процесс верно.

Идея была в том, чтобы разделить код на модули, относящиеся к основным командам.

Офлайн

#2 Янв. 24, 2022 21:02:25

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1308
Репутация: +  112  -
Профиль   Отправить e-mail  

callback_query_handler запуск и поиск ошибки

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

Офлайн

#3 Янв. 24, 2022 21:17:12

rmn
Зарегистрирован: 2022-01-17
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

callback_query_handler запуск и поиск ошибки

xam1816
Задайте вопрос так:
В каком месте я вызваю корутину ask_to_add?
Я убрал другие хендлеры, которые отрабатывали. А колбэк - нет. Поэтому на этот вопрос я для себя сразу ответил : В том самом месте вызываю.
Не вижу логики, т.к. знаний мало пока.

Офлайн

#4 Янв. 26, 2022 21:32:20

far4ikg
Зарегистрирован: 2021-11-08
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

callback_query_handler запуск и поиск ошибки

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-функции

Отредактировано far4ikg (Янв. 26, 2022 21:41:12)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version