diff --git a/gsuid_core/utils/api/ambr/api.py b/gsuid_core/utils/api/ambr/api.py index 96dc397..ff9e044 100644 --- a/gsuid_core/utils/api/ambr/api.py +++ b/gsuid_core/utils/api/ambr/api.py @@ -10,3 +10,5 @@ AMBR_GCG_DETAIL = 'https://api.ambr.top/v2/chs/gcg/{}?vh=37F4' AMBR_MONSTER_LIST = 'https://api.ambr.top/v2/chs/monster?vh=37F4' AMBR_ICON_URL = 'https://api.ambr.top/assets/UI' AMBR_MONSTER_ICON_URL = f'{AMBR_ICON_URL}/monster/' +AMBR_DAILY_URL = 'https://api.ambr.top/v2/chs/dailyDungeon?vh=37F4' +AMBR_UPGRADE_URL = 'https://api.ambr.top/v2/chs/upgrade?vh=40F3' diff --git a/gsuid_core/utils/api/ambr/models.py b/gsuid_core/utils/api/ambr/models.py index eb1bd1f..3e8f18d 100644 --- a/gsuid_core/utils/api/ambr/models.py +++ b/gsuid_core/utils/api/ambr/models.py @@ -264,3 +264,32 @@ class AmbrGCGDetail(AmbrGCGCard): class AmbrMonsterList(TypedDict): types: Dict[str, str] items: Dict[str, AmbrMonsterSimple] + + +class AmbrDungeon(TypedDict): + id: int + name: str + reward: List[int] + city: int + + +class AmbrDaily(TypedDict): + monday: List[AmbrDungeon] + tuesday: List[AmbrDungeon] + tuesday: List[AmbrDungeon] + thursday: List[AmbrDungeon] + friday: List[AmbrDungeon] + saturday: List[AmbrDungeon] + sunday: List[AmbrDungeon] + + +class AmbrUpgradeOne(TypedDict): + name: str + rank: int + icon: str + items: Dict[str, int] + + +class AmbrUpgradeItem(TypedDict): + avatar: Dict[str, AmbrUpgradeOne] + weapon: Dict[str, AmbrUpgradeOne] diff --git a/gsuid_core/utils/api/ambr/request.py b/gsuid_core/utils/api/ambr/request.py index 6991437..3a3ad25 100644 --- a/gsuid_core/utils/api/ambr/request.py +++ b/gsuid_core/utils/api/ambr/request.py @@ -15,6 +15,7 @@ from ..types import AnyDict from ..utils import _HEADER from .models import ( AmbrBook, + AmbrDaily, AmbrEvent, AmbrWeapon, AmbrGCGList, @@ -23,15 +24,18 @@ from .models import ( AmbrGCGDetail, AmbrBookDetail, AmbrMonsterList, + AmbrUpgradeItem, ) from .api import ( AMBR_BOOK_URL, AMBR_CHAR_URL, AMBR_ICON_URL, + AMBR_DAILY_URL, AMBR_EVENT_URL, AMBR_GCG_DETAIL, AMBR_WEAPON_URL, AMBR_MONSTER_URL, + AMBR_UPGRADE_URL, AMBR_GCG_LIST_URL, AMBR_MONSTER_LIST, AMBR_BOOK_DATA_URL, @@ -94,6 +98,25 @@ async def get_ambr_weapon_data(id: Union[int, str]) -> Optional[AmbrWeapon]: return None +async def get_ambr_daily_data() -> Optional[AmbrDaily]: + data = await _ambr_request(url=AMBR_DAILY_URL) + if isinstance(data, Dict) and data['response'] == 200: + data = data['data'] + insert = {} + for day in data: + insert[day] = [value for value in data[day].values()] + return cast(AmbrDaily, insert) + return None + + +async def get_all_upgrade() -> Optional[AmbrUpgradeItem]: + data = await _ambr_request(url=AMBR_UPGRADE_URL) + if isinstance(data, Dict) and data['response'] == 200: + data = data['data'] + return cast(AmbrUpgradeItem, data) + return None + + async def get_all_book_id() -> Optional[Dict[str, AmbrBook]]: data = await _ambr_request(url=AMBR_BOOK_URL) if isinstance(data, Dict) and data['response'] == 200: @@ -117,8 +140,32 @@ async def get_story_data(story_id: Union[int, str]) -> Optional[str]: return None -async def get_ambr_icon(type: str, icon_name: str, path: Path) -> Image.Image: - file_path = path / f'{icon_name}.png' +async def get_ambr_icon( + type: str, + icon_name: str, + path: Path, + ui_name: str, + save_name: Optional[str] = None, +) -> Image.Image: + ''' + 获取ItemIcon: + await get_ambr_icon('UI', '114004', path, 'ItemIcon') + https://api.ambr.top/assets/UI/UI_ItemIcon_114004.png + 获取其他: + await get_ambr_icon('UI', 'Chongyun', path, 'AvatarIcon') + https://api.ambr.top/assets/UI/UI_AvatarIcon_Chongyun.png + ''' + if ui_name: + item_icon = f'UI_{ui_name}_{icon_name}.png' + url = f'{AMBR_ICON_URL}/{item_icon}' + else: + item_icon = f'{icon_name}.png' + url = f'{AMBR_ICON_URL}/{type}/{item_icon}' + + if save_name: + item_icon = f'{save_name}.png' + + file_path = path / item_icon if file_path.exists(): async with aiofiles.open(file_path, 'rb') as f: @@ -126,7 +173,7 @@ async def get_ambr_icon(type: str, icon_name: str, path: Path) -> Image.Image: async with AsyncClient(timeout=None) as client: req = await client.get( - f'{AMBR_ICON_URL}/{type}/{icon_name}.png', + url, headers=_HEADER, ) if req.status_code == 200: diff --git a/poetry.lock b/poetry.lock index 05c0d50..067fc06 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1105,13 +1105,13 @@ reference = "mirrors" [[package]] name = "identify" -version = "2.5.26" +version = "2.5.27" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.26-py2.py3-none-any.whl", hash = "sha256:c22a8ead0d4ca11f1edd6c9418c3220669b3b7533ada0a0ffa6cc0ef85cf9b54"}, - {file = "identify-2.5.26.tar.gz", hash = "sha256:7243800bce2f58404ed41b7c002e53d4d22bcf3ae1b7900c2d7aefd95394bf7f"}, + {file = "identify-2.5.27-py2.py3-none-any.whl", hash = "sha256:fdb527b2dfe24602809b2201e033c2a113d7bdf716db3ca8e3243f735dcecaba"}, + {file = "identify-2.5.27.tar.gz", hash = "sha256:287b75b04a0e22d727bc9a41f0d4f3c1bcada97490fa6eabb5b28f0e9097e733"}, ] [package.extras]