Ich möchte, dass mein Telegramm-Bot wartet, bis der Benutzer mit Telebot und Callback-Handler antwortet

Nov 22 2020

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

2 AliPadida Nov 21 2020 at 23:18

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 process2innen gehen callback_workerund 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 messageParameter 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 statein einer Datenbank.