Ich möchte, dass mein Telegramm-Bot wartet, bis der Benutzer mit Telebot und Callback-Handler antwortet
Ich schreibe einen Telegrammbot mit Telebot. Ich habe folgenden Code:
@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 generiert Tastaturen. Ich benötige process1, damit der Benutzer die richtige Option auswählen kann, bevor er process2 startet. Gibt es eine Möglichkeit, dies zu tun? Mein Code startet sofort process2, aber ich muss sicher sein, dass der Benutzer die richtige Option auswählt.
Antworten
Diese Art des Umgangs mit Telegramm-Bots wird nicht empfohlen. Weil jedes Update eine separate Anfrage ist.
Sie müssen eine Datenbank verwenden, um den Status des Benutzers zu speichern und basierend auf diesem Status zu antworten.
Aber hier können Sie nach process2
innen gehen callback_worker
und es nach den if-Bedingungen aufrufen.
@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()
Außerdem sollten Sie message
Parameter daraus entfernen , wenn Sie erwähnt haben, was Sie mit process2()
der Lösung tun würden , könnte dies anders gewesen sein.
Schauen Sie sich meine Antwort hier über Benutzer speichern state
in einer Datenbank.