Skip to content

Presence provider

Presence - Get online status of friends

pythonxbox.api.provider.presence.PresenceProvider(client)

Bases: BaseProvider

Source code in src/pythonxbox/api/provider/baseprovider.py
def __init__(self, client: "XboxLiveClient") -> None:
    """
    Initialize an the BaseProvider

    Args:
        client (:class:`XboxLiveClient`): Instance of XboxLiveClient
    """
    self.client = client

PRESENCE_URL = 'https://userpresence.xboxlive.com' class-attribute instance-attribute

HEADERS_PRESENCE = {'x-xbl-contract-version': '3', 'Accept': 'application/json'} class-attribute instance-attribute

get_presence(xuid, presence_level=PresenceLevel.USER, **kwargs) async

Get presence for given xuid

Parameters:

Name Type Description Default
xuid str

XUID

required
presence_level PresenceLevel

Filter level

USER

Returns:

Type Description
PresenceItem

class:PresenceItem: Presence Response

Source code in src/pythonxbox/api/provider/presence/__init__.py
async def get_presence(
    self,
    xuid: str,
    presence_level: PresenceLevel = PresenceLevel.USER,
    **kwargs,
) -> PresenceItem:
    """
    Get presence for given xuid

    Args:
        xuid: XUID
        presence_level: Filter level

    Returns:
        :class:`PresenceItem`: Presence Response
    """
    url = self.PRESENCE_URL + "/users/xuid(" + xuid + ")?level=" + presence_level

    resp = await self.client.session.get(
        url, headers=self.HEADERS_PRESENCE, **kwargs
    )
    resp.raise_for_status()
    return PresenceItem.model_validate_json(resp.text)

get_presence_batch(xuids, online_only=False, presence_level=PresenceLevel.USER, **kwargs) async

Get presence for list of xuids

Parameters:

Name Type Description Default
xuids list[str]

List of XUIDs

required
online_only bool

Only get online profiles

False
presence_level PresenceLevel

Filter level

USER

Returns: List[:class:PresenceItem]: List of presence items

Source code in src/pythonxbox/api/provider/presence/__init__.py
async def get_presence_batch(
    self,
    xuids: list[str],
    online_only: bool = False,
    presence_level: PresenceLevel = PresenceLevel.USER,
    **kwargs,
) -> list[PresenceItem]:
    """
    Get presence for list of xuids

    Args:
        xuids: List of XUIDs
        online_only: Only get online profiles
        presence_level: Filter level

    Returns: List[:class:`PresenceItem`]: List of presence items
    """
    MAX_XUIDS = 1100

    if len(xuids) > MAX_XUIDS:
        raise Exception("Xuid list length is > 1100")

    url = self.PRESENCE_URL + "/users/batch"
    post_data = {
        "users": [str(x) for x in xuids],
        "onlineOnly": online_only,
        "level": presence_level,
    }
    resp = await self.client.session.post(
        url, json=post_data, headers=self.HEADERS_PRESENCE, **kwargs
    )
    resp.raise_for_status()
    parsed = PresenceBatchResponse.model_validate_json(resp.text)
    return parsed.root

get_presence_own(presence_level=PresenceLevel.ALL, **kwargs) async

Get presence of own profile

Parameters:

Name Type Description Default
presence_level PresenceLevel

Filter level

ALL

Returns:

Type Description
PresenceItem

class:PresenceItem: Presence Response

Source code in src/pythonxbox/api/provider/presence/__init__.py
async def get_presence_own(
    self, presence_level: PresenceLevel = PresenceLevel.ALL, **kwargs
) -> PresenceItem:
    """
    Get presence of own profile

    Args:
        presence_level: Filter level

    Returns:
        :class:`PresenceItem`: Presence Response
    """
    url = self.PRESENCE_URL + "/users/me"
    params = {"level": presence_level}
    resp = await self.client.session.get(
        url, params=params, headers=self.HEADERS_PRESENCE, **kwargs
    )
    resp.raise_for_status()
    return PresenceItem.model_validate_json(resp.text)

set_presence_own(presence_state, **kwargs) async

Set presence of own profile

Parameters:

Name Type Description Default
presence_state PresenceState

State of presence

required

Returns:

Type Description
bool

True on success, False otherwise

Source code in src/pythonxbox/api/provider/presence/__init__.py
async def set_presence_own(self, presence_state: PresenceState, **kwargs) -> bool:
    """
    Set presence of own profile

    Args:
        presence_state: State of presence

    Returns:
        `True` on success, `False` otherwise
    """
    url = self.PRESENCE_URL + f"/users/xuid({self.client.xuid})/state"
    data = {"state": presence_state.value}
    resp = await self.client.session.put(
        url, json=data, headers=self.HEADERS_PRESENCE, **kwargs
    )
    return resp.status_code == HTTPStatus.OK