Add Get Record Cards

This commit is contained in:
洛水居室 2023-05-06 20:53:19 +08:00 committed by GitHub
parent 10a1a22f68
commit 5d2d3609bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 9 deletions

View File

@ -1,6 +1,8 @@
from typing import Optional, Any
from typing import Optional, Any, List
from simnet.client.base import BaseClient
from simnet.client.routes import RECORD_URL
from simnet.errors import DataNotPublic
from simnet.models.lab.record import RecordCard
from simnet.utils.enum_ import Region, Game
from simnet.utils.types import QueryParamTypes
@ -92,3 +94,33 @@ class BaseChronicleClient(BaseClient):
"card/wapi/changeDataSwitch",
data=dict(switch_id=switch_id, is_public=on, game_id=game_id),
)
async def get_record_cards(
self,
account_id: Optional[int] = None,
*,
lang: Optional[str] = None,
) -> List[RecordCard]:
"""Get a user's record cards.
Args:
account_id: Optional[int], the user's account ID, defaults to None
lang: Optional[str], the language version of the request, defaults to None
Returns:
A list of RecordCard objects.
Raises:
DataNotPublic: If data is empty.
"""
account_id = account_id or self.account_id
data = await self.request_game_record(
"card/wapi/getGameRecordCard",
lang=lang,
params=dict(uid=account_id),
)
if not data["list"]:
raise DataNotPublic({"retcode": 10102})
return [RecordCard(**card) for card in data["list"]]

View File

@ -403,20 +403,23 @@ class RecordCard(BaseRecordCard):
"""
def __new__(cls, **kwargs: Any) -> BaseRecordCard:
"""Creates the appropriate record card.
"""Creates an appropriate record card instance based on the provided game ID.
Args:
**kwargs: The arguments passed in to create the record card.
Returns:
BaseRecordCard: The record card object.
BaseRecordCard: An instance of a subclass of `BaseRecordCard` based on the provided game ID.
Raises:
ValueError: If the provided game ID is invalid.
"""
game_id = kwargs.get("game_id", 0)
if game_id == 1:
cls = HonkaiRecordCard # skipcq: PYL-W0642
elif game_id == 2:
cls = GenshinRecordCard # skipcq: PYL-W0642
elif game_id == 6:
cls = StarRailRecodeCard # skipcq: PYL-W0642
return HonkaiRecordCard(**kwargs)
if game_id == 2:
return GenshinRecordCard(**kwargs)
if game_id == 6:
return StarRailRecodeCard(**kwargs)
return super().__new__(cls) # skipcq: PYL-E1120
raise ValueError(f"Invalid game ID provided: {game_id}")