Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions handlers/_refresh_viewer.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import time
from datetime import datetime, UTC
from helpers.database.redis import get as get_redis
from helpers.constants import TTL_VIEWER

Expand All @@ -9,6 +11,27 @@ def _key_user_chats(uid: str) -> str:
return f"user:{uid}:viewing"


async def record_user_interaction_time(uid: str):
redis = get_redis()
now = time.time()
last_ts_key = f"user:{uid}:last_active_ts"
last_ts = await redis.get(last_ts_key)

today_str = datetime.now(UTC).strftime("%Y-%m-%d")
sec_key = f"user:{uid}:active_sec:{today_str}"

if last_ts:
try:
elapsed = now - float(last_ts)
if 0 < elapsed <= 120:
await redis.incrbyfloat(sec_key, elapsed)
await redis.expire(sec_key, 172800) # TTL 2 days
except (ValueError, TypeError):
pass

await redis.set(last_ts_key, str(now), ex=180)


async def _viewer_add(uid: str, ndcId: int, chatId: str):
redis = get_redis()
await redis.sadd(_key_viewers(ndcId, chatId), uid)
Expand All @@ -24,6 +47,7 @@ async def _viewer_remove(uid: str, ndcId: int, chatId: str):


async def refresh_user_viewing(uid: str):
await record_user_interaction_time(uid)
redis = get_redis()
index_key = _key_user_chats(uid)
members = await redis.smembers(index_key)
Expand Down
1 change: 1 addition & 0 deletions helpers/database/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ class Users(Schema):
extensions = Dict(load_default={}, allow_none=True)
status = Integer(load_default=0)
coins = Float(load_default=0.00)
lastDailyClaimDate = String(load_default=None)
isPaidSubscriber = Bool(load_default=False)
createdTime = String(load_default=dttmn)
modifiedTime = String(load_default=dttmn)
Expand Down