Chcę, aby mój bot telegramu czekał, aż użytkownik odpowie za pomocą telebota i modułu obsługi połączeń zwrotnych
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
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_worker
i 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ąć message
z niego parametr, gdybyś wspomniał, co zamierzasz zrobić z process2()
rozwiązaniem, mogło być inne.
Sprawdź moją odpowiedź tutaj dotyczącą przechowywania użytkownika state
w bazie danych.