diff --git a/gsuid_core/utils/api/ambr/api.py b/gsuid_core/utils/api/ambr/api.py index 1371543..96dc397 100644 --- a/gsuid_core/utils/api/ambr/api.py +++ b/gsuid_core/utils/api/ambr/api.py @@ -8,3 +8,5 @@ AMBR_MONSTER_URL = 'https://api.ambr.top/v2/chs/monster/{}?vh=37F4' AMBR_GCG_LIST_URL = 'https://api.ambr.top/v2/chs/gcg?vh=37F4' 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/' diff --git a/gsuid_core/utils/api/ambr/request.py b/gsuid_core/utils/api/ambr/request.py index 85cd347..6bd1330 100644 --- a/gsuid_core/utils/api/ambr/request.py +++ b/gsuid_core/utils/api/ambr/request.py @@ -3,8 +3,12 @@ ''' from __future__ import annotations +from io import BytesIO +from pathlib import Path from typing import Dict, Union, Literal, Optional, cast +import aiofiles +from PIL import Image from httpx import AsyncClient from ..types import AnyDict @@ -23,6 +27,7 @@ from .models import ( from .api import ( AMBR_BOOK_URL, AMBR_CHAR_URL, + AMBR_ICON_URL, AMBR_EVENT_URL, AMBR_GCG_DETAIL, AMBR_WEAPON_URL, @@ -112,6 +117,27 @@ 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' + + if file_path.exists(): + async with aiofiles.open(path, 'rb') as f: + return Image.open(await f.read()) + + async with AsyncClient(timeout=None) as client: + req = await client.get( + f'{AMBR_ICON_URL}/{type}/{icon_name}.png', + headers=_HEADER, + ) + if req.status_code == 200: + content = req.read() + async with aiofiles.open(file_path, 'wb') as f: + await f.write(content) + return Image.open(BytesIO(content)) + else: + return Image.new('RGBA', (256, 256), (0, 0, 0)) + + async def _ambr_request( url: str, method: Literal['GET', 'POST'] = 'GET', diff --git a/gsuid_core/utils/database/dal.py b/gsuid_core/utils/database/dal.py index 8f5288f..9eab8ea 100644 --- a/gsuid_core/utils/database/dal.py +++ b/gsuid_core/utils/database/dal.py @@ -39,6 +39,7 @@ class SQLA: async def sr_adapter(self): exec_list = [ + 'ALTER TABLE GsBind ADD COLUMN group_id TEXT', 'ALTER TABLE GsBind ADD COLUMN sr_uid TEXT', 'ALTER TABLE GsUser ADD COLUMN sr_uid TEXT', 'ALTER TABLE GsUser ADD COLUMN sr_region TEXT', diff --git a/gsuid_core/utils/database/models.py b/gsuid_core/utils/database/models.py index 0057818..40a3c49 100644 --- a/gsuid_core/utils/database/models.py +++ b/gsuid_core/utils/database/models.py @@ -8,6 +8,7 @@ class GsBind(SQLModel, table=True): id: Optional[int] = Field(default=None, primary_key=True, title='序号') bot_id: str = Field(title='平台') user_id: str = Field(title='账号') + group_id: str = Field(title='群号') uid: Optional[str] = Field(default=None, title='原神UID') sr_uid: Optional[str] = Field(default=None, title='星铁UID') mys_id: Optional[str] = Field(default=None, title='米游社通行证')