사용자가 텔레 봇 및 콜백 핸들러로 응답 할 때까지 텔레 그램 봇이 대기하고 싶습니다.
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
데이터베이스에.