Norius
Мастер
(2362)
1 год назад
В вашем коде можно добавить if/else с помощью модуля python-telegram-bot и его класса ConversationHandler. ConversationHandler - это обработчик для управления беседой с одним или несколькими пользователями через обновления Telegram. Он управляет тремя коллекциями других обработчиков и позволяет добавлять новые обработчики в зависимости от ответа пользователя.
Вы можете использовать методы add_handler() и add_handler(MessageHandler()) для добавления обработчиков в ConversationHandler. Вот пример кода:
conv_handler = ConversationHandler(
entry_points=[CommandHandler('start', start)],
states={
CHOOSING: [MessageHandler(Filters.regex('^(Age|Favourite colour|Number of siblings)$'), regular_choice),
MessageHandler(Filters.regex('^Something else...$'), custom_choice)
],
TYPING_CHOICE: [MessageHandler(Filters.text & ~(Filters.command | Filters.regex('^Done$')), regular_choice)],
TYPING_REPLY: [MessageHandler(Filters.text & ~(Filters.command | Filters.regex('^Done$')), received_information)],
},
fallbacks=[MessageHandler(Filters.regex('^Done$'), done)]
)
dispatcher.add_handler(conv_handler)
В этом примере мы создаем ConversationHandler и добавляем в него несколько обработчиков сообщений (MessageHandlers) для каждого состояния (states). Если пользователь отправляет сообщение, которое соответствует регулярному выражению, связанному с текущим состоянием, то вызывается соответствующий обработчик сообщений.
Как в этот код добавить if/else, чтобы менять ответ бота в зависимости от ответа user'а:
def main() -> None:
"""Run the bot."""
# Create the Application and pass it your bot's token.
application = Application.builder().token("TOKEN").build()
# Add conversation handler with the states CHOOSING, TYPING_CHOICE and TYPING_REPLY
conv_handler = ConversationHandler(
entry_points=[CommandHandler("start", start)],
states={
CHOOSING: [
MessageHandler(
filters.Regex("^(Age|Favourite colour|Number of siblings)$"), regular_choice
),
MessageHandler(filters.Regex("^Something else...$"), custom_choice),
],
TYPING_CHOICE: [
MessageHandler(
filters.TEXT & ~(filters.COMMAND | filters.Regex("^Done$")), regular_choice
)
],
TYPING_REPLY: [
MessageHandler(
filters.TEXT & ~(filters.COMMAND | filters.Regex("^Done$")),
received_information,
)
],
},
fallbacks=[MessageHandler(filters.Regex("^Done$"), done)],
)
application.add_handler(conv_handler)
# Run the bot until the user presses Ctrl-C
application.run _polling()
Или просто объясните states как работает