mirror of
https://github.com/PaiGramTeam/PaiGram.git
synced 2024-11-25 18:04:10 +00:00
🐛 Fix daily_material
This commit is contained in:
parent
2a9d981d40
commit
d5165ff4e6
@ -13,7 +13,7 @@ from typing import TYPE_CHECKING, Dict, Iterable, Iterator, List, Optional, Tupl
|
|||||||
import aiofiles
|
import aiofiles
|
||||||
import aiofiles.os
|
import aiofiles.os
|
||||||
import bs4
|
import bs4
|
||||||
import pydantic.json
|
import pydantic
|
||||||
from arkowrapper import ArkoWrapper
|
from arkowrapper import ArkoWrapper
|
||||||
from httpx import AsyncClient, HTTPError, TimeoutException
|
from httpx import AsyncClient, HTTPError, TimeoutException
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
@ -33,12 +33,6 @@ from utils.const import DATA_DIR
|
|||||||
from utils.log import logger
|
from utils.log import logger
|
||||||
from utils.uid import mask_number
|
from utils.uid import mask_number
|
||||||
|
|
||||||
try:
|
|
||||||
import ujson as jsonlib
|
|
||||||
|
|
||||||
except ImportError:
|
|
||||||
import json as jsonlib
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from simnet import GenshinClient
|
from simnet import GenshinClient
|
||||||
from telegram import Message, Update, User
|
from telegram import Message, Update, User
|
||||||
@ -124,15 +118,15 @@ def get_material_serial_name(names: Iterable[str]) -> str:
|
|||||||
|
|
||||||
|
|
||||||
class MaterialsData(BaseModel):
|
class MaterialsData(BaseModel):
|
||||||
data: Optional[List[Dict[str, "AreaDailyMaterialsData"]]] = None
|
__root__: Optional[List[Dict[str, "AreaDailyMaterialsData"]]] = None
|
||||||
|
|
||||||
def weekday(self, weekday: int) -> Dict[str, "AreaDailyMaterialsData"]:
|
def weekday(self, weekday: int) -> Dict[str, "AreaDailyMaterialsData"]:
|
||||||
if self.data is None:
|
if self.__root__ is None:
|
||||||
return {}
|
return {}
|
||||||
return self.data[weekday]
|
return self.__root__[weekday]
|
||||||
|
|
||||||
def is_empty(self) -> bool:
|
def is_empty(self) -> bool:
|
||||||
return self.data is None
|
return self.__root__ is None
|
||||||
|
|
||||||
|
|
||||||
class DailyMaterial(Plugin):
|
class DailyMaterial(Plugin):
|
||||||
@ -192,8 +186,11 @@ class DailyMaterial(Plugin):
|
|||||||
# 若存在则直接使用缓存
|
# 若存在则直接使用缓存
|
||||||
if await aiofiles.os.path.exists(DATA_FILE_PATH):
|
if await aiofiles.os.path.exists(DATA_FILE_PATH):
|
||||||
async with aiofiles.open(DATA_FILE_PATH, "rb") as cache:
|
async with aiofiles.open(DATA_FILE_PATH, "rb") as cache:
|
||||||
data = jsonlib.loads(await cache.read())
|
try:
|
||||||
self.everyday_materials = MaterialsData(data=data)
|
self.everyday_materials.parse_raw(await cache.read())
|
||||||
|
except pydantic.ValidationError:
|
||||||
|
await aiofiles.os.remove(DATA_FILE_PATH)
|
||||||
|
asyncio.create_task(task_daily())
|
||||||
|
|
||||||
async def _get_skills_data(self, client: "FragileGenshinClient", character: Character) -> Optional[List[int]]:
|
async def _get_skills_data(self, client: "FragileGenshinClient", character: Character) -> Optional[List[int]]:
|
||||||
if client.damaged:
|
if client.damaged:
|
||||||
@ -513,12 +510,7 @@ class DailyMaterial(Plugin):
|
|||||||
continue
|
continue
|
||||||
self.everyday_materials = _parse_honey_impact_source(response.content)
|
self.everyday_materials = _parse_honey_impact_source(response.content)
|
||||||
# 当场缓存到文件
|
# 当场缓存到文件
|
||||||
content = jsonlib.dumps(
|
content = self.everyday_materials.json(ensure_ascii=False, separators=(",", ":"))
|
||||||
self.everyday_materials,
|
|
||||||
ensure_ascii=False,
|
|
||||||
separators=(",", ":"),
|
|
||||||
default=pydantic.json.pydantic_encoder,
|
|
||||||
)
|
|
||||||
async with aiofiles.open(DATA_FILE_PATH, "w", encoding="utf-8") as file:
|
async with aiofiles.open(DATA_FILE_PATH, "w", encoding="utf-8") as file:
|
||||||
await file.write(content)
|
await file.write(content)
|
||||||
return
|
return
|
||||||
@ -675,7 +667,7 @@ def _parse_honey_impact_source(source: bytes) -> MaterialsData:
|
|||||||
ascendable_items = everyday_materials[weekday][current_country]
|
ascendable_items = everyday_materials[weekday][current_country]
|
||||||
ascendable_items = ascendable_items.weapon if item_is_weapon else ascendable_items.avatar
|
ascendable_items = ascendable_items.weapon if item_is_weapon else ascendable_items.avatar
|
||||||
ascendable_items.append(item_id)
|
ascendable_items.append(item_id)
|
||||||
return MaterialsData(data=everyday_materials)
|
return MaterialsData(__root__=everyday_materials)
|
||||||
|
|
||||||
|
|
||||||
class FragileGenshinClient:
|
class FragileGenshinClient:
|
||||||
|
Loading…
Reference in New Issue
Block a user