34 lines
1.0 KiB
Python
34 lines
1.0 KiB
Python
from datetime import UTC, datetime
|
|
|
|
from pyrogram.types import User
|
|
|
|
from userbot.modules.client import PyroClient
|
|
from userbot.modules.presence import repository
|
|
from userbot.modules.raw_json import raw_json
|
|
from utils.events import notify_bg_event
|
|
|
|
|
|
@PyroClient.on_user_status()
|
|
async def on_user_status(client: PyroClient, user: User) -> None:
|
|
ctx = client.capture
|
|
if ctx is None or user.status is None:
|
|
return
|
|
at = datetime.now(UTC)
|
|
status = user.status.name.lower()
|
|
if ctx.resolve_peer(user.id, is_bot=bool(user.is_bot)).presence:
|
|
await repository.insert_status(
|
|
ctx.pool,
|
|
ctx.account_id,
|
|
user.id,
|
|
at,
|
|
status,
|
|
user.last_online_date,
|
|
user.next_offline_date,
|
|
raw_json(user.raw),
|
|
)
|
|
await notify_bg_event(ctx.pool, "presence", ctx.account_id, chat_id=user.id)
|
|
await ctx.watches.on_status(user.id, status, at, user.last_online_date)
|
|
|
|
|
|
handlers = on_user_status.handlers # ty: ignore[unresolved-attribute]
|