Source code for clash_royale.aio.resources.clans

from __future__ import annotations

from typing_extensions import Unpack

from ...models.clan import Clan, ClanMember, ClanSearchResult, RiverRace, RiverRaceLog
from ...types import ClanSearchParams, PaginationParams
from ..pagination import PaginatedList
from .resource import Resource


[docs] class Clans(Resource): """ Async resource for clan-related endpoints. Check the :clash-royale-api:`clans` for more detailed information about each endpoint. """
[docs] async def get(self, tag: str) -> Clan: """Get clan information by tag.""" encoded_tag = self._encode_tag(tag) response = await self._client._request("GET", f"/clans/{encoded_tag}") return Clan.model_validate(response)
[docs] def search( self, name: str, **params: Unpack[ClanSearchParams] ) -> PaginatedList[ClanSearchResult]: """Search clans by name.""" api_params = {"name": name, **params} return PaginatedList( client=self._client, endpoint="/clans", model=ClanSearchResult, params=api_params, # ty:ignore[invalid-argument-type] )
[docs] def get_members( self, tag: str, **params: Unpack[PaginationParams] ) -> PaginatedList[ClanMember]: """Get clan members.""" encoded_tag = self._encode_tag(tag) return PaginatedList( client=self._client, endpoint=f"/clans/{encoded_tag}/members", model=ClanMember, params=params, # ty:ignore[invalid-argument-type] )
[docs] async def get_current_river_race(self, tag: str) -> RiverRace: """Get current river race information for a clan.""" encoded_tag = self._encode_tag(tag) response = await self._client._request( "GET", f"/clans/{encoded_tag}/currentriverrace" ) return RiverRace.model_validate(response)
[docs] def get_river_race_log( self, tag: str, **params: Unpack[PaginationParams] ) -> PaginatedList[RiverRaceLog]: """Get river race log for a clan.""" encoded_tag = self._encode_tag(tag) return PaginatedList( client=self._client, endpoint=f"/clans/{encoded_tag}/riverracelog", model=RiverRaceLog, params=params, # ty:ignore[invalid-argument-type] )