Как построить обработчик разговора с CllbackQueryHandler в нем - PullRequest
1 голос
/ 22 марта 2019

Примечание: я использую версию 12 пакета python-telegram-bot.

Я хотел бы создать обработчик диалога: когда пользователь выбирает команду \ charts, бот показывает ихвстроенный список вариантов и, в зависимости от их выбора, верните им график.

charts_handler = ConversationHandler(
    entry_points=[CommandHandler('chart', chart_start)],
    states={
        ChartChoices.choosing_user: [CallbackQueryHandler(
            individual_chart,
            pass_user_data=True)
        ],
    },
    fallbacks=[done_handler],
)

Но если я не установлю per_message=False, то это приведет к этой ошибке:

If 'per_message=False', 'CallbackQueryHandler' will not be tracked for every message.

Если я установлю per_message=True, то это приведет к ошибке:

If 'per_message=True', all entry points and state handlers                                      
must be 'CallbackQueryHandler', since no other handlers have a message context.

Так что кажется, что единственный способ построить обработчик разговора с CallBackQueryHandler (или другими словами показать встроенную клавиатуру во время чата) установить все обработчики в CallbackQueryHandler.Это правильно?

1 Ответ

1 голос
/ 15 мая 2019

Во-первых, это не ошибка, это предупреждение, которое вы можете игнорировать: If 'per_message=False', 'CallbackQueryHandler' will not be tracked for every message.

Во-вторых, вам не нужно ConversationHandler для описанного варианта использования.Пример взаимодействия с пользователем: User: /charts Bot: Here is the list of available charts: Bar chart 1 /chart_1 Bar chart 2 /chart_2 Pie chart /chart_3

И этот тип потока вы можете реализовать с помощью простых MessageHandler и Filters

Документы: MessageHandler

Документы: Фильтры

А именно, вы можете использовать фильтр регулярных выражений .

ConversationHandler полезен, когда вам нужна многошаговая итерация с пользователем(как заполнение длинной формы шаг за шагом).Если вы можете идентифицировать пользовательские запросы другими способами, например, сгенерированными командами, встроенными кнопками, текстом сообщения - предпочитайте делать это таким образом.

...