Выше уже ответили, что нужно регистрировать пользователей самостоятельно. Я опишу один из способов, как это сделать.
Я предполагаю, что используется СУБД
Sqlite, хотя это можно адаптировать и к другим.
Нам потребуется таблица пользователей примерно такого вида:
import time
import sqlite
connection = sqlite3.connect('bot.db')
cursor = connection.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS users ( -- всё что после -- комментарий SQL
id TEXT PRIMARY KEY, -- идентификатор пользователя, он же первичный ключ таблицы
first_use REAL, -- метка времени, когда пользователь впервые обратился к боту
last_use REAL -- метка времени, когда пользователь последний раз обратился к боту
)""")
cursor.close()
То, что мы сделали id первичным ключом, гарантирует, что одному пользователю будет соответствовать только одна строка таблицы.
Тогда перед выполнением каждой команды нужно обновить эту таблицу - добавить строку, если её нет, или обновить поле last_use, если она есть. К счастью, существует
синтаксис, позволяющий сделать это за один запрос.
def ensure_user_stats(user_id):
"Эта функция обновляет таблицу users, и должна вызываться в начале обработки каждой команды."
global connection
cursor = connection.cursor()
now = time.time()
# пытаемся добавить строку с указанным id, и фиксируем текущее время в полях first_use и last_use
# если возникает конфликт в поле id (такое id уже есть),
# то мы обновляем в этой записи поле last_use на текущее время, а остальное не трогаем
cursor.execute("""INSERT INTO users (id, first_use, last_use) VALUES (?, ?, ?)
ON CONFLICT (id) DO UPDATE SET last_use = excluded.last_use""", (user_id, now, now))
cursor.close()