Как в телеграм боте рассчитать время между двумя сообщениями от пользователя к боту?

Я пробовал использовать 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)
→ Ссылка