42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
import uuid
|
|
|
|
from db.redis import (
|
|
add_presence,
|
|
remove_presence,
|
|
get_presence
|
|
)
|
|
|
|
|
|
from integrations.livekit.client import get_livekit_api
|
|
from livekit import api
|
|
|
|
|
|
async def user_join_group(group_id: str | uuid.UUID, user_id: str | uuid.UUID):
|
|
"""
|
|
Called when websocket connects or LiveKit webhook received
|
|
"""
|
|
await add_presence(str(group_id), str(user_id))
|
|
|
|
|
|
async def user_leave_group(group_id: str | uuid.UUID, user_id: str | uuid.UUID):
|
|
"""
|
|
Called when websocket disconnects or LiveKit webhook received
|
|
"""
|
|
await remove_presence(str(group_id), str(user_id))
|
|
|
|
|
|
async def list_online_users(group_id: str | uuid.UUID, use_livekit: bool = False):
|
|
"""
|
|
Returns online users in a group.
|
|
If use_livekit is True, fetches directly from LiveKit server.
|
|
"""
|
|
group_id_str = str(group_id)
|
|
|
|
if use_livekit:
|
|
lk_api = get_livekit_api()
|
|
res = await lk_api.room.list_participants(api.ListParticipantsRequest(room=group_id_str))
|
|
online_users = [p.identity for p in res.participants]
|
|
return online_users
|
|
|
|
return await get_presence(group_id_str)
|