Chcę, aby mój bot telegramu czekał, aż użytkownik odpowie za pomocą telebota i modułu obsługi połączeń zwrotnych

Nov 22 2020

Piszę bota telegramowego z telebotem. Mam następujący fragment kodu:

@bot.message_handler(commands=["play"])
def game(message):
    bot.send_message(message.chat.id, 'Start')
    process(message)
    process2(message)

def process(message):
    arr = ['Ans1', 'Ans2', 'Ans3', 'Ans4']
    ans = ['1', '2', '3', '4']
    keyboard = keyboard_gen(arr, ans)
    bot.send_message(message.chat.id, text = 'Question1', reply_markup=keyboard)

def process2(message):
    pass

@bot.callback_query_handler(func=lambda call: True) 
def callback_worker(call):
    if call.data == 1:
        bot.send_message(call.message.chat.id, 'True')
    if call.data in [2, 3, 4]:
        bot.send_message(call.message.chat.id, 'False')

keyboard_gen generuje klawiatury. Potrzebuję procesu 1, aby umożliwić użytkownikowi wybranie właściwej opcji przed rozpoczęciem procesu 2. Czy jest na to sposób? Mój kod natychmiast uruchamia process2, ale muszę mieć pewność, że użytkownik wybierze właściwą opcję.

Odpowiedzi

2 AliPadida Nov 21 2020 at 23:18

Ten sposób radzenia sobie z botami telegramowymi nie jest zalecany. Ponieważ każda aktualizacja to osobne żądanie.

Musisz użyć bazy danych do przechowywania stanu użytkownika i odpowiedzi na podstawie tego stanu.

Ale tutaj możesz wejść do process2środka callback_workeri nazwać to po warunkach if.

@bot.callback_query_handler(func=lambda call: True) 
def callback_worker(call):
    if call.data == 1:
        bot.send_message(call.message.chat.id, 'True')
    if call.data in [2, 3, 4]:
        bot.send_message(call.message.chat.id, 'False')
    process2()

Powinieneś także usunąć messagez niego parametr, gdybyś wspomniał, co zamierzasz zrobić z process2()rozwiązaniem, mogło być inne.

Sprawdź moją odpowiedź tutaj dotyczącą przechowywania użytkownika statew bazie danych.