Ожидание ответа от пользователя Телеграмм бот на python
Пишу банальную программу для записи дел в ToDo, и при вводе задачи без конкретной даты хочу спросить у пользователя "На какую дату поставить задачу?"
После этого вопроса бот не дожидается ответа, и проскакивает date = message.text, принимая за ответ предыдущее сообщение, и получается в итоге что-то такое "Задача Work добавлен на дату /add Work". Как сделать так, чтобы бот дождался ответа и не проскакивал?
Вот код:
@bot.message_handler(commands = ["add", "random"])
def add_random(message):
content = message.text.split(maxsplit = 1)
if content[0] == "/add": #mesage.text -> /add <date> <task> || /add <task>
command = message.text.split(maxsplit = 2)
if len(command) == 3:
date = command[1].lower()
task = command[2]
add_todo(date, task)
text = "Задача " + task + " добавлен на дату " + date
bot.send_message(message.chat.id, text)
elif len(command) == 2:
bot.send_message(message.chat.id, "На какую дату поставить задачу??")
date = message.text
task = command[1]
add_todo(date, task)
text = "Задача " + task + " добавлен на дату " + date
bot.send_message(message.chat.id, text)
elif content[0] == "/random":
date = "сегодня"
task = random.choice(random_task)``
add_todo(date, task)
text = "Задача " + task + " добавлен на дату " + date
bot.send_message(message.chat.id, text)
Ответы (2 шт):
Отслеживать ввод даты юзером нужно в отдельном хэндлере, при этом зная, что он вводит именно дату. Делают это при помощи машины состояний - FSM
Вот пример из репозитория вашей библиотеки https://github.com/eternnoir/pyTelegramBotAPI/blob/master/examples/step_example.py
Чтобы бот дождался ответа, замени код внутри elif len(command) == 2: на функцию ниже ?
def process_date_step(message, task):
date = message.text.lower()
add_todo(date, task)
text = "Задача " + task + " добавлен на дату " + date
bot.send_message(message.chat.id, text)
elif len(command) == 2:
task = command[1]
msg = bot.send_message(message.chat.id, "На какую дату поставить задачу??")
bot.register_next_step_handler(msg, process_date_step, task)
и сам блок elif ?