사용자가 텔레 봇 및 콜백 핸들러로 응답 할 때까지 텔레 그램 봇이 대기하고 싶습니다.

Nov 22 2020

텔레 봇으로 텔레 그램 봇을 작성하고 있습니다. 다음 코드가 있습니다.

@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은 키보드를 생성합니다. process2를 시작하기 전에 사용자가 올바른 옵션을 선택할 수 있도록 process1이 필요합니다. 그렇게 할 수있는 방법이 있습니까? 내 코드는 즉시 process2를 시작하지만 사용자가 올바른 옵션을 선택했는지 확인해야합니다.

답변

2 AliPadida Nov 21 2020 at 23:18

텔레 그램 봇을 다루는이 방법은 권장되지 않습니다. 각 업데이트는 별도의 요청이기 때문입니다.

사용자의 상태를 저장하고 해당 상태를 기반으로 응답하려면 데이터베이스를 사용해야합니다.

그러나 여기에서 process2내부 로 이동 callback_worker하여 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()

또한 솔루션 message으로 수행하려는 작업 process2()이 다를 수 있다고 언급 한 경우 매개 변수를 제거해야합니다 .

내 대답을 확인 여기에 사용자를 저장에 대해 state데이터베이스에.