Module genshin.client.components.hsr_warp_records
HSR warp records statistics component.
Classes
class HSRWarpRecordsClient (cookies: ForwardRef('http.cookies.BaseCookie[Any]') | Mapping[Any, Any] | str | Sequence[ForwardRef('http.cookies.BaseCookie[Any]') | Mapping[Any, Any] | str] | None = None,
*,
authkey: str | None = None,
lang: Literal['zh-cn', 'zh-tw', 'de-de', 'en-us', 'es-es', 'fr-fr', 'id-id', 'it-it', 'ja-jp', 'ko-kr', 'pt-pt', 'ru-ru', 'th-th', 'vi-vn', 'tr-tr'] = 'en-us',
region: Region = Region.OVERSEAS,
proxy: str | None = None,
game: Game | None = None,
uid: int | None = None,
hoyolab_id: int | None = None,
device_id: str | None = None,
device_fp: str | None = None,
headers: Mapping[str, str] | Mapping[multidict._multidict.istr, str] | multidict._multidict.CIMultiDict | multidict._multidict.CIMultiDictProxy | Iterable[Tuple[str | multidict._multidict.istr, str]] | None = None,
cache: BaseCache | None = None,
debug: bool = False,
on_cookie_update: Callable[[Mapping[str, str]], Awaitable[None] | None] | None = None)-
Expand source code
class HSRWarpRecordsClient(badge.BadgeLoginClient): """HSR warp records statistics client.""" async def _request_warp_records( self, endpoint: str, uid: typing.Optional[int] = None, *, lang: typing.Optional[str] = None, params: typing.Optional[typing.Mapping[str, typing.Any]] = None, ) -> typing.Mapping[str, typing.Any]: """Make a request towards the warp records API.""" uid = uid or await self._get_uid(types.Game.STARRAIL) region = utility.recognize_region(uid, game=types.Game.STARRAIL) or types.Region.OVERSEAS params = { "game_biz": utility.get_prod_game_biz(region, types.Game.STARRAIL), "region": utility.recognize_starrail_server(uid), "uid": uid, **(params or {}), } url = routes.HKRPG_GACHA_RECORD_URL.get_url(region) / endpoint return await self._request_with_badge(types.Game.STARRAIL, url, uid, lang=lang, params=params) async def get_starrail_warp_brief( self, uid: typing.Optional[int] = None, *, lang: typing.Optional[str] = None, ) -> models.StarRailWarpBrief: """Get an overview of the most recently obtained 5-star items across all banners.""" data = await self._request_warp_records("brief", uid, lang=lang) return models.StarRailWarpBrief(**data) async def get_starrail_warp_pool_stats( self, banner_type: gacha_models.StarRailBannerType, uid: typing.Optional[int] = None, *, lang: typing.Optional[str] = None, ) -> typing.Sequence[models.StarRailWarpPoolStat]: """Get per-banner warp statistics for a banner type.""" gacha_type = GACHA_TYPES[gacha_models.StarRailBannerType(banner_type)] data = await self._request_warp_records("pool_stat", uid, lang=lang, params={"gacha_type": gacha_type}) return [models.StarRailWarpPoolStat(**card) for card in data["cards"]] async def get_starrail_five_star_warps( self, banner_type: gacha_models.StarRailBannerType, uid: typing.Optional[int] = None, *, lang: typing.Optional[str] = None, ) -> models.StarRailFiveStarWarps: """Get all 5-star items obtained from a banner type along with the current pity.""" params: typing.Dict[str, typing.Any] = {"gacha_type": GACHA_TYPES[gacha_models.StarRailBannerType(banner_type)]} rows: typing.List[typing.Mapping[str, typing.Any]] = [] while True: data = await self._request_warp_records("five_star_list", uid, lang=lang, params=params) rows.extend(data["list"]) if not data["has_more"]: break params = {**params, "version_id": data["version_id"], "max_id": data["next_max_id"]} # The row without an item is the ongoing streak towards the next 5-star. pity = next((row["gacha_count"] for row in rows if not row["got_item"]), 0) warps = [models.StarRailFiveStarWarp(**row) for row in rows if row["got_item"]] return models.StarRailFiveStarWarps(version_id=data["version_id"], pity=pity, warps=warps)HSR warp records statistics client.
Ancestors
- BadgeLoginClient
- BaseClient
- abc.ABC
Subclasses
Methods
async def get_starrail_five_star_warps(self,
banner_type: StarRailBannerType,
uid: int | None = None,
*,
lang: str | None = None) ‑> StarRailFiveStarWarps-
Expand source code
async def get_starrail_five_star_warps( self, banner_type: gacha_models.StarRailBannerType, uid: typing.Optional[int] = None, *, lang: typing.Optional[str] = None, ) -> models.StarRailFiveStarWarps: """Get all 5-star items obtained from a banner type along with the current pity.""" params: typing.Dict[str, typing.Any] = {"gacha_type": GACHA_TYPES[gacha_models.StarRailBannerType(banner_type)]} rows: typing.List[typing.Mapping[str, typing.Any]] = [] while True: data = await self._request_warp_records("five_star_list", uid, lang=lang, params=params) rows.extend(data["list"]) if not data["has_more"]: break params = {**params, "version_id": data["version_id"], "max_id": data["next_max_id"]} # The row without an item is the ongoing streak towards the next 5-star. pity = next((row["gacha_count"] for row in rows if not row["got_item"]), 0) warps = [models.StarRailFiveStarWarp(**row) for row in rows if row["got_item"]] return models.StarRailFiveStarWarps(version_id=data["version_id"], pity=pity, warps=warps)Get all 5-star items obtained from a banner type along with the current pity.
async def get_starrail_warp_brief(self, uid: int | None = None, *, lang: str | None = None) ‑> StarRailWarpBrief-
Expand source code
async def get_starrail_warp_brief( self, uid: typing.Optional[int] = None, *, lang: typing.Optional[str] = None, ) -> models.StarRailWarpBrief: """Get an overview of the most recently obtained 5-star items across all banners.""" data = await self._request_warp_records("brief", uid, lang=lang) return models.StarRailWarpBrief(**data)Get an overview of the most recently obtained 5-star items across all banners.
async def get_starrail_warp_pool_stats(self,
banner_type: StarRailBannerType,
uid: int | None = None,
*,
lang: str | None = None) ‑> Sequence[StarRailWarpPoolStat]-
Expand source code
async def get_starrail_warp_pool_stats( self, banner_type: gacha_models.StarRailBannerType, uid: typing.Optional[int] = None, *, lang: typing.Optional[str] = None, ) -> typing.Sequence[models.StarRailWarpPoolStat]: """Get per-banner warp statistics for a banner type.""" gacha_type = GACHA_TYPES[gacha_models.StarRailBannerType(banner_type)] data = await self._request_warp_records("pool_stat", uid, lang=lang, params={"gacha_type": gacha_type}) return [models.StarRailWarpPoolStat(**card) for card in data["cards"]]Get per-banner warp statistics for a banner type.
Inherited members