Module genshin.client.components.hsr_lineup
Honkai: Star Rail lineup simulator component.
Classes
class HSRLineupClient (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 HSRLineupClient(base.BaseClient): """HSR lineup simulator client.""" async def _request( self, endpoint: str, *, lang: typing.Optional[str] = None, region: typing.Optional[types.Region] = None, method: typing.Optional[str] = None, params: typing.Optional[typing.Mapping[str, typing.Any]] = None, data: typing.Any = None, headers: typing.Optional[aiohttp.typedefs.LooseHeaders] = None, **kwargs: typing.Any, ) -> typing.Mapping[str, typing.Any]: """Make a request any hoyolab endpoint.""" if lang is not None and lang not in GAME_LANGS[types.Game.STARRAIL]: raise ValueError(f"Invalid language {lang!r} for game {types.Game.STARRAIL}.") lang = lang or self.lang region = region or self.region url = routes.HSR_LINEUP_SIMULATOR_URL.get_url() / endpoint headers = base.parse_loose_headers(headers) headers.update(ds.get_ds_headers(data=data, params=params, region=region, lang=lang)) return await self.request(url, method=method, params=params, data=data, headers=headers, **kwargs) async def get_starrail_lineup_game_modes( self, *, lang: typing.Optional[str] = None ) -> list[models.StarRailGameMode]: """Get the available game modes for the HSR lineup simulator.""" data = await self._request("tag", lang=lang) return [models.StarRailGameMode(**item) for item in data["tree"]] def get_starrail_lineup_floor( self, game_modes: typing.Sequence[models.StarRailGameMode], *, type: LineupGameMode, floor: int, ) -> typing.Optional[models.StarRailGameModeFloor]: """Get a specific floor from the game modes.""" for mode in game_modes: if mode.type != type: continue for f in mode.floors: if f.floor == floor: return f return None @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.MOC], typing.Literal["Chasm"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.StarRailLineupResponse: ... @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.PURE_FICTION], typing.Literal["Story"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.PureFictionLineupResponse: ... @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.APC_SHADOW], typing.Literal["Boss"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.APCShadowLineupResponse: ... async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: LineupGameMode, next_page_token: typing.Optional[str] = None, order: typing.Literal["Hot", "Match", "CreatedTime"] = "Match", lang: typing.Optional[str] = None, ) -> typing.Union[models.StarRailLineupResponse, models.PureFictionLineupResponse, models.APCShadowLineupResponse]: """Get the available lineups for the HSR lineup simulator.""" params: dict[str, typing.Any] = { "tag_id": tag_id, "group_id": group_id, "lineup_type": str(type), "game": "hkrpg", } if order not in {"Hot", "Match", "CreatedTime"}: msg = f"Invalid order {order!r}. Must be one of 'Hot', 'Match', or 'CreatedTime'." raise ValueError(msg) params["order"] = order if self.uid is not None: params["uid"] = self.uid params["region"] = recognize_server(self.uid, types.Game.STARRAIL) if next_page_token: params["next_page_token"] = next_page_token data = await self._request("lineup/index", lang=lang, params=params) if type == "Story": return models.PureFictionLineupResponse(**data) elif type == "Boss": return models.APCShadowLineupResponse(**data) return models.StarRailLineupResponse(**data) @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.MOC], typing.Literal["Chasm"]], *, lang: typing.Optional[str] = ..., ) -> list[models.MOCSchedule]: ... @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.PURE_FICTION], typing.Literal["Story"]], *, lang: typing.Optional[str] = ..., ) -> list[models.PureFictionSchedule]: ... @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.APC_SHADOW], typing.Literal["Boss"]], *, lang: typing.Optional[str] = ..., ) -> list[models.APCShadowSchedule]: ... async def get_starrail_lineup_schedules( self, type: LineupGameMode, *, lang: typing.Optional[str] = None ) -> typing.Union[list[models.MOCSchedule], list[models.PureFictionSchedule], list[models.APCShadowSchedule]]: """Get the schedule for the HSR lineup simulator.""" endpoints = { "Chasm": "schedule/list", "Story": "story_schedule/list", "Boss": "boss_schedule/list", } endpoint = endpoints.get(type) if endpoint is None: msg = f"Invalid type {type!r} for HSR lineup schedule." raise ValueError(msg) data = await self._request(endpoint, lang=lang) if type == "Boss": return [models.APCShadowSchedule(**item) for item in data["schedule"]] if type == "Chasm": return [models.MOCSchedule(**item) for item in data["schedule"]] return [models.PureFictionSchedule(**item) for item in data["schedule"]]HSR lineup simulator client.
Ancestors
- BaseClient
- abc.ABC
Subclasses
Class variables
var logger : logging.Logger
Instance variables
var authkeys : dict[Game, str]-
Expand source code
class HSRLineupClient(base.BaseClient): """HSR lineup simulator client.""" async def _request( self, endpoint: str, *, lang: typing.Optional[str] = None, region: typing.Optional[types.Region] = None, method: typing.Optional[str] = None, params: typing.Optional[typing.Mapping[str, typing.Any]] = None, data: typing.Any = None, headers: typing.Optional[aiohttp.typedefs.LooseHeaders] = None, **kwargs: typing.Any, ) -> typing.Mapping[str, typing.Any]: """Make a request any hoyolab endpoint.""" if lang is not None and lang not in GAME_LANGS[types.Game.STARRAIL]: raise ValueError(f"Invalid language {lang!r} for game {types.Game.STARRAIL}.") lang = lang or self.lang region = region or self.region url = routes.HSR_LINEUP_SIMULATOR_URL.get_url() / endpoint headers = base.parse_loose_headers(headers) headers.update(ds.get_ds_headers(data=data, params=params, region=region, lang=lang)) return await self.request(url, method=method, params=params, data=data, headers=headers, **kwargs) async def get_starrail_lineup_game_modes( self, *, lang: typing.Optional[str] = None ) -> list[models.StarRailGameMode]: """Get the available game modes for the HSR lineup simulator.""" data = await self._request("tag", lang=lang) return [models.StarRailGameMode(**item) for item in data["tree"]] def get_starrail_lineup_floor( self, game_modes: typing.Sequence[models.StarRailGameMode], *, type: LineupGameMode, floor: int, ) -> typing.Optional[models.StarRailGameModeFloor]: """Get a specific floor from the game modes.""" for mode in game_modes: if mode.type != type: continue for f in mode.floors: if f.floor == floor: return f return None @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.MOC], typing.Literal["Chasm"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.StarRailLineupResponse: ... @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.PURE_FICTION], typing.Literal["Story"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.PureFictionLineupResponse: ... @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.APC_SHADOW], typing.Literal["Boss"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.APCShadowLineupResponse: ... async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: LineupGameMode, next_page_token: typing.Optional[str] = None, order: typing.Literal["Hot", "Match", "CreatedTime"] = "Match", lang: typing.Optional[str] = None, ) -> typing.Union[models.StarRailLineupResponse, models.PureFictionLineupResponse, models.APCShadowLineupResponse]: """Get the available lineups for the HSR lineup simulator.""" params: dict[str, typing.Any] = { "tag_id": tag_id, "group_id": group_id, "lineup_type": str(type), "game": "hkrpg", } if order not in {"Hot", "Match", "CreatedTime"}: msg = f"Invalid order {order!r}. Must be one of 'Hot', 'Match', or 'CreatedTime'." raise ValueError(msg) params["order"] = order if self.uid is not None: params["uid"] = self.uid params["region"] = recognize_server(self.uid, types.Game.STARRAIL) if next_page_token: params["next_page_token"] = next_page_token data = await self._request("lineup/index", lang=lang, params=params) if type == "Story": return models.PureFictionLineupResponse(**data) elif type == "Boss": return models.APCShadowLineupResponse(**data) return models.StarRailLineupResponse(**data) @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.MOC], typing.Literal["Chasm"]], *, lang: typing.Optional[str] = ..., ) -> list[models.MOCSchedule]: ... @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.PURE_FICTION], typing.Literal["Story"]], *, lang: typing.Optional[str] = ..., ) -> list[models.PureFictionSchedule]: ... @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.APC_SHADOW], typing.Literal["Boss"]], *, lang: typing.Optional[str] = ..., ) -> list[models.APCShadowSchedule]: ... async def get_starrail_lineup_schedules( self, type: LineupGameMode, *, lang: typing.Optional[str] = None ) -> typing.Union[list[models.MOCSchedule], list[models.PureFictionSchedule], list[models.APCShadowSchedule]]: """Get the schedule for the HSR lineup simulator.""" endpoints = { "Chasm": "schedule/list", "Story": "story_schedule/list", "Boss": "boss_schedule/list", } endpoint = endpoints.get(type) if endpoint is None: msg = f"Invalid type {type!r} for HSR lineup schedule." raise ValueError(msg) data = await self._request(endpoint, lang=lang) if type == "Boss": return [models.APCShadowSchedule(**item) for item in data["schedule"]] if type == "Chasm": return [models.MOCSchedule(**item) for item in data["schedule"]] return [models.PureFictionSchedule(**item) for item in data["schedule"]] var cache : BaseCache-
Expand source code
class HSRLineupClient(base.BaseClient): """HSR lineup simulator client.""" async def _request( self, endpoint: str, *, lang: typing.Optional[str] = None, region: typing.Optional[types.Region] = None, method: typing.Optional[str] = None, params: typing.Optional[typing.Mapping[str, typing.Any]] = None, data: typing.Any = None, headers: typing.Optional[aiohttp.typedefs.LooseHeaders] = None, **kwargs: typing.Any, ) -> typing.Mapping[str, typing.Any]: """Make a request any hoyolab endpoint.""" if lang is not None and lang not in GAME_LANGS[types.Game.STARRAIL]: raise ValueError(f"Invalid language {lang!r} for game {types.Game.STARRAIL}.") lang = lang or self.lang region = region or self.region url = routes.HSR_LINEUP_SIMULATOR_URL.get_url() / endpoint headers = base.parse_loose_headers(headers) headers.update(ds.get_ds_headers(data=data, params=params, region=region, lang=lang)) return await self.request(url, method=method, params=params, data=data, headers=headers, **kwargs) async def get_starrail_lineup_game_modes( self, *, lang: typing.Optional[str] = None ) -> list[models.StarRailGameMode]: """Get the available game modes for the HSR lineup simulator.""" data = await self._request("tag", lang=lang) return [models.StarRailGameMode(**item) for item in data["tree"]] def get_starrail_lineup_floor( self, game_modes: typing.Sequence[models.StarRailGameMode], *, type: LineupGameMode, floor: int, ) -> typing.Optional[models.StarRailGameModeFloor]: """Get a specific floor from the game modes.""" for mode in game_modes: if mode.type != type: continue for f in mode.floors: if f.floor == floor: return f return None @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.MOC], typing.Literal["Chasm"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.StarRailLineupResponse: ... @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.PURE_FICTION], typing.Literal["Story"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.PureFictionLineupResponse: ... @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.APC_SHADOW], typing.Literal["Boss"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.APCShadowLineupResponse: ... async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: LineupGameMode, next_page_token: typing.Optional[str] = None, order: typing.Literal["Hot", "Match", "CreatedTime"] = "Match", lang: typing.Optional[str] = None, ) -> typing.Union[models.StarRailLineupResponse, models.PureFictionLineupResponse, models.APCShadowLineupResponse]: """Get the available lineups for the HSR lineup simulator.""" params: dict[str, typing.Any] = { "tag_id": tag_id, "group_id": group_id, "lineup_type": str(type), "game": "hkrpg", } if order not in {"Hot", "Match", "CreatedTime"}: msg = f"Invalid order {order!r}. Must be one of 'Hot', 'Match', or 'CreatedTime'." raise ValueError(msg) params["order"] = order if self.uid is not None: params["uid"] = self.uid params["region"] = recognize_server(self.uid, types.Game.STARRAIL) if next_page_token: params["next_page_token"] = next_page_token data = await self._request("lineup/index", lang=lang, params=params) if type == "Story": return models.PureFictionLineupResponse(**data) elif type == "Boss": return models.APCShadowLineupResponse(**data) return models.StarRailLineupResponse(**data) @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.MOC], typing.Literal["Chasm"]], *, lang: typing.Optional[str] = ..., ) -> list[models.MOCSchedule]: ... @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.PURE_FICTION], typing.Literal["Story"]], *, lang: typing.Optional[str] = ..., ) -> list[models.PureFictionSchedule]: ... @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.APC_SHADOW], typing.Literal["Boss"]], *, lang: typing.Optional[str] = ..., ) -> list[models.APCShadowSchedule]: ... async def get_starrail_lineup_schedules( self, type: LineupGameMode, *, lang: typing.Optional[str] = None ) -> typing.Union[list[models.MOCSchedule], list[models.PureFictionSchedule], list[models.APCShadowSchedule]]: """Get the schedule for the HSR lineup simulator.""" endpoints = { "Chasm": "schedule/list", "Story": "story_schedule/list", "Boss": "boss_schedule/list", } endpoint = endpoints.get(type) if endpoint is None: msg = f"Invalid type {type!r} for HSR lineup schedule." raise ValueError(msg) data = await self._request(endpoint, lang=lang) if type == "Boss": return [models.APCShadowSchedule(**item) for item in data["schedule"]] if type == "Chasm": return [models.MOCSchedule(**item) for item in data["schedule"]] return [models.PureFictionSchedule(**item) for item in data["schedule"]] -
Expand source code
class HSRLineupClient(base.BaseClient): """HSR lineup simulator client.""" async def _request( self, endpoint: str, *, lang: typing.Optional[str] = None, region: typing.Optional[types.Region] = None, method: typing.Optional[str] = None, params: typing.Optional[typing.Mapping[str, typing.Any]] = None, data: typing.Any = None, headers: typing.Optional[aiohttp.typedefs.LooseHeaders] = None, **kwargs: typing.Any, ) -> typing.Mapping[str, typing.Any]: """Make a request any hoyolab endpoint.""" if lang is not None and lang not in GAME_LANGS[types.Game.STARRAIL]: raise ValueError(f"Invalid language {lang!r} for game {types.Game.STARRAIL}.") lang = lang or self.lang region = region or self.region url = routes.HSR_LINEUP_SIMULATOR_URL.get_url() / endpoint headers = base.parse_loose_headers(headers) headers.update(ds.get_ds_headers(data=data, params=params, region=region, lang=lang)) return await self.request(url, method=method, params=params, data=data, headers=headers, **kwargs) async def get_starrail_lineup_game_modes( self, *, lang: typing.Optional[str] = None ) -> list[models.StarRailGameMode]: """Get the available game modes for the HSR lineup simulator.""" data = await self._request("tag", lang=lang) return [models.StarRailGameMode(**item) for item in data["tree"]] def get_starrail_lineup_floor( self, game_modes: typing.Sequence[models.StarRailGameMode], *, type: LineupGameMode, floor: int, ) -> typing.Optional[models.StarRailGameModeFloor]: """Get a specific floor from the game modes.""" for mode in game_modes: if mode.type != type: continue for f in mode.floors: if f.floor == floor: return f return None @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.MOC], typing.Literal["Chasm"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.StarRailLineupResponse: ... @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.PURE_FICTION], typing.Literal["Story"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.PureFictionLineupResponse: ... @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.APC_SHADOW], typing.Literal["Boss"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.APCShadowLineupResponse: ... async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: LineupGameMode, next_page_token: typing.Optional[str] = None, order: typing.Literal["Hot", "Match", "CreatedTime"] = "Match", lang: typing.Optional[str] = None, ) -> typing.Union[models.StarRailLineupResponse, models.PureFictionLineupResponse, models.APCShadowLineupResponse]: """Get the available lineups for the HSR lineup simulator.""" params: dict[str, typing.Any] = { "tag_id": tag_id, "group_id": group_id, "lineup_type": str(type), "game": "hkrpg", } if order not in {"Hot", "Match", "CreatedTime"}: msg = f"Invalid order {order!r}. Must be one of 'Hot', 'Match', or 'CreatedTime'." raise ValueError(msg) params["order"] = order if self.uid is not None: params["uid"] = self.uid params["region"] = recognize_server(self.uid, types.Game.STARRAIL) if next_page_token: params["next_page_token"] = next_page_token data = await self._request("lineup/index", lang=lang, params=params) if type == "Story": return models.PureFictionLineupResponse(**data) elif type == "Boss": return models.APCShadowLineupResponse(**data) return models.StarRailLineupResponse(**data) @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.MOC], typing.Literal["Chasm"]], *, lang: typing.Optional[str] = ..., ) -> list[models.MOCSchedule]: ... @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.PURE_FICTION], typing.Literal["Story"]], *, lang: typing.Optional[str] = ..., ) -> list[models.PureFictionSchedule]: ... @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.APC_SHADOW], typing.Literal["Boss"]], *, lang: typing.Optional[str] = ..., ) -> list[models.APCShadowSchedule]: ... async def get_starrail_lineup_schedules( self, type: LineupGameMode, *, lang: typing.Optional[str] = None ) -> typing.Union[list[models.MOCSchedule], list[models.PureFictionSchedule], list[models.APCShadowSchedule]]: """Get the schedule for the HSR lineup simulator.""" endpoints = { "Chasm": "schedule/list", "Story": "story_schedule/list", "Boss": "boss_schedule/list", } endpoint = endpoints.get(type) if endpoint is None: msg = f"Invalid type {type!r} for HSR lineup schedule." raise ValueError(msg) data = await self._request(endpoint, lang=lang) if type == "Boss": return [models.APCShadowSchedule(**item) for item in data["schedule"]] if type == "Chasm": return [models.MOCSchedule(**item) for item in data["schedule"]] return [models.PureFictionSchedule(**item) for item in data["schedule"]] var custom_headers : multidict._multidict.CIMultiDict[str]-
Expand source code
class HSRLineupClient(base.BaseClient): """HSR lineup simulator client.""" async def _request( self, endpoint: str, *, lang: typing.Optional[str] = None, region: typing.Optional[types.Region] = None, method: typing.Optional[str] = None, params: typing.Optional[typing.Mapping[str, typing.Any]] = None, data: typing.Any = None, headers: typing.Optional[aiohttp.typedefs.LooseHeaders] = None, **kwargs: typing.Any, ) -> typing.Mapping[str, typing.Any]: """Make a request any hoyolab endpoint.""" if lang is not None and lang not in GAME_LANGS[types.Game.STARRAIL]: raise ValueError(f"Invalid language {lang!r} for game {types.Game.STARRAIL}.") lang = lang or self.lang region = region or self.region url = routes.HSR_LINEUP_SIMULATOR_URL.get_url() / endpoint headers = base.parse_loose_headers(headers) headers.update(ds.get_ds_headers(data=data, params=params, region=region, lang=lang)) return await self.request(url, method=method, params=params, data=data, headers=headers, **kwargs) async def get_starrail_lineup_game_modes( self, *, lang: typing.Optional[str] = None ) -> list[models.StarRailGameMode]: """Get the available game modes for the HSR lineup simulator.""" data = await self._request("tag", lang=lang) return [models.StarRailGameMode(**item) for item in data["tree"]] def get_starrail_lineup_floor( self, game_modes: typing.Sequence[models.StarRailGameMode], *, type: LineupGameMode, floor: int, ) -> typing.Optional[models.StarRailGameModeFloor]: """Get a specific floor from the game modes.""" for mode in game_modes: if mode.type != type: continue for f in mode.floors: if f.floor == floor: return f return None @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.MOC], typing.Literal["Chasm"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.StarRailLineupResponse: ... @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.PURE_FICTION], typing.Literal["Story"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.PureFictionLineupResponse: ... @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.APC_SHADOW], typing.Literal["Boss"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.APCShadowLineupResponse: ... async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: LineupGameMode, next_page_token: typing.Optional[str] = None, order: typing.Literal["Hot", "Match", "CreatedTime"] = "Match", lang: typing.Optional[str] = None, ) -> typing.Union[models.StarRailLineupResponse, models.PureFictionLineupResponse, models.APCShadowLineupResponse]: """Get the available lineups for the HSR lineup simulator.""" params: dict[str, typing.Any] = { "tag_id": tag_id, "group_id": group_id, "lineup_type": str(type), "game": "hkrpg", } if order not in {"Hot", "Match", "CreatedTime"}: msg = f"Invalid order {order!r}. Must be one of 'Hot', 'Match', or 'CreatedTime'." raise ValueError(msg) params["order"] = order if self.uid is not None: params["uid"] = self.uid params["region"] = recognize_server(self.uid, types.Game.STARRAIL) if next_page_token: params["next_page_token"] = next_page_token data = await self._request("lineup/index", lang=lang, params=params) if type == "Story": return models.PureFictionLineupResponse(**data) elif type == "Boss": return models.APCShadowLineupResponse(**data) return models.StarRailLineupResponse(**data) @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.MOC], typing.Literal["Chasm"]], *, lang: typing.Optional[str] = ..., ) -> list[models.MOCSchedule]: ... @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.PURE_FICTION], typing.Literal["Story"]], *, lang: typing.Optional[str] = ..., ) -> list[models.PureFictionSchedule]: ... @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.APC_SHADOW], typing.Literal["Boss"]], *, lang: typing.Optional[str] = ..., ) -> list[models.APCShadowSchedule]: ... async def get_starrail_lineup_schedules( self, type: LineupGameMode, *, lang: typing.Optional[str] = None ) -> typing.Union[list[models.MOCSchedule], list[models.PureFictionSchedule], list[models.APCShadowSchedule]]: """Get the schedule for the HSR lineup simulator.""" endpoints = { "Chasm": "schedule/list", "Story": "story_schedule/list", "Boss": "boss_schedule/list", } endpoint = endpoints.get(type) if endpoint is None: msg = f"Invalid type {type!r} for HSR lineup schedule." raise ValueError(msg) data = await self._request(endpoint, lang=lang) if type == "Boss": return [models.APCShadowSchedule(**item) for item in data["schedule"]] if type == "Chasm": return [models.MOCSchedule(**item) for item in data["schedule"]] return [models.PureFictionSchedule(**item) for item in data["schedule"]] var uids : dict[Game, int]-
Expand source code
class HSRLineupClient(base.BaseClient): """HSR lineup simulator client.""" async def _request( self, endpoint: str, *, lang: typing.Optional[str] = None, region: typing.Optional[types.Region] = None, method: typing.Optional[str] = None, params: typing.Optional[typing.Mapping[str, typing.Any]] = None, data: typing.Any = None, headers: typing.Optional[aiohttp.typedefs.LooseHeaders] = None, **kwargs: typing.Any, ) -> typing.Mapping[str, typing.Any]: """Make a request any hoyolab endpoint.""" if lang is not None and lang not in GAME_LANGS[types.Game.STARRAIL]: raise ValueError(f"Invalid language {lang!r} for game {types.Game.STARRAIL}.") lang = lang or self.lang region = region or self.region url = routes.HSR_LINEUP_SIMULATOR_URL.get_url() / endpoint headers = base.parse_loose_headers(headers) headers.update(ds.get_ds_headers(data=data, params=params, region=region, lang=lang)) return await self.request(url, method=method, params=params, data=data, headers=headers, **kwargs) async def get_starrail_lineup_game_modes( self, *, lang: typing.Optional[str] = None ) -> list[models.StarRailGameMode]: """Get the available game modes for the HSR lineup simulator.""" data = await self._request("tag", lang=lang) return [models.StarRailGameMode(**item) for item in data["tree"]] def get_starrail_lineup_floor( self, game_modes: typing.Sequence[models.StarRailGameMode], *, type: LineupGameMode, floor: int, ) -> typing.Optional[models.StarRailGameModeFloor]: """Get a specific floor from the game modes.""" for mode in game_modes: if mode.type != type: continue for f in mode.floors: if f.floor == floor: return f return None @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.MOC], typing.Literal["Chasm"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.StarRailLineupResponse: ... @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.PURE_FICTION], typing.Literal["Story"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.PureFictionLineupResponse: ... @typing.overload async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: typing.Union[typing.Literal[models.StarRailGameModeType.APC_SHADOW], typing.Literal["Boss"]], next_page_token: typing.Optional[str] = ..., order: typing.Literal["Hot", "Match", "CreatedTime"] = ..., lang: typing.Optional[str] = ..., ) -> models.APCShadowLineupResponse: ... async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: LineupGameMode, next_page_token: typing.Optional[str] = None, order: typing.Literal["Hot", "Match", "CreatedTime"] = "Match", lang: typing.Optional[str] = None, ) -> typing.Union[models.StarRailLineupResponse, models.PureFictionLineupResponse, models.APCShadowLineupResponse]: """Get the available lineups for the HSR lineup simulator.""" params: dict[str, typing.Any] = { "tag_id": tag_id, "group_id": group_id, "lineup_type": str(type), "game": "hkrpg", } if order not in {"Hot", "Match", "CreatedTime"}: msg = f"Invalid order {order!r}. Must be one of 'Hot', 'Match', or 'CreatedTime'." raise ValueError(msg) params["order"] = order if self.uid is not None: params["uid"] = self.uid params["region"] = recognize_server(self.uid, types.Game.STARRAIL) if next_page_token: params["next_page_token"] = next_page_token data = await self._request("lineup/index", lang=lang, params=params) if type == "Story": return models.PureFictionLineupResponse(**data) elif type == "Boss": return models.APCShadowLineupResponse(**data) return models.StarRailLineupResponse(**data) @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.MOC], typing.Literal["Chasm"]], *, lang: typing.Optional[str] = ..., ) -> list[models.MOCSchedule]: ... @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.PURE_FICTION], typing.Literal["Story"]], *, lang: typing.Optional[str] = ..., ) -> list[models.PureFictionSchedule]: ... @typing.overload async def get_starrail_lineup_schedules( self, type: typing.Union[typing.Literal[models.StarRailGameModeType.APC_SHADOW], typing.Literal["Boss"]], *, lang: typing.Optional[str] = ..., ) -> list[models.APCShadowSchedule]: ... async def get_starrail_lineup_schedules( self, type: LineupGameMode, *, lang: typing.Optional[str] = None ) -> typing.Union[list[models.MOCSchedule], list[models.PureFictionSchedule], list[models.APCShadowSchedule]]: """Get the schedule for the HSR lineup simulator.""" endpoints = { "Chasm": "schedule/list", "Story": "story_schedule/list", "Boss": "boss_schedule/list", } endpoint = endpoints.get(type) if endpoint is None: msg = f"Invalid type {type!r} for HSR lineup schedule." raise ValueError(msg) data = await self._request(endpoint, lang=lang) if type == "Boss": return [models.APCShadowSchedule(**item) for item in data["schedule"]] if type == "Chasm": return [models.MOCSchedule(**item) for item in data["schedule"]] return [models.PureFictionSchedule(**item) for item in data["schedule"]]
Methods
def get_starrail_lineup_floor(self,
game_modes: Sequence[StarRailGameMode],
*,
type: StarRailGameModeType | Literal['Chasm', 'Story', 'Boss'],
floor: int) ‑> StarRailGameModeFloor | None-
Expand source code
def get_starrail_lineup_floor( self, game_modes: typing.Sequence[models.StarRailGameMode], *, type: LineupGameMode, floor: int, ) -> typing.Optional[models.StarRailGameModeFloor]: """Get a specific floor from the game modes.""" for mode in game_modes: if mode.type != type: continue for f in mode.floors: if f.floor == floor: return f return NoneGet a specific floor from the game modes.
async def get_starrail_lineup_game_modes(self, *, lang: str | None = None) ‑> list[StarRailGameMode]-
Expand source code
async def get_starrail_lineup_game_modes( self, *, lang: typing.Optional[str] = None ) -> list[models.StarRailGameMode]: """Get the available game modes for the HSR lineup simulator.""" data = await self._request("tag", lang=lang) return [models.StarRailGameMode(**item) for item in data["tree"]]Get the available game modes for the HSR lineup simulator.
async def get_starrail_lineup_schedules(self,
type: StarRailGameModeType | Literal['Chasm', 'Story', 'Boss'],
*,
lang: str | None = None) ‑> list[MOCSchedule] | list[PureFictionSchedule] | list[APCShadowSchedule]-
Expand source code
async def get_starrail_lineup_schedules( self, type: LineupGameMode, *, lang: typing.Optional[str] = None ) -> typing.Union[list[models.MOCSchedule], list[models.PureFictionSchedule], list[models.APCShadowSchedule]]: """Get the schedule for the HSR lineup simulator.""" endpoints = { "Chasm": "schedule/list", "Story": "story_schedule/list", "Boss": "boss_schedule/list", } endpoint = endpoints.get(type) if endpoint is None: msg = f"Invalid type {type!r} for HSR lineup schedule." raise ValueError(msg) data = await self._request(endpoint, lang=lang) if type == "Boss": return [models.APCShadowSchedule(**item) for item in data["schedule"]] if type == "Chasm": return [models.MOCSchedule(**item) for item in data["schedule"]] return [models.PureFictionSchedule(**item) for item in data["schedule"]]Get the schedule for the HSR lineup simulator.
async def get_starrail_lineups(self,
*,
tag_id: int,
group_id: int,
type: StarRailGameModeType | Literal['Chasm', 'Story', 'Boss'],
next_page_token: str | None = None,
order: Literal['Hot', 'Match', 'CreatedTime'] = 'Match',
lang: str | None = None) ‑> StarRailLineupResponse | PureFictionLineupResponse | APCShadowLineupResponse-
Expand source code
async def get_starrail_lineups( self, *, tag_id: int, group_id: int, type: LineupGameMode, next_page_token: typing.Optional[str] = None, order: typing.Literal["Hot", "Match", "CreatedTime"] = "Match", lang: typing.Optional[str] = None, ) -> typing.Union[models.StarRailLineupResponse, models.PureFictionLineupResponse, models.APCShadowLineupResponse]: """Get the available lineups for the HSR lineup simulator.""" params: dict[str, typing.Any] = { "tag_id": tag_id, "group_id": group_id, "lineup_type": str(type), "game": "hkrpg", } if order not in {"Hot", "Match", "CreatedTime"}: msg = f"Invalid order {order!r}. Must be one of 'Hot', 'Match', or 'CreatedTime'." raise ValueError(msg) params["order"] = order if self.uid is not None: params["uid"] = self.uid params["region"] = recognize_server(self.uid, types.Game.STARRAIL) if next_page_token: params["next_page_token"] = next_page_token data = await self._request("lineup/index", lang=lang, params=params) if type == "Story": return models.PureFictionLineupResponse(**data) elif type == "Boss": return models.APCShadowLineupResponse(**data) return models.StarRailLineupResponse(**data)Get the available lineups for the HSR lineup simulator.
Inherited members