From d5fec5b5a91ceea2bd5bfbc257f78b5b22e299cf Mon Sep 17 00:00:00 2001 From: KimigaiiWuyi <444835641@qq.com> Date: Sun, 3 Dec 2023 19:37:53 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E6=94=AF=E6=8C=81`=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E6=B7=B1=E6=B8=8A4.3`,=20=E5=A4=B4=E5=83=8F=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E4=B8=8D=E5=88=B0=E6=97=B6=E4=BD=BF=E7=94=A8=E9=9A=8F?= =?UTF-8?q?=E6=9C=BA=E8=A7=92=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GenshinUID/genshinuid_collection/__init__.py | 6 ++-- .../draw_collection_card.py | 29 +++++-------------- GenshinUID/genshinuid_enka/__init__.py | 9 +++--- .../genshinuid_enka/draw_artifacts_lib.py | 8 ++--- GenshinUID/genshinuid_enka/draw_char_rank.py | 14 ++++----- GenshinUID/genshinuid_enka/draw_rank_list.py | 8 ++--- GenshinUID/genshinuid_gachalog/__init__.py | 4 +-- .../genshinuid_gachalog/draw_gachalogs.py | 16 +++------- GenshinUID/genshinuid_gcg/__init__.py | 2 +- GenshinUID/genshinuid_gcg/draw_gcgdesk.py | 16 +++------- .../genshinuid_guide/get_new_abyss_data.py | 25 +++++++++++++--- 11 files changed, 60 insertions(+), 77 deletions(-) diff --git a/GenshinUID/genshinuid_collection/__init__.py b/GenshinUID/genshinuid_collection/__init__.py index ab8a3be2..f4529a6f 100644 --- a/GenshinUID/genshinuid_collection/__init__.py +++ b/GenshinUID/genshinuid_collection/__init__.py @@ -33,7 +33,6 @@ async def send_cp_info(bot: Bot, ev: Event): @sv_sj.on_command(('查询收集', 'sj'), block=True) async def send_collection_info(bot: Bot, ev: Event): await bot.logger.info('开始执行[查询收集信息]') - user_id = ev.at if ev.at else ev.user_id # 获取uid uid = await get_uid(bot, ev) @@ -41,7 +40,7 @@ async def send_collection_info(bot: Bot, ev: Event): return await bot.send(UID_HINT) await bot.logger.info('[查询角色面板]uid: {}'.format(uid)) - im = await draw_collection_img(user_id, uid) + im = await draw_collection_img(ev, uid) a = Button('🔍查询探索', '查询探索') b = Button('🔍查询收集', '查询收集') await bot.send_option(im, [a, b]) @@ -50,7 +49,6 @@ async def send_collection_info(bot: Bot, ev: Event): @sv_ts.on_command(('查询探索', 'ts'), block=True) async def send_explora_info(bot: Bot, ev: Event): await bot.logger.info('开始执行[查询探索信息]') - user_id = ev.at if ev.at else ev.user_id # 获取uid uid = await get_uid(bot, ev) @@ -58,7 +56,7 @@ async def send_explora_info(bot: Bot, ev: Event): return await bot.send(UID_HINT) await bot.logger.info('[查询角色面板]uid: {}'.format(uid)) - im = await draw_explora_img(user_id, uid) + im = await draw_explora_img(ev, uid) a = Button('🔍查询探索', '查询探索') b = Button('🔍查询收集', '查询收集') await bot.send_option(im, [a, b]) diff --git a/GenshinUID/genshinuid_collection/draw_collection_card.py b/GenshinUID/genshinuid_collection/draw_collection_card.py index 4fc99c83..3c4f0b75 100644 --- a/GenshinUID/genshinuid_collection/draw_collection_card.py +++ b/GenshinUID/genshinuid_collection/draw_collection_card.py @@ -2,6 +2,7 @@ from pathlib import Path from typing import Dict, Tuple, Union, Literal from PIL import Image, ImageDraw +from gsuid_core.models import Event from gsuid_core.utils.api.mys.models import IndexData from gsuid_core.utils.error_reply import get_error_img @@ -9,12 +10,7 @@ from ..utils.mys_api import mys_api from ..utils.image.convert import convert_img from ..utils.map.GS_MAP_PATH import avatarId2Name from ..utils.fonts.genshin_fonts import gs_font_30, gs_font_40 -from ..utils.image.image_tools import ( - draw_bar, - get_color_bg, - get_qq_avatar, - draw_pic_with_ring, -) +from ..utils.image.image_tools import draw_bar, get_avatar, get_color_bg TEXT_PATH = Path(__file__).parent / 'texture2D' @@ -55,16 +51,12 @@ expmax_data = { } -async def draw_collection_img( - qid: Union[str, int], uid: str -) -> Union[str, bytes]: - return await draw_base_img(qid, uid, '收集') +async def draw_collection_img(ev: Event, uid: str) -> Union[str, bytes]: + return await draw_base_img(ev, uid, '收集') -async def draw_explora_img( - qid: Union[str, int], uid: str -) -> Union[str, bytes]: - return await draw_base_img(qid, uid, '探索') +async def draw_explora_img(ev: Event, uid: str) -> Union[str, bytes]: + return await draw_base_img(ev, uid, '探索') async def get_base_data(uid: str) -> Union[bytes, str, IndexData]: @@ -165,7 +157,7 @@ async def get_collection_data( async def draw_base_img( - qid: Union[str, int], uid: str, mode: Literal['探索', '收集'] = '收集' + ev: Event, uid: str, mode: Literal['探索', '收集'] = '收集' ) -> Union[str, bytes]: # 获取数据 if mode == '收集': @@ -179,12 +171,7 @@ async def draw_base_img( percent_data, value_data = data[0], data[1] # 获取背景图片各项参数 - _id = str(qid) - if _id.startswith('http'): - char_pic = await get_qq_avatar(avatar_url=_id) - else: - char_pic = await get_qq_avatar(qid=qid) - char_pic = await draw_pic_with_ring(char_pic, 264) + char_pic = await get_avatar(ev, 264) if mode == '收集': title = Image.open(TEXT_PATH / 'collection_title.png') diff --git a/GenshinUID/genshinuid_enka/__init__.py b/GenshinUID/genshinuid_enka/__init__.py index e1bfc48f..d194b756 100644 --- a/GenshinUID/genshinuid_enka/__init__.py +++ b/GenshinUID/genshinuid_enka/__init__.py @@ -51,7 +51,7 @@ async def sned_rank_pic(bot: Bot, ev: Event): if uid is None: return await bot.send(UID_HINT) logger.info(f'[排名列表]uid: {uid}') - im = await draw_rank_img(ev.user_id, uid) + im = await draw_rank_img(ev, uid) await bot.send_option( im, [ @@ -127,7 +127,7 @@ async def sned_aritifacts_list(bot: Bot, ev: Event): else: num = 1 - im = await draw_lib(ev.user_id, uid, num) + im = await draw_lib(ev, uid, num) await bot.send_option( im, [ @@ -312,12 +312,11 @@ async def send_card_info(bot: Bot, ev: Event): await bot.send(im) -@sv_get_enka.on_command('毕业度统计') +@sv_get_enka.on_command(('毕业度统计', '毕业都统计')) async def send_charcard_list(bot: Bot, ev: Event): uid = await get_uid(bot, ev) - user_id = ev.at if ev.at else ev.user_id if uid is None: return await bot.send(UID_HINT) - im = await draw_cahrcard_list(str(uid), user_id) + im = await draw_cahrcard_list(str(uid), ev) await bot.logger.info(f'UID{uid}获取角色数据成功!') await bot.send(im) diff --git a/GenshinUID/genshinuid_enka/draw_artifacts_lib.py b/GenshinUID/genshinuid_enka/draw_artifacts_lib.py index 4bff7fb9..63f325cf 100644 --- a/GenshinUID/genshinuid_enka/draw_artifacts_lib.py +++ b/GenshinUID/genshinuid_enka/draw_artifacts_lib.py @@ -4,13 +4,14 @@ from typing import Dict, Union, Optional import aiofiles from PIL import Image, ImageDraw +from gsuid_core.models import Event from .etc.etc import TEXT_PATH from .start import refresh_player_list from ..utils.image.convert import convert_img +from ..utils.image.image_tools import get_avatar from .draw_normal import _get_single_artifact_img from ..utils.resource.RESOURCE_PATH import PLAYER_PATH -from ..utils.image.image_tools import get_qq_avatar, draw_pic_with_ring from ..utils.fonts.genshin_fonts import gs_font_25, gs_font_36, gs_font_38 @@ -36,7 +37,7 @@ async def get_artifacts_lib_data(uid: str) -> Optional[Dict]: return data -async def draw_lib(user_id: str, uid: str, num: int) -> Union[bytes, str]: +async def draw_lib(ev: Event, uid: str, num: int) -> Union[bytes, str]: data = await get_artifacts_lib_data(uid) if data is None: return '你还没有圣遗物数据...请尝试使用[刷新圣遗物仓库]获取数据!' @@ -80,8 +81,7 @@ async def draw_lib(user_id: str, uid: str, num: int) -> Union[bytes, str]: return f'[UID{uid}] 圣遗物仓库没有 {num} 页!\n最多为 {all_page} 页!' bg = Image.open(TEXT_PATH / 'artifacts_lib_bg.png') - avatar = await get_qq_avatar(user_id) - avatar_img = await draw_pic_with_ring(avatar, 280) + avatar_img = await get_avatar(ev, 280) bg.paste(avatar_img, (120, 88), avatar_img) diff --git a/GenshinUID/genshinuid_enka/draw_char_rank.py b/GenshinUID/genshinuid_enka/draw_char_rank.py index 04cc2e41..616b1974 100644 --- a/GenshinUID/genshinuid_enka/draw_char_rank.py +++ b/GenshinUID/genshinuid_enka/draw_char_rank.py @@ -3,6 +3,7 @@ import asyncio from typing import Tuple, Union, Literal from PIL import Image, ImageDraw +from gsuid_core.models import Event from .mono.Character import Character from ..utils.image.convert import convert_img @@ -12,8 +13,8 @@ from ..utils.map.name_covert import avatar_id_to_char_star from ..utils.fonts.genshin_fonts import genshin_font_origin from ..utils.resource.RESOURCE_PATH import CHAR_PATH, PLAYER_PATH, WEAPON_PATH from ..utils.image.image_tools import ( + get_avatar, get_color_bg, - get_qq_avatar, get_fetter_pic, get_talent_pic, draw_pic_with_ring, @@ -63,7 +64,8 @@ value_mask = Image.open(TEXT_PATH / 'value_mask.png') async def draw_cahrcard_list( - uid: str, qid: Union[str, int] + uid: str, + ev: Event, ) -> Union[str, bytes]: uid_fold = PLAYER_PATH / str(uid) char_file_list = uid_fold.glob('*') @@ -114,12 +116,8 @@ async def draw_cahrcard_list( # 排序 char_done_list.sort(key=lambda x: (-x['percent'])) - qid = str(qid) - if qid.startswith('http'): - char_pic = await get_qq_avatar(avatar_url=qid) - else: - char_pic = await get_qq_avatar(qid=qid) - char_pic = await draw_pic_with_ring(char_pic, 320) + + char_pic = await get_avatar(ev, 320) img = await get_color_bg(950, 540 + 100 * len(char_done_list)) img.paste(char_rank_title, (0, 0), char_rank_title) diff --git a/GenshinUID/genshinuid_enka/draw_rank_list.py b/GenshinUID/genshinuid_enka/draw_rank_list.py index 184cd0ba..1882c0f4 100644 --- a/GenshinUID/genshinuid_enka/draw_rank_list.py +++ b/GenshinUID/genshinuid_enka/draw_rank_list.py @@ -1,15 +1,16 @@ from typing import Dict, Union from PIL import Image, ImageDraw +from gsuid_core.models import Event from gsuid_core.utils.image.convert import convert_img from gsuid_core.utils.image.image_tools import crop_center_img from .etc.etc import TEXT_PATH from ..utils.colors import get_color from .get_akasha_data import _get_rank +from ..utils.image.image_tools import get_avatar from ..utils.map.name_covert import avatar_id_to_name from .to_card import draw_char_card, draw_weapon_card -from ..utils.image.image_tools import get_qq_avatar, draw_pic_with_ring from ..utils.fonts.genshin_fonts import ( gs_font_15, gs_font_22, @@ -25,13 +26,12 @@ TITLE_PATH = RANK_TEXT / 'title.png' grey = (191, 191, 191) -async def draw_rank_img(user_id: str, uid: str) -> Union[bytes, str]: +async def draw_rank_img(ev: Event, uid: str) -> Union[bytes, str]: rank_data = await _get_rank(uid) if isinstance(rank_data, str): return rank_data - user_avatar = await get_qq_avatar(user_id) - user_pic = await draw_pic_with_ring(user_avatar, 314) + user_pic = await get_avatar(ev, 314) title = Image.open(TITLE_PATH) title_draw = ImageDraw.Draw(title) diff --git a/GenshinUID/genshinuid_gachalog/__init__.py b/GenshinUID/genshinuid_gachalog/__init__.py index fc36733f..c72377aa 100644 --- a/GenshinUID/genshinuid_gachalog/__init__.py +++ b/GenshinUID/genshinuid_gachalog/__init__.py @@ -42,10 +42,10 @@ async def send_import_gacha_info(bot: Bot, ev: Event): @sv_gacha_log.on_fullmatch(('抽卡记录')) async def send_gacha_log_card_info(bot: Bot, ev: Event): await bot.logger.info('开始执行[抽卡记录]') - uid, user_id = await get_uid(bot, ev, True) + uid = await get_uid(bot, ev) if uid is None: return await bot.send(UID_HINT) - im = await draw_gachalogs_img(uid, user_id) + im = await draw_gachalogs_img(uid, ev) a = Button('🔁刷新抽卡记录', '刷新抽卡记录') b = Button('🔜导出抽卡记录至提瓦特小助手', '导出抽卡记录到小助手') c = Button('🔙从提瓦特小助手导入抽卡记录', '从小助手导入抽卡记录') diff --git a/GenshinUID/genshinuid_gachalog/draw_gachalogs.py b/GenshinUID/genshinuid_gachalog/draw_gachalogs.py index 64c7e7af..9e3dc221 100644 --- a/GenshinUID/genshinuid_gachalog/draw_gachalogs.py +++ b/GenshinUID/genshinuid_gachalog/draw_gachalogs.py @@ -6,16 +6,13 @@ from pathlib import Path from typing import List, Tuple, Union from PIL import Image, ImageDraw +from gsuid_core.models import Event from gsuid_core.logger import logger from ..utils.image.convert import convert_img from ..utils.map.name_covert import name_to_avatar_id +from ..utils.image.image_tools import get_avatar, get_color_bg from ..utils.resource.RESOURCE_PATH import CHAR_PATH, PLAYER_PATH, WEAPON_PATH -from ..utils.image.image_tools import ( - get_color_bg, - get_qq_avatar, - draw_pic_with_ring, -) from ..utils.fonts.genshin_fonts import ( gs_font_24, gs_font_28, @@ -132,7 +129,7 @@ def check_up(name: str, _time: str) -> bool: return False -async def draw_gachalogs_img(uid: str, user_id: str) -> Union[bytes, str]: +async def draw_gachalogs_img(uid: str, ev: Event) -> Union[bytes, str]: path = PLAYER_PATH / str(uid) / 'gacha_logs.json' if not path.exists(): return '你还没有祈愿数据噢~\n请添加Stoken后使用命令`刷新抽卡记录`更新祈愿数据~' @@ -301,12 +298,7 @@ async def draw_gachalogs_img(uid: str, user_id: str) -> Union[bytes, str]: weapon_y = (1 + ((total_data['武器祈愿']['total'] - 1) // 6)) * single_y # 获取背景图片各项参数 - _id = str(user_id) - if _id.startswith('http'): - char_pic = await get_qq_avatar(avatar_url=_id) - else: - char_pic = await get_qq_avatar(qid=user_id) - char_pic = await draw_pic_with_ring(char_pic, 320) + char_pic = await get_avatar(ev, 320) avatar_title = Image.open(TEXT_PATH / 'avatar_title.png') img = await get_color_bg(950, 530 + 900 + normal_y + char_y + weapon_y) diff --git a/GenshinUID/genshinuid_gcg/__init__.py b/GenshinUID/genshinuid_gcg/__init__.py index cb0400b8..a129caa6 100644 --- a/GenshinUID/genshinuid_gcg/__init__.py +++ b/GenshinUID/genshinuid_gcg/__init__.py @@ -34,5 +34,5 @@ async def send_deck_pic(bot: Bot, ev: Event): deck_id = int(ev.text.strip()) else: return bot.send('请输入正确的序号, 例如我的卡组1...') - im = await draw_deck_img(ev.user_id, uid, deck_id) + im = await draw_deck_img(ev, uid, deck_id) await bot.send_option(im, [Button('✅七圣数据总览', '七圣召唤')]) diff --git a/GenshinUID/genshinuid_gcg/draw_gcgdesk.py b/GenshinUID/genshinuid_gcg/draw_gcgdesk.py index b4c30e63..a56b2711 100644 --- a/GenshinUID/genshinuid_gcg/draw_gcgdesk.py +++ b/GenshinUID/genshinuid_gcg/draw_gcgdesk.py @@ -2,6 +2,7 @@ from pathlib import Path from typing import Union from PIL import Image, ImageDraw +from gsuid_core.models import Event from gsuid_core.logger import logger from gsuid_core.utils.error_reply import get_error_img @@ -11,17 +12,13 @@ from ..utils.resource.download_url import download from ..utils.resource.RESOURCE_PATH import CARD_PATH from ..utils.colors import sec_color, first_color, light_color from ..utils.fonts.genshin_fonts import gs_font_20, gs_font_36 -from ..utils.image.image_tools import ( - get_color_bg, - get_qq_avatar, - draw_pic_with_ring, -) +from ..utils.image.image_tools import get_avatar, get_color_bg TEXT_PATH = Path(__file__).parent / 'texture2d' async def draw_deck_img( - user_id: str, uid: str, deck_id: int + ev: Event, uid: str, deck_id: int ) -> Union[str, bytes]: # 获取数据 raw_data = await mys_api.get_gcg_deck(uid) @@ -32,12 +29,7 @@ async def draw_deck_img( raw_data = raw_data['deck_list'][deck_id - 1] deck_name = raw_data['name'] # 获取背景图片各项参数 - _id = str(user_id) - if _id.startswith('http'): - char_pic = await get_qq_avatar(avatar_url=_id) - else: - char_pic = await get_qq_avatar(qid=user_id) - char_pic = await draw_pic_with_ring(char_pic, 320) + char_pic = await get_avatar(ev, 320) # 初始化图片 img = await get_color_bg(950, 2300) diff --git a/GenshinUID/genshinuid_guide/get_new_abyss_data.py b/GenshinUID/genshinuid_guide/get_new_abyss_data.py index dfd90894..5b2ca6c9 100644 --- a/GenshinUID/genshinuid_guide/get_new_abyss_data.py +++ b/GenshinUID/genshinuid_guide/get_new_abyss_data.py @@ -1,6 +1,7 @@ import json +import datetime from pathlib import Path -from typing import Dict, List, Literal +from typing import Dict, List, Literal, Optional import httpx import aiofiles @@ -162,8 +163,22 @@ async def get_half_img(data: List, half: Literal['Upper', 'Lower']): return half_img -async def _get_data_from_url(url: str, path: Path) -> Dict: - if not path.exists(): +async def _get_data_from_url( + url: str, path: Path, expire_sec: Optional[float] = None +) -> Dict: + time_difference = 10 + if expire_sec is not None: + modified_time = path.stat().st_mtime + modified_datetime = datetime.datetime.fromtimestamp(modified_time) + current_datetime = datetime.datetime.now() + + time_difference = ( + current_datetime - modified_datetime + ).total_seconds() + + if ( + expire_sec is not None and time_difference >= expire_sec + ) or not path.exists(): async with httpx.AsyncClient() as client: response = await client.get(url) data = response.json() @@ -181,7 +196,9 @@ async def get_review_data( version: str = Genshin_version[:3], floor: str = '12' ): schedule_data = await _get_data_from_url( - 'http://www.yuhengcup.top/api/get_DatabaseSchedule', schedule_path + 'http://www.yuhengcup.top/api/get_DatabaseSchedule', + schedule_path, + 86400, ) schedule: List = schedule_data['SpiralAbyssSchedule']