Je veux que mon robot de télégramme attende que l'utilisateur réponde avec telebot et le gestionnaire de rappel

Nov 22 2020

J'écris un robot de télégramme avec telebot. J'ai le morceau de code suivant:

@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 génère des claviers. J'ai besoin de process1 pour laisser l'utilisateur choisir la bonne option dans le processus avant de démarrer process2. Y a-t-il un moyen de le faire? Mon code démarre immédiatement process2, mais je dois être sûr que l'utilisateur choisit la bonne option.

Réponses

2 AliPadida Nov 21 2020 at 23:18

Cette façon de traiter les bots de télégramme n'est pas recommandée. Parce que chaque mise à jour est une demande distincte.

Vous devez utiliser une base de données pour stocker l'état de l'utilisateur et répondre en fonction de cet état.

Mais ici, vous pouvez vous déplacer à l' process2intérieur callback_workeret l'appeler après les conditions 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()

Vous devez également en supprimer le messageparamètre, si vous aviez mentionné que ce que vous alliez faire avec process2()la solution aurait pu être différent.

Vérifiez ma réponse ici sur le stockage de l'utilisateur statedans une base de données.