Как в телеграм боте рассчитать время между двумя сообщениями от пользователя к боту?
Я пробовал использовать register next step handler и получился код, import и token я опущу:
i = 0
twodates = []
@bot.message_handler(commands=['start'])
def get_user_mess(message):
ms = bot.send_message(message.chat.id, f'{i}')
bot.register_next_step_handler(ms, get_data)
def get_data(msg):
mess = msg.date
global twodates
global i
if len(twodates) == 0:
twodates.append(mess)
elif len(twodates) == 1:
twodates.append(mess)
i += (twodates[1]-twodates[0])*5
else:
twodates.append(mess)
twodates.remove(twodates[0])
i += (twodates[1] - twodates[0]) * 5
bot.polling(none_stop=True)
Что не так не понимаю. Почему-то вторая функция выполняется через раз. Вообще смысл в том, чтобы за секунду i увеличивалось на 5, нужен шаблон хотя бы этого. Помогите пожалуйста
Ответы (1 шт):
Автор решения: AnnaBazueva
→ Ссылка
Первое, преобразуйте дату в секунды:
from datetime import datetime
mess = msg.date.timestamp()
Второе, в функции get_data(msg)
регистрируйте следующий шаг:
bot.register_next_step_handler(ms, get_data)
Третье, можно сделать короче:
def get_data(msg):
global i, twodates
mess = msg.date.timestamp()
if len(twodates) == 0:
twodates.append(mess)
else:
i += (mess - twodates.pop()) * 5
twodates.append(mess)
Четвёртое, если присмотреться к третьему, то список не нужен:
from datetime import datetime
i = 0
prev = 0
@bot.message_handler(commands=['start'])
def get_user_mess(message):
ms = bot.send_message(message.chat.id, f'{i}')
bot.register_next_step_handler(ms, get_data)
def get_data(msg):
global i, prev
mess = msg.date.timestamp()
if not prev:
prev = mess
else:
i += (mess - prev) * 5
prev = mess
ms = bot.send_message(msg.chat.id, f'{i}')
bot.register_next_step_handler(ms, get_data)