From 61f135486f7a7deda93b0e2ce496f8677d12d4f9 Mon Sep 17 00:00:00 2001 From: KimigaiiWuyi <444835641@qq.com> Date: Wed, 22 Jan 2025 03:37:38 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20=E4=BC=98=E5=8C=96=E5=A4=B4?= =?UTF-8?q?=E5=83=8F=E8=8E=B7=E5=8F=96,=20logger=E8=B0=83=E7=94=A8,=20?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E8=B5=84=E6=BA=90=E5=88=A9=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- StarRailUID/starrailuid_abyss/__init__.py | 9 +- .../starrailuid_abyss/draw_abyss_card.py | 38 ++----- .../starrailuid_abyss_boss/__init__.py | 9 +- .../starrailuid_abyss_boss/draw_abyss_card.py | 54 ++++------ .../starrailuid_abyss_story/__init__.py | 9 +- .../draw_abyss_card.py | 54 ++++------ StarRailUID/starrailuid_charinfo/__init__.py | 9 +- StarRailUID/starrailuid_gachalog/__init__.py | 12 +-- .../starrailuid_gachalog/draw_gachalogs.py | 84 ++++++++------- StarRailUID/starrailuid_note/__init__.py | 2 +- StarRailUID/starrailuid_rogue/__init__.py | 17 +-- .../starrailuid_rogue/draw_rogue_card.py | 86 +++++++-------- StarRailUID/starrailuid_roleinfo/__init__.py | 8 +- .../draw_roleinfo_card.py | 102 +++++++++--------- StarRailUID/starrailuid_signin/__init__.py | 2 +- StarRailUID/starrailuid_stamina/__init__.py | 10 +- StarRailUID/starrailuid_user/__init__.py | 9 +- StarRailUID/starrailuid_wiki/__init__.py | 37 +++---- .../image/icon_nature/IconNatureColorFire.png | Bin 0 -> 1216 bytes .../image/icon_nature/IconNatureColorIce.png | Bin 0 -> 1197 bytes .../icon_nature/IconNatureColorImaginary.png | Bin 0 -> 1284 bytes .../icon_nature/IconNatureColorQuantum.png | Bin 0 -> 1157 bytes .../icon_nature/IconNatureColorThunder.png | Bin 0 -> 1321 bytes .../image/icon_nature/IconNatureColorWind.png | Bin 0 -> 1304 bytes .../image/icon_nature/IconNaturePhysical.png | Bin 0 -> 1378 bytes StarRailUID/utils/image/image_tools.py | 34 +++++- 26 files changed, 285 insertions(+), 300 deletions(-) create mode 100644 StarRailUID/utils/image/icon_nature/IconNatureColorFire.png create mode 100644 StarRailUID/utils/image/icon_nature/IconNatureColorIce.png create mode 100644 StarRailUID/utils/image/icon_nature/IconNatureColorImaginary.png create mode 100644 StarRailUID/utils/image/icon_nature/IconNatureColorQuantum.png create mode 100644 StarRailUID/utils/image/icon_nature/IconNatureColorThunder.png create mode 100644 StarRailUID/utils/image/icon_nature/IconNatureColorWind.png create mode 100644 StarRailUID/utils/image/icon_nature/IconNaturePhysical.png diff --git a/StarRailUID/starrailuid_abyss/__init__.py b/StarRailUID/starrailuid_abyss/__init__.py index 503742e..f5c9f5f 100644 --- a/StarRailUID/starrailuid_abyss/__init__.py +++ b/StarRailUID/starrailuid_abyss/__init__.py @@ -3,6 +3,7 @@ import re from gsuid_core.sv import SV from gsuid_core.bot import Bot from gsuid_core.models import Event +from gsuid_core.logger import logger from gsuid_core.utils.database.api import get_uid from gsuid_core.utils.database.models import GsBind @@ -26,18 +27,18 @@ async def send_srabyss_info(bot: Bot, ev: Event): if name: return None - await bot.logger.info("开始执行[sr查询深渊信息]") + logger.info("开始执行[sr查询深渊信息]") uid, user_id = await get_uid(bot, ev, GsBind, "sr", True) if uid is None: return await bot.send(UID_HINT) - await bot.logger.info(f"[sr查询深渊信息]uid: {uid}") + logger.info(f"[sr查询深渊信息]uid: {uid}") if "上期" in ev.command: schedule_type = "2" else: schedule_type = "1" - await bot.logger.info(f"[sr查询深渊信息]深渊期数: {schedule_type}") + logger.info(f"[sr查询深渊信息]深渊期数: {schedule_type}") - im = await draw_abyss_img(user_id, uid, ev.sender, schedule_type) + im = await draw_abyss_img(ev, uid, schedule_type) await bot.send(im) return None diff --git a/StarRailUID/starrailuid_abyss/draw_abyss_card.py b/StarRailUID/starrailuid_abyss/draw_abyss_card.py index 2989498..720a1b9 100644 --- a/StarRailUID/starrailuid_abyss/draw_abyss_card.py +++ b/StarRailUID/starrailuid_abyss/draw_abyss_card.py @@ -1,16 +1,17 @@ from pathlib import Path -from typing import Any, Dict, Union +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 from gsuid_core.utils.image.convert import convert_img -from gsuid_core.utils.image.image_tools import ( - draw_pic_with_ring, - get_qq_avatar, -) +from gsuid_core.utils.image.image_tools import draw_pic_with_ring +from ..utils.mys_api import mys_api from ..sruid_utils.api.mys.models import AbyssAvatar +from ..utils.resource.get_pic_from import get_roleinfo_icon +from ..utils.image.image_tools import elements, _get_event_avatar from ..utils.fonts.starrail_fonts import ( sr_font_22, sr_font_28, @@ -18,8 +19,6 @@ from ..utils.fonts.starrail_fonts import ( sr_font_34, sr_font_42, ) -from ..utils.mys_api import mys_api -from ..utils.resource.get_pic_from import get_roleinfo_icon TEXT_PATH = Path(__file__).parent / "texture2D" white_color = (255, 255, 255) @@ -32,16 +31,6 @@ rank_bg = Image.open(TEXT_PATH / "rank_bg.png").convert("RGBA") star_yes = Image.open(TEXT_PATH / "star.png").convert("RGBA") star_gray = Image.open(TEXT_PATH / "star_gray.png").convert("RGBA") -elements = { - "ice": Image.open(TEXT_PATH / "IconNatureColorIce.png").convert("RGBA"), - "fire": Image.open(TEXT_PATH / "IconNatureColorFire.png").convert("RGBA"), - "imaginary": Image.open(TEXT_PATH / "IconNatureColorImaginary.png").convert("RGBA"), - "quantum": Image.open(TEXT_PATH / "IconNatureColorQuantum.png").convert("RGBA"), - "lightning": Image.open(TEXT_PATH / "IconNatureColorThunder.png").convert("RGBA"), - "wind": Image.open(TEXT_PATH / "IconNatureColorWind.png").convert("RGBA"), - "physical": Image.open(TEXT_PATH / "IconNaturePhysical.png").convert("RGBA"), -} - async def get_abyss_star_pic(star: int) -> Image.Image: return Image.open(TEXT_PATH / f"star{star}.png") @@ -117,9 +106,8 @@ async def _draw_floor_card( async def draw_abyss_img( - qid: Union[str, int], + ev: Event, uid: str, - sender: Dict[str, Any], schedule_type: str = "1", ) -> Union[bytes, str]: raw_abyss_data = await mys_api.get_abyss_info(uid, schedule_type) @@ -132,7 +120,9 @@ async def draw_abyss_img( return "你还没有挑战本期深渊!\n可以使用[sr上期深渊]命令查询上期~" # 过滤掉 is_fast (快速通关) 为 True 的项 floor_detail = [ - detail for detail in raw_abyss_data.all_floor_detail if not detail.is_fast + detail + for detail in raw_abyss_data.all_floor_detail + if not detail.is_fast ] floor_num = len(floor_detail) @@ -145,13 +135,7 @@ async def draw_abyss_img( img.paste(abyss_title, (0, 0), abyss_title) # 获取头像 - _id = str(qid) - if _id.startswith("http"): - char_pic = await get_qq_avatar(avatar_url=_id) - elif sender.get("avatar") is not None: - char_pic = await get_qq_avatar(avatar_url=sender["avatar"]) - else: - char_pic = await get_qq_avatar(qid=qid) + char_pic = await _get_event_avatar(ev) char_pic = await draw_pic_with_ring(char_pic, 250, None, False) img.paste(char_pic, (325, 132), char_pic) diff --git a/StarRailUID/starrailuid_abyss_boss/__init__.py b/StarRailUID/starrailuid_abyss_boss/__init__.py index 7e9c663..b4b075b 100644 --- a/StarRailUID/starrailuid_abyss_boss/__init__.py +++ b/StarRailUID/starrailuid_abyss_boss/__init__.py @@ -3,6 +3,7 @@ import re from gsuid_core.sv import SV from gsuid_core.bot import Bot from gsuid_core.models import Event +from gsuid_core.logger import logger from gsuid_core.utils.database.api import get_uid from gsuid_core.utils.database.models import GsBind @@ -26,18 +27,18 @@ async def send_srabyss_info(bot: Bot, ev: Event): if name: return None - await bot.logger.info("开始执行[sr查询末日幻影信息]") + logger.info("开始执行[sr查询末日幻影信息]") uid, user_id = await get_uid(bot, ev, GsBind, "sr", True) if uid is None: return await bot.send(UID_HINT) - await bot.logger.info(f"[sr查询末日幻影信息]uid: {uid}") + logger.info(f"[sr查询末日幻影信息]uid: {uid}") if "上期" in ev.command: schedule_type = "2" else: schedule_type = "1" - await bot.logger.info(f"[sr查询末日幻影信息]末日幻影期数: {schedule_type}") + logger.info(f"[sr查询末日幻影信息]末日幻影期数: {schedule_type}") - im = await draw_abyss_img(user_id, uid, ev.sender, schedule_type) + im = await draw_abyss_img(ev, uid, schedule_type) await bot.send(im) return None diff --git a/StarRailUID/starrailuid_abyss_boss/draw_abyss_card.py b/StarRailUID/starrailuid_abyss_boss/draw_abyss_card.py index 6c6b57a..57e50a3 100644 --- a/StarRailUID/starrailuid_abyss_boss/draw_abyss_card.py +++ b/StarRailUID/starrailuid_abyss_boss/draw_abyss_card.py @@ -1,16 +1,17 @@ from pathlib import Path -from typing import Any, Dict, Union +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 from gsuid_core.utils.image.convert import convert_img -from gsuid_core.utils.image.image_tools import ( - draw_pic_with_ring, - get_qq_avatar, -) +from gsuid_core.utils.image.image_tools import draw_pic_with_ring +from ..utils.mys_api import mys_api from ..sruid_utils.api.mys.models import AbyssAvatar +from ..utils.resource.get_pic_from import get_roleinfo_icon +from ..utils.image.image_tools import elements, _get_event_avatar from ..utils.fonts.starrail_fonts import ( sr_font_22, sr_font_28, @@ -18,8 +19,6 @@ from ..utils.fonts.starrail_fonts import ( sr_font_34, sr_font_42, ) -from ..utils.mys_api import mys_api -from ..utils.resource.get_pic_from import get_roleinfo_icon TEXT_PATH = Path(__file__).parent / "texture2D" white_color = (255, 255, 255) @@ -32,16 +31,6 @@ rank_bg = Image.open(TEXT_PATH / "rank_bg.png").convert("RGBA") star_yes = Image.open(TEXT_PATH / "star.png").convert("RGBA") star_gray = Image.open(TEXT_PATH / "star_gray.png").convert("RGBA") -elements = { - "ice": Image.open(TEXT_PATH / "IconNatureColorIce.png").convert("RGBA"), - "fire": Image.open(TEXT_PATH / "IconNatureColorFire.png").convert("RGBA"), - "imaginary": Image.open(TEXT_PATH / "IconNatureColorImaginary.png").convert("RGBA"), - "quantum": Image.open(TEXT_PATH / "IconNatureColorQuantum.png").convert("RGBA"), - "lightning": Image.open(TEXT_PATH / "IconNatureColorThunder.png").convert("RGBA"), - "wind": Image.open(TEXT_PATH / "IconNatureColorWind.png").convert("RGBA"), - "physical": Image.open(TEXT_PATH / "IconNaturePhysical.png").convert("RGBA"), -} - async def get_abyss_star_pic(star: int) -> Image.Image: return Image.open(TEXT_PATH / f"star{star}.png") @@ -109,7 +98,7 @@ async def _draw_floor_card( fill=white_color, anchor="mm", ) - #总分todo + # 总分todo if sum_score: floor_pic_draw.text( (800, 60), @@ -122,9 +111,8 @@ async def _draw_floor_card( async def draw_abyss_img( - qid: Union[str, int], + ev: Event, uid: str, - sender: Dict[str, Any], schedule_type: str = "1", ) -> Union[bytes, str]: raw_abyss_data = await mys_api.get_abyss_boss_info(uid, schedule_type) @@ -136,7 +124,9 @@ async def draw_abyss_img( return "你还没有挑战本期末日幻影!\n可以使用[sr上期末日幻影]命令查询上期~" # 过滤掉 is_fast (快速通关) 为 True 的项 floor_detail = [ - detail for detail in raw_abyss_data.all_floor_detail if not detail.is_fast + detail + for detail in raw_abyss_data.all_floor_detail + if not detail.is_fast ] floor_num = len(floor_detail) @@ -149,13 +139,7 @@ async def draw_abyss_img( img.paste(abyss_title, (0, 0), abyss_title) # 获取头像 - _id = str(qid) - if _id.startswith("http"): - char_pic = await get_qq_avatar(avatar_url=_id) - elif sender.get("avatar") is not None: - char_pic = await get_qq_avatar(avatar_url=sender["avatar"]) - else: - char_pic = await get_qq_avatar(qid=qid) + char_pic = await _get_event_avatar(ev) char_pic = await draw_pic_with_ring(char_pic, 250, None, False) img.paste(char_pic, (325, 132), char_pic) @@ -234,14 +218,14 @@ async def draw_abyss_img( "lm", ) # 分数todo - if score : + if score: floor_pic_draw.text( - (800, 120 + index_part * 219), - f"{score}", - "#fec86f", - sr_font_30, - "rm", - ) + (800, 120 + index_part * 219), + f"{score}", + "#fec86f", + sr_font_30, + "rm", + ) if node_num == 1: avatars_array = node_1 else: diff --git a/StarRailUID/starrailuid_abyss_story/__init__.py b/StarRailUID/starrailuid_abyss_story/__init__.py index d79d3b7..20a0c2c 100644 --- a/StarRailUID/starrailuid_abyss_story/__init__.py +++ b/StarRailUID/starrailuid_abyss_story/__init__.py @@ -3,6 +3,7 @@ import re from gsuid_core.sv import SV from gsuid_core.bot import Bot from gsuid_core.models import Event +from gsuid_core.logger import logger from gsuid_core.utils.database.api import get_uid from gsuid_core.utils.database.models import GsBind @@ -28,18 +29,18 @@ async def send_srabyss_info(bot: Bot, ev: Event): if name: return None - await bot.logger.info("开始执行[sr查询虚构叙事信息]") + logger.info("开始执行[sr查询虚构叙事信息]") uid, user_id = await get_uid(bot, ev, GsBind, "sr", True) if uid is None: return await bot.send(UID_HINT) - await bot.logger.info(f"[sr查询虚构叙事信息]uid: {uid}") + logger.info(f"[sr查询虚构叙事信息]uid: {uid}") if "sq" in ev.command or "上期" in ev.command: schedule_type = "2" else: schedule_type = "1" - await bot.logger.info(f"[sr查询虚构叙事信息]虚构叙事期数: {schedule_type}") + logger.info(f"[sr查询虚构叙事信息]虚构叙事期数: {schedule_type}") - im = await draw_abyss_img(user_id, uid, ev.sender, schedule_type) + im = await draw_abyss_img(ev, uid, schedule_type) await bot.send(im) return None diff --git a/StarRailUID/starrailuid_abyss_story/draw_abyss_card.py b/StarRailUID/starrailuid_abyss_story/draw_abyss_card.py index 783b6e9..94e53d8 100644 --- a/StarRailUID/starrailuid_abyss_story/draw_abyss_card.py +++ b/StarRailUID/starrailuid_abyss_story/draw_abyss_card.py @@ -1,16 +1,17 @@ from pathlib import Path -from typing import Any, Dict, Union +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 from gsuid_core.utils.image.convert import convert_img -from gsuid_core.utils.image.image_tools import ( - draw_pic_with_ring, - get_qq_avatar, -) +from gsuid_core.utils.image.image_tools import draw_pic_with_ring +from ..utils.mys_api import mys_api from ..sruid_utils.api.mys.models import AbyssAvatar +from ..utils.resource.get_pic_from import get_roleinfo_icon +from ..utils.image.image_tools import elements, _get_event_avatar from ..utils.fonts.starrail_fonts import ( sr_font_22, sr_font_28, @@ -18,8 +19,6 @@ from ..utils.fonts.starrail_fonts import ( sr_font_34, sr_font_42, ) -from ..utils.mys_api import mys_api -from ..utils.resource.get_pic_from import get_roleinfo_icon TEXT_PATH = Path(__file__).parent / "texture2D" white_color = (255, 255, 255) @@ -32,16 +31,6 @@ rank_bg = Image.open(TEXT_PATH / "rank_bg.png").convert("RGBA") star_yes = Image.open(TEXT_PATH / "star.png").convert("RGBA") star_gray = Image.open(TEXT_PATH / "star_gray.png").convert("RGBA") -elements = { - "ice": Image.open(TEXT_PATH / "IconNatureColorIce.png").convert("RGBA"), - "fire": Image.open(TEXT_PATH / "IconNatureColorFire.png").convert("RGBA"), - "imaginary": Image.open(TEXT_PATH / "IconNatureColorImaginary.png").convert("RGBA"), - "quantum": Image.open(TEXT_PATH / "IconNatureColorQuantum.png").convert("RGBA"), - "lightning": Image.open(TEXT_PATH / "IconNatureColorThunder.png").convert("RGBA"), - "wind": Image.open(TEXT_PATH / "IconNatureColorWind.png").convert("RGBA"), - "physical": Image.open(TEXT_PATH / "IconNaturePhysical.png").convert("RGBA"), -} - async def get_abyss_star_pic(star: int) -> Image.Image: return Image.open(TEXT_PATH / f"star{star}.png") @@ -117,7 +106,7 @@ async def _draw_floor_card( fill=white_color, anchor="mm", ) - #总分todo + # 总分todo if sum_score: floor_pic_draw.text( (800, 40), @@ -137,9 +126,8 @@ async def _draw_floor_card( async def draw_abyss_img( - qid: Union[str, int], + ev: Event, uid: str, - sender: Dict[str, Any], schedule_type: str = "1", ) -> Union[bytes, str]: raw_abyss_data = await mys_api.get_abyss_story_info(uid, schedule_type) @@ -151,7 +139,9 @@ async def draw_abyss_img( return "你还没有挑战本期虚构叙事!\n可以使用[sr上期虚构叙事]命令查询上期~" # 过滤掉 is_fast (快速通关) 为 True 的项 floor_detail = [ - detail for detail in raw_abyss_data.all_floor_detail if not detail.is_fast + detail + for detail in raw_abyss_data.all_floor_detail + if not detail.is_fast ] floor_num = len(floor_detail) @@ -164,13 +154,7 @@ async def draw_abyss_img( img.paste(abyss_title, (0, 0), abyss_title) # 获取头像 - _id = str(qid) - if _id.startswith("http"): - char_pic = await get_qq_avatar(avatar_url=_id) - elif sender.get("avatar") is not None: - char_pic = await get_qq_avatar(avatar_url=sender["avatar"]) - else: - char_pic = await get_qq_avatar(qid=qid) + char_pic = await _get_event_avatar(ev) char_pic = await draw_pic_with_ring(char_pic, 250, None, False) img.paste(char_pic, (325, 132), char_pic) @@ -250,14 +234,14 @@ async def draw_abyss_img( "lm", ) # 分数todo - if score : + if score: floor_pic_draw.text( - (800, 120 + index_part * 219), - f"{score}", - "#fec86f", - sr_font_30, - "rm", - ) + (800, 120 + index_part * 219), + f"{score}", + "#fec86f", + sr_font_30, + "rm", + ) if node_num == 1: avatars_array = node_1 else: diff --git a/StarRailUID/starrailuid_charinfo/__init__.py b/StarRailUID/starrailuid_charinfo/__init__.py index 63345ca..e8a5e7e 100644 --- a/StarRailUID/starrailuid_charinfo/__init__.py +++ b/StarRailUID/starrailuid_charinfo/__init__.py @@ -6,6 +6,7 @@ from PIL import Image from gsuid_core.sv import SV from gsuid_core.bot import Bot from gsuid_core.models import Event +from gsuid_core.logger import logger from gsuid_core.message_models import Button from gsuid_core.utils.database.api import get_uid from gsuid_core.utils.database.models import GsBind @@ -69,7 +70,7 @@ async def _get_char_info(bot: Bot, ev: Event, text: str): if not msg: return None # 获取角色名 - await bot.logger.info("开始执行[查询角色面板]") + logger.info("开始执行[查询角色面板]") # 获取uid if "换" in msg or "拿" in msg or "带" in msg: uid = await get_uid(bot, ev, GsBind, "sr", False) @@ -78,7 +79,7 @@ async def _get_char_info(bot: Bot, ev: Event, text: str): msg = " ".join(re.findall("[\u4e00-\u9fa5]+", text)) if uid is None: return await bot.send(UID_HINT) - await bot.logger.info(f"[查询角色面板]uid: {uid}") + logger.info(f"[查询角色面板]uid: {uid}") return await draw_char_info_img(msg, uid) @@ -88,9 +89,9 @@ async def send_card_info(bot: Bot, ev: Event): uid = await get_uid(bot, ev, GsBind, "sr") if uid is None: return await bot.send(UID_HINT) - await bot.logger.info(f"[sr强制刷新]uid: {uid}") + logger.info(f"[sr强制刷新]uid: {uid}") im = await api_to_card(uid) - await bot.logger.info(f"UID{uid}获取角色数据成功!") + logger.info(f"UID{uid}获取角色数据成功!") if isinstance(im, Tuple): buttons = [ Button( diff --git a/StarRailUID/starrailuid_gachalog/__init__.py b/StarRailUID/starrailuid_gachalog/__init__.py index 0cca77a..e2cb5aa 100644 --- a/StarRailUID/starrailuid_gachalog/__init__.py +++ b/StarRailUID/starrailuid_gachalog/__init__.py @@ -1,10 +1,10 @@ from gsuid_core.sv import SV from gsuid_core.bot import Bot from gsuid_core.models import Event +from gsuid_core.logger import logger from gsuid_core.utils.database.api import get_uid from gsuid_core.utils.database.models import GsBind -from ..utils.sr_prefix import PREFIX from ..utils.error_reply import UID_HINT from .get_gachalogs import save_gachalogs from .draw_gachalogs import draw_gachalogs_img @@ -13,20 +13,20 @@ sv_gacha_log = SV("sr抽卡记录") sv_get_gachalog_by_link = SV("sr导入抽卡链接", area="DIRECT") -@sv_gacha_log.on_fullmatch(f"抽卡记录") +@sv_gacha_log.on_fullmatch(("抽卡记录", "抽卡纪录")) async def send_gacha_log_card_info(bot: Bot, ev: Event): - await bot.logger.info("开始执行[sr抽卡记录]") + logger.info("开始执行[sr抽卡记录]") uid, user_id = await get_uid(bot, ev, GsBind, "sr", True) 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) await bot.send(im) return None @sv_get_gachalog_by_link.on_command(("导入抽卡链接", "导入抽卡记录", "导入抽卡连接")) async def get_gachalog_by_link(bot: Bot, ev: Event): - await bot.logger.info("开始执行[sr导入抽卡链接]") + logger.info("开始执行[sr导入抽卡链接]") uid = await get_uid(bot, ev, GsBind, "sr", False, None) if uid is None: return await bot.send(UID_HINT) @@ -35,7 +35,7 @@ async def get_gachalog_by_link(bot: Bot, ev: Event): return await bot.send("请给出正确的抽卡记录链接") is_force = False if ev.command.startswith("强制"): - await bot.logger.info("[WARNING]本次为强制刷新") + logger.info("[WARNING] 本次为强制刷新") is_force = True await bot.send(f"UID{uid}开始执行[刷新抽卡记录],需要一定时间...请勿重复触发!") im = await save_gachalogs(uid, gacha_url, None, is_force) diff --git a/StarRailUID/starrailuid_gachalog/draw_gachalogs.py b/StarRailUID/starrailuid_gachalog/draw_gachalogs.py index 27e9436..8a15387 100644 --- a/StarRailUID/starrailuid_gachalog/draw_gachalogs.py +++ b/StarRailUID/starrailuid_gachalog/draw_gachalogs.py @@ -1,18 +1,22 @@ -import asyncio -import datetime import json +import asyncio from pathlib import Path +from datetime import datetime from typing import List, Tuple, Union from PIL import Image, ImageDraw +from gsuid_core.models import Event from gsuid_core.logger import logger from gsuid_core.utils.image.convert import convert_img -from gsuid_core.utils.image.image_tools import ( - draw_pic_with_ring, - get_color_bg, - get_qq_avatar, -) +from gsuid_core.utils.image.image_tools import get_color_bg, draw_pic_with_ring +from ..utils.image.image_tools import _get_event_avatar +from ..utils.name_covert import name_to_avatar_id, name_to_weapon_id +from ..utils.resource.RESOURCE_PATH import ( + PLAYER_PATH, + WEAPON_PATH, + CHAR_ICON_PATH, +) from ..utils.fonts.starrail_fonts import ( sr_font_20, sr_font_24, @@ -20,12 +24,6 @@ from ..utils.fonts.starrail_fonts import ( sr_font_38, sr_font_40, ) -from ..utils.name_covert import name_to_avatar_id, name_to_weapon_id -from ..utils.resource.RESOURCE_PATH import ( - CHAR_ICON_PATH, - PLAYER_PATH, - WEAPON_PATH, -) TEXT_PATH = Path(__file__).parent / "texture2d" EMO_PATH = Path(__file__).parent / "texture2d" / "emo" @@ -86,15 +84,13 @@ async def _draw_card( text_point = (100, 165) if card_type == "角色": _id = await name_to_avatar_id(name) - item_pic = ( - Image.open(CHAR_ICON_PATH / f"{_id}.png").convert("RGBA").resize((105, 105)) - ) + item_pic = Image.open(CHAR_ICON_PATH / f"{_id}.png") + item_pic = item_pic.convert("RGBA").resize((105, 105)) else: name = await name_to_weapon_id(name) # _id = await weapon_id_to_en_name(name) - item_pic = ( - Image.open(WEAPON_PATH / f"{name}.png").convert("RGBA").resize((124, 124)) - ) + item_pic = Image.open(WEAPON_PATH / f"{name}.png") + item_pic = item_pic.convert("RGBA").resize((124, 124)) point = (37, 24) card_img.paste(item_pic, point, item_pic) if gacha_num >= 81: @@ -103,7 +99,13 @@ async def _draw_card( text_color = green_color else: text_color = brown_color - card_img_draw.text(text_point, f"{gacha_num}抽", text_color, sr_font_24, "mm") + card_img_draw.text( + text_point, + f"{gacha_num}抽", + text_color, + sr_font_24, + "mm" + ) if is_up: logger.info(f"up: {name}") # card_img.paste(up_tag, (47, -2), up_tag) @@ -132,16 +134,16 @@ def check_up(name: str, _time: str) -> bool: for char in UP_LIST: if char == name: time = UP_LIST[char] - s_time = datetime.datetime(*time[0]) - e_time = datetime.datetime(*time[1]) - gacha_time = datetime.datetime.strptime(_time, "%Y-%m-%d %H:%M:%S") + s_time = datetime(*time[0]) + e_time = datetime(*time[1]) + gacha_time = datetime.strptime(_time, "%Y-%m-%d %H:%M:%S") if gacha_time < s_time or gacha_time > e_time: return False return True 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请使用命令`sr导入抽卡链接`更新跃迁数据~" @@ -174,23 +176,21 @@ async def draw_gachalogs_img(uid: str, user_id: str) -> Union[bytes, str]: # 开始初始化抽卡数 num = 1 # 从后面开始循环 - temp_time = datetime.datetime(2023, 4, 26, 8, 0, 0) + temp_time = datetime(2023, 4, 26, 8, 0, 0) for index, data in enumerate(data_list[::-1]): # 计算抽卡时间跨度 if index == 0: total_data[i]["time_range"] = data["time"] if index == len(data_list) - 1: - total_data[i]["all_time"] = ( - datetime.datetime.strptime(data["time"], "%Y-%m-%d %H:%M:%S") - - datetime.datetime.strptime( - total_data[i]["time_range"], "%Y-%m-%d %H:%M:%S" - ) - ).total_seconds() + _fm = "%Y-%m-%d %H:%M:%S" + t1 = datetime.strptime(data["time"], _fm) + t2 = datetime.strptime(total_data[i]["time_range"], _fm) + total_data[i]["all_time"] = (t1-t2).total_seconds() total_data[i]["time_range"] += "~" + data["time"] # 计算时间间隔 if index != 0: - now_time = datetime.datetime.strptime(data["time"], "%Y-%m-%d %H:%M:%S") + now_time = datetime.strptime(data["time"], "%Y-%m-%d %H:%M:%S") dis = (now_time - temp_time).total_seconds() temp_time = now_time if dis <= 5000: @@ -200,7 +200,7 @@ async def draw_gachalogs_img(uid: str, user_id: str) -> Union[bytes, str]: total_data[i]["long_gacha_data"]["num"] += 1 total_data[i]["long_gacha_data"]["time"] += dis else: - temp_time = datetime.datetime.strptime( + temp_time = datetime.strptime( data["time"], "%Y-%m-%d %H:%M:%S" ) @@ -307,16 +307,15 @@ async def draw_gachalogs_img(uid: str, user_id: str) -> Union[bytes, str]: weapon_y = (1 + ((total_data["光锥跃迁"]["total"] - 1) // 5)) * 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 _get_event_avatar(ev) char_pic = await draw_pic_with_ring(char_pic, 206, None, False) # 获取背景图片各项参数 img = Abg3_img.copy() - img = await get_color_bg(800, 1600 + 400 + normal_y + char_y + weapon_y + begin_y) + img = await get_color_bg( + 800, + 1600 + 400 + normal_y + char_y + weapon_y + begin_y, + ) gacha_title = bg1_img.copy() gacha_title.paste(char_pic, (297, 81), char_pic) img.paste(gacha_title, (0, 0), gacha_title) @@ -392,7 +391,12 @@ async def draw_gachalogs_img(uid: str, user_id: str) -> Union[bytes, str]: "mm", ) y_extend += ( - (1 + ((total_data[type_list[index - 1]]["total"] - 1) // 5)) * single_y + ( + 1 + + ( + (total_data[type_list[index - 1]]["total"] - 1) // 5 + ) + ) * single_y if index != 0 else 0 ) diff --git a/StarRailUID/starrailuid_note/__init__.py b/StarRailUID/starrailuid_note/__init__.py index c8e96fa..cc0fd08 100644 --- a/StarRailUID/starrailuid_note/__init__.py +++ b/StarRailUID/starrailuid_note/__init__.py @@ -29,7 +29,7 @@ async def send_monthly_data(bot: Bot, ev: Event): ) ) async def send_monthly_pic(bot: Bot, ev: Event): - await bot.logger.info("开始执行[sr开拓月历]") + logger.info("开始执行[sr开拓月历]") sr_uid = await get_uid(bot, ev, GsBind, "sr") if sr_uid is None: return await bot.send(UID_HINT) diff --git a/StarRailUID/starrailuid_rogue/__init__.py b/StarRailUID/starrailuid_rogue/__init__.py index 5608aab..309eb31 100644 --- a/StarRailUID/starrailuid_rogue/__init__.py +++ b/StarRailUID/starrailuid_rogue/__init__.py @@ -3,6 +3,7 @@ import re from gsuid_core.sv import SV from gsuid_core.bot import Bot from gsuid_core.models import Event +from gsuid_core.logger import logger from gsuid_core.utils.database.api import get_uid from gsuid_core.utils.database.models import GsBind @@ -32,17 +33,17 @@ async def send_srabyss_info(bot: Bot, ev: Event): if name: return None - await bot.logger.info("开始执行[sr查询模拟宇宙信息]") + logger.info("开始执行[sr查询模拟宇宙信息]") uid, user_id = await get_uid(bot, ev, GsBind, "sr", True) if uid is None: return await bot.send(UID_HINT) - await bot.logger.info(f"[sr查询模拟宇宙信息]uid: {uid}") + logger.info(f"[sr查询模拟宇宙信息]uid: {uid}") if "sq" in ev.command or "上期" in ev.command: schedule_type = "2" else: schedule_type = "3" - await bot.logger.info(f"[sr查询模拟宇宙信息]模拟宇宙期数: {schedule_type}") + logger.info(f"[sr查询模拟宇宙信息]模拟宇宙期数: {schedule_type}") if ev.text in ["一", "二", "三", "四", "五", "六"]: floor = ( @@ -59,8 +60,8 @@ async def send_srabyss_info(bot: Bot, ev: Event): floor = int(floor) else: floor = None - await bot.logger.info(f"[sr查询模拟宇宙信息]模拟宇宙世界数: {floor}") - im = await draw_rogue_img(user_id, uid, ev.sender, floor, schedule_type) + logger.info(f"[sr查询模拟宇宙信息]模拟宇宙世界数: {floor}") + im = await draw_rogue_img(ev, uid, floor, schedule_type) await bot.send(im) return None @@ -79,11 +80,11 @@ async def send_srabyss_locust_info(bot: Bot, ev: Event): if name: return None - await bot.logger.info("开始执行[sr查询寰宇蝗灾信息]") + logger.info("开始执行[sr查询寰宇蝗灾信息]") uid, user_id = await get_uid(bot, ev, GsBind, "sr", True) if uid is None: return await bot.send(UID_HINT) - await bot.logger.info(f"[sr查询寰宇蝗灾信息]uid: {uid}") - im = await draw_rogue_locust_img(user_id, uid, ev.sender) + logger.info(f"[sr查询寰宇蝗灾信息]uid: {uid}") + im = await draw_rogue_locust_img(ev, uid) await bot.send(im) return None diff --git a/StarRailUID/starrailuid_rogue/draw_rogue_card.py b/StarRailUID/starrailuid_rogue/draw_rogue_card.py index b2e00ba..8a9002b 100644 --- a/StarRailUID/starrailuid_rogue/draw_rogue_card.py +++ b/StarRailUID/starrailuid_rogue/draw_rogue_card.py @@ -1,30 +1,29 @@ import math from pathlib import Path -from typing import Any, Dict, List, Optional, Union +from typing import List, Union, Optional 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 from gsuid_core.utils.image.convert import convert_img -from gsuid_core.utils.image.image_tools import ( - draw_pic_with_ring, - get_qq_avatar, -) +from gsuid_core.utils.image.image_tools import draw_pic_with_ring -from ..sruid_utils.api.mys.models import ( - LocustBlocks, - RogueAvatar, - RogueBuffitems, - RogueMiracles, -) +from ..utils.mys_api import mys_api +from ..utils.resource.get_pic_from import get_roleinfo_icon +from ..utils.image.image_tools import elements, _get_event_avatar from ..utils.fonts.starrail_fonts import ( sr_font_22, sr_font_28, sr_font_34, sr_font_42, ) -from ..utils.mys_api import mys_api -from ..utils.resource.get_pic_from import get_roleinfo_icon +from ..sruid_utils.api.mys.models import ( + RogueAvatar, + LocustBlocks, + RogueMiracles, + RogueBuffitems, +) TEXT_PATH = Path(__file__).parent / "texture2D" white_color = (255, 255, 255) @@ -36,15 +35,6 @@ char_bg_5 = Image.open(TEXT_PATH / "char5_bg.png").convert("RGBA") rank_bg = Image.open(TEXT_PATH / "rank_bg.png").convert("RGBA") content_center = Image.open(TEXT_PATH / "center.png").convert("RGBA") -elements = { - "ice": Image.open(TEXT_PATH / "IconNatureColorIce.png").convert("RGBA"), - "fire": Image.open(TEXT_PATH / "IconNatureColorFire.png").convert("RGBA"), - "imaginary": Image.open(TEXT_PATH / "IconNatureColorImaginary.png").convert("RGBA"), - "quantum": Image.open(TEXT_PATH / "IconNatureColorQuantum.png").convert("RGBA"), - "lightning": Image.open(TEXT_PATH / "IconNatureColorThunder.png").convert("RGBA"), - "wind": Image.open(TEXT_PATH / "IconNatureColorWind.png").convert("RGBA"), - "physical": Image.open(TEXT_PATH / "IconNaturePhysical.png").convert("RGBA"), -} progresslist = { 1: "第一世界", @@ -117,7 +107,8 @@ async def _draw_rogue_buff( is_evoluted = 1 else: is_evoluted = 0 - buff_bg = Image.open(TEXT_PATH / f"zhufu_{item.rank}_{is_evoluted}.png") + buff_bg_str = TEXT_PATH / f"zhufu_{item.rank}_{is_evoluted}.png" + buff_bg = Image.open(buff_bg_str) buff_bg = buff_bg.resize((233, 35)) z_left = 90 + 240 * zb_list[jishu][1] z_top = buff_height + 450 + 55 * zb_list[jishu][0] @@ -181,7 +172,8 @@ async def _draw_rogue_miracles( zb_list.append([m, n]) jishu = 0 for miracle in miracles: - miracles_icon = (await get_roleinfo_icon(miracle.icon)).resize((80, 80)) + miracles_icon = await get_roleinfo_icon(miracle.icon) + miracles_icon = miracles_icon.resize((80, 80)) z_left = 90 + 90 * zb_list[jishu][1] z_top = buff_height + 470 + 90 * zb_list[jishu][0] jishu = jishu + 1 @@ -236,9 +228,8 @@ async def _draw_rogue_card( async def draw_rogue_img( - qid: Union[str, int], + ev: Event, uid: str, - sender: Dict[str, Any], floor: Optional[int] = None, schedule_type: str = "3", ) -> Union[bytes, str]: @@ -313,13 +304,7 @@ async def draw_rogue_img( img.paste(rogue_title, (0, 0), rogue_title) # 获取头像 - _id = str(qid) - if _id.startswith("http"): - char_pic = await get_qq_avatar(avatar_url=_id) - elif sender.get("avatar") is not None: - char_pic = await get_qq_avatar(avatar_url=sender["avatar"]) - else: - char_pic = await get_qq_avatar(qid=qid) + char_pic = await _get_event_avatar(ev) char_pic = await draw_pic_with_ring(char_pic, 250, None, False) img.paste(char_pic, (325, 132), char_pic) @@ -393,16 +378,19 @@ async def draw_rogue_img( floor_pic = Image.open(TEXT_PATH / "detail_bg.png").convert("RGBA") floor_pic = floor_pic.resize((900, detail_h_list[index_floor])) - floor_top_pic = Image.open(TEXT_PATH / "floor_bg_top.png").convert("RGBA") + floor_top_pic = Image.open(TEXT_PATH / "floor_bg_top.png") + floor_top_pic = floor_top_pic.convert("RGBA") floor_pic.paste(floor_top_pic, (0, 0), floor_top_pic) - floor_center_pic = Image.open(TEXT_PATH / "floor_bg_center.png").convert("RGBA") + floor_center_pic = Image.open(TEXT_PATH / "floor_bg_center.png") + floor_center_pic = floor_center_pic.convert("RGBA") floor_center_pic = floor_center_pic.resize( (900, detail_h_list[index_floor] - 170) ) floor_pic.paste(floor_center_pic, (0, 100), floor_center_pic) - floor_bot_pic = Image.open(TEXT_PATH / "floor_bg_bot.png").convert("RGBA") + floor_bot_pic = Image.open(TEXT_PATH / "floor_bg_bot.png") + floor_bot_pic = floor_bot_pic.convert("RGBA") floor_pic.paste( floor_bot_pic, (0, detail_h_list[index_floor] - 70), floor_bot_pic ) @@ -490,7 +478,11 @@ async def draw_rogue_img( sr_font_34, "lm", ) - floor_pic.paste(content_center, (0, 370 + buff_height + 80), content_center) + floor_pic.paste( + content_center, + (0, 370 + buff_height + 80), + content_center + ) await _draw_rogue_miracles( detail.miracles, floor_pic, @@ -516,9 +508,8 @@ async def draw_rogue_img( async def draw_rogue_locust_img( - qid: Union[str, int], + ev: Event, uid: str, - sender: Dict[str, Any], ) -> Union[bytes, str]: raw_rogue_data = await mys_api.get_rogue_locust_info(uid, "3") @@ -591,13 +582,7 @@ async def draw_rogue_locust_img( img.paste(rogue_title, (0, 0), rogue_title) # 获取头像 - _id = str(qid) - if _id.startswith("http"): - char_pic = await get_qq_avatar(avatar_url=_id) - elif sender.get("avatar") is not None: - char_pic = await get_qq_avatar(avatar_url=sender["avatar"]) - else: - char_pic = await get_qq_avatar(qid=qid) + char_pic = await _get_event_avatar(ev) char_pic = await draw_pic_with_ring(char_pic, 250, None, False) img.paste(char_pic, (325, 132), char_pic) @@ -665,16 +650,19 @@ async def draw_rogue_locust_img( floor_pic = Image.open(TEXT_PATH / "detail_bg.png").convert("RGBA") floor_pic = floor_pic.resize((900, detail_h_list[index_floor])) - floor_top_pic = Image.open(TEXT_PATH / "floor_bg_top.png").convert("RGBA") + floor_top_pic = Image.open(TEXT_PATH / "floor_bg_top.png") + floor_top_pic = floor_top_pic.convert("RGBA") floor_pic.paste(floor_top_pic, (0, 0), floor_top_pic) - floor_center_pic = Image.open(TEXT_PATH / "floor_bg_center.png").convert("RGBA") + floor_center_pic = Image.open(TEXT_PATH / "floor_bg_center.png") + floor_center_pic = floor_center_pic.convert("RGBA") floor_center_pic = floor_center_pic.resize( (900, detail_h_list[index_floor] - 170) ) floor_pic.paste(floor_center_pic, (0, 100), floor_center_pic) - floor_bot_pic = Image.open(TEXT_PATH / "floor_bg_bot.png").convert("RGBA") + floor_bot_pic = Image.open(TEXT_PATH / "floor_bg_bot.png") + floor_bot_pic = floor_bot_pic.convert("RGBA") floor_pic.paste( floor_bot_pic, (0, detail_h_list[index_floor] - 70), floor_bot_pic ) diff --git a/StarRailUID/starrailuid_roleinfo/__init__.py b/StarRailUID/starrailuid_roleinfo/__init__.py index d90e246..c42cdca 100644 --- a/StarRailUID/starrailuid_roleinfo/__init__.py +++ b/StarRailUID/starrailuid_roleinfo/__init__.py @@ -24,8 +24,8 @@ async def send_role_info(bot: Bot, ev: Event): return "你还没有绑定UID噢,请使用[sr绑定uid123]完成绑定!" logger.info(f"[sr查询信息]UID: {uid}") - await bot.logger.info("开始执行[sr查询信息]") - await bot.send(await get_role_img(uid)) + logger.info("开始执行[sr查询信息]") + await bot.send(await get_role_img(ev, uid)) return None @@ -39,6 +39,6 @@ async def send_detail_info(bot: Bot, ev: Event): return await bot.send(UID_HINT) logger.info(f"[sr查询信息]UID: {uid}") - await bot.logger.info("开始执行[sr查询信息]") - await bot.send(await get_detail_img(user_id, uid, ev.sender)) + logger.info("开始执行[sr查询信息]") + await bot.send(await get_detail_img(ev, uid)) return None diff --git a/StarRailUID/starrailuid_roleinfo/draw_roleinfo_card.py b/StarRailUID/starrailuid_roleinfo/draw_roleinfo_card.py index 9bb0a7a..17ce455 100644 --- a/StarRailUID/starrailuid_roleinfo/draw_roleinfo_card.py +++ b/StarRailUID/starrailuid_roleinfo/draw_roleinfo_card.py @@ -1,24 +1,18 @@ import asyncio from pathlib import Path -from typing import Any, Dict, Generator, List, Optional, TypeVar, Union +from typing import Dict, List, Union, TypeVar, Optional, Generator 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 from gsuid_core.utils.image.convert import convert_img -from gsuid_core.utils.image.image_tools import ( - draw_pic_with_ring, - get_qq_avatar, -) +from gsuid_core.utils.image.image_tools import draw_pic_with_ring -from ..sruid_utils.api.mys.models import ( - AvatarDetail, - AvatarListItem, - AvatarListItemDetail, - RoleBasicInfo, - Stats, -) +from ..utils.mys_api import mys_api from ..utils.fonts.first_world import fw_font_24 +from ..utils.resource.get_pic_from import get_roleinfo_icon +from ..utils.image.image_tools import elements, _get_event_avatar from ..utils.fonts.starrail_fonts import ( sr_font_22, sr_font_24, @@ -26,15 +20,20 @@ from ..utils.fonts.starrail_fonts import ( sr_font_30, sr_font_36, ) -from ..utils.mys_api import mys_api -from ..utils.resource.get_pic_from import get_roleinfo_icon +from ..sruid_utils.api.mys.models import ( + Stats, + AvatarDetail, + RoleBasicInfo, + AvatarListItem, + AvatarListItemDetail, +) TEXT_PATH = Path(__file__).parent / "texture2D" bg1 = Image.open(TEXT_PATH / "bg1.png") bg2 = Image.open(TEXT_PATH / "bg2.png") bg3 = Image.open(TEXT_PATH / "bg3.png") -user_avatar = Image.open(TEXT_PATH / "200101.png").resize((220, 220)).convert("RGBA") + char_bg_4 = Image.open(TEXT_PATH / "rarity4_bg.png").convert("RGBA") char_bg_5 = Image.open(TEXT_PATH / "rarity5_bg.png").convert("RGBA") circle = Image.open(TEXT_PATH / "char_weapon_bg.png").convert("RGBA") @@ -45,23 +44,16 @@ white_color = (255, 255, 255) color_color = (40, 18, 7) first_color = (22, 8, 31) -elements = { - "ice": Image.open(TEXT_PATH / "IconNatureColorIce.png").convert("RGBA"), - "fire": Image.open(TEXT_PATH / "IconNatureColorFire.png").convert("RGBA"), - "imaginary": Image.open(TEXT_PATH / "IconNatureColorImaginary.png").convert("RGBA"), - "quantum": Image.open(TEXT_PATH / "IconNatureColorQuantum.png").convert("RGBA"), - "lightning": Image.open(TEXT_PATH / "IconNatureColorThunder.png").convert("RGBA"), - "wind": Image.open(TEXT_PATH / "IconNatureColorWind.png").convert("RGBA"), - "physical": Image.open(TEXT_PATH / "IconNaturePhysical.png").convert("RGBA"), -} + +async def get_role_img(ev: Event, uid: str) -> Union[bytes, str]: + return await draw_role_card(ev, uid) -async def get_role_img(uid: str) -> Union[bytes, str]: - return await draw_role_card(uid) - - -async def get_detail_img(qid: Union[str, int], uid: str, sender) -> Union[bytes, str]: - return await get_detail_card(qid, uid, sender) +async def get_detail_img( + ev: Event, + uid: str, +) -> Union[bytes, str]: + return await get_detail_card(ev, uid) def _lv(level: int) -> str: @@ -73,11 +65,11 @@ T = TypeVar("T") def wrap_list(lst: List[T], n: int) -> Generator[List[T], None, None]: for i in range(0, len(lst), n): - yield lst[i : i + n] + yield lst[i : i + n] # noqa: E203 async def _draw_card_1( - sr_uid: str, role_basic_info: RoleBasicInfo, stats: Stats + ev: Event, sr_uid: str, role_basic_info: RoleBasicInfo, stats: Stats ) -> Image.Image: # 名称 nickname = role_basic_info.nickname @@ -96,7 +88,13 @@ async def _draw_card_1( bg1_draw = ImageDraw.Draw(img_bg1) # 写Nickname - bg1_draw.text((400, 85), nickname, font=sr_font_36, fill=white_color, anchor="mm") + bg1_draw.text( + (400, 85), + nickname, + font=sr_font_36, + fill=white_color, + anchor="mm" + ) # 写UID bg1_draw.text( (400, 165), @@ -106,6 +104,8 @@ async def _draw_card_1( anchor="mm", ) # 贴头像 + user_avatar = await _get_event_avatar(ev) + user_avatar = await draw_pic_with_ring(user_avatar, 128, None, False) img_bg1.paste(user_avatar, (286, 213), mask=user_avatar) # 写基本信息 @@ -208,7 +208,10 @@ async def _draw_card_2( ) -> Image.Image: # 角色部分 每五个一组 lines = await asyncio.gather( - *[_draw_line(five_avatars, equips) for five_avatars in wrap_list(avatars, 5)] + *[ + _draw_line(five_avatars, equips) + for five_avatars in wrap_list(avatars, 5) + ] ) img_card_2 = Image.new("RGBA", (800, len(lines) * 200)) @@ -219,7 +222,7 @@ async def _draw_card_2( return img_card_2 -async def draw_role_card(sr_uid: str) -> Union[bytes, str]: +async def draw_role_card(ev: Event, sr_uid: str) -> Union[bytes, str]: role_index = await mys_api.get_role_index(sr_uid) # deal with hoyolab with no nickname and level api if int(str(sr_uid)[0]) < 6: @@ -251,7 +254,7 @@ async def draw_role_card(sr_uid: str) -> Union[bytes, str]: # 绘制总图 img1, img2 = await asyncio.gather( *[ - _draw_card_1(sr_uid, role_basic_info, stats), # type: ignore + _draw_card_1(ev, sr_uid, role_basic_info, stats), # type: ignore _draw_card_2(avatars, equips), ] ) @@ -336,7 +339,8 @@ async def _draw_detail_card( ) if avatar.equip: - equip_icon = (await get_roleinfo_icon(avatar.equip.icon)).resize((50, 50)) + equip_icon = await get_roleinfo_icon(avatar.equip.icon) + equip_icon = equip_icon.resize((50, 50)) avatar_img.paste(equip_icon, (595, 5), mask=equip_icon) avatar_draw.text( @@ -368,9 +372,7 @@ async def _draw_detail_card( return char_info -async def get_detail_card( - qid: Union[str, int], sr_uid: str, sender: Dict[str, Any] -) -> Union[bytes, str]: +async def get_detail_card(ev: Event, sr_uid: str) -> Union[bytes, str]: # 获取角色列表 avatar_list = await mys_api.get_avatar_info(sr_uid, 1001) if isinstance(avatar_list, int): @@ -388,19 +390,19 @@ async def get_detail_card( char_info.paste(char_title, (0, 0), char_title) # 获取头像 - _id = str(qid) - if _id.startswith("http"): - char_pic = await get_qq_avatar(avatar_url=_id) - elif sender.get("avatar") is not None: - char_pic = await get_qq_avatar(avatar_url=sender["avatar"]) - else: - char_pic = await get_qq_avatar(qid=qid) + char_pic = await _get_event_avatar(ev) char_pic = await draw_pic_with_ring(char_pic, 250, None, False) char_info.paste(char_pic, (400, 88), char_pic) # 绘制抬头 - char_img_draw.text((525, 420), f"UID {sr_uid}", white_color, sr_font_28, "mm") + char_img_draw.text( + (525, 420), + f"UID {sr_uid}", + white_color, + sr_font_28, + "mm", + ) title_img = Image.open(TEXT_PATH / "bar_title.png") char_info.paste(title_img, (0, 515), mask=title_img) @@ -418,9 +420,11 @@ async def get_detail_card( ) # 写底层文字 + text1 = 'SR skill statistics by StarrailUID' + text2 = 'Code by jiluoQAQ & Power by GsCore' char_img_draw.text( (525, img_height - 45), - "--SR skill statistics by StarrailUID & Code by jiluoQAQ & Power by GsCore--", + f"--{text1} & {text2}--", (255, 255, 255), fw_font_24, "mm", diff --git a/StarRailUID/starrailuid_signin/__init__.py b/StarRailUID/starrailuid_signin/__init__.py index 03965b5..223f5c6 100644 --- a/StarRailUID/starrailuid_signin/__init__.py +++ b/StarRailUID/starrailuid_signin/__init__.py @@ -30,7 +30,7 @@ async def get_sign_func(bot: Bot, ev: Event): @sv_sign_config.on_fullmatch("全部重签") async def recheck(bot: Bot, ev: Event): - await bot.logger.info("开始执行[全部重签]") + logger.info("开始执行[全部重签]") await bot.send("[星穹铁道] [全部重签] 已开始执行!") result = await daily_sign("sr") if not IS_REPORT: diff --git a/StarRailUID/starrailuid_stamina/__init__.py b/StarRailUID/starrailuid_stamina/__init__.py index 24689f4..85307db 100644 --- a/StarRailUID/starrailuid_stamina/__init__.py +++ b/StarRailUID/starrailuid_stamina/__init__.py @@ -22,11 +22,11 @@ sv_get_stamina_admin = SV("sr强制推送", pm=1) @sv_get_stamina.on_fullmatch("当前状态") async def send_daily_info(bot: Bot, ev: Event): - await bot.logger.info("开始执行[sr每日信息文字版]") + logger.info("开始执行[sr每日信息文字版]") uid = await get_uid(bot, ev, GsBind, "sr") if uid is None: return await bot.send(UID_HINT) - await bot.logger.info(f"[sr每日信息文字版]UID: {uid}") + logger.info(f"[sr每日信息文字版]UID: {uid}") im = await get_stamina_text(uid) await bot.send(im) @@ -35,7 +35,7 @@ async def send_daily_info(bot: Bot, ev: Event): @sv_get_stamina_admin.on_fullmatch("强制推送体力提醒") async def force_notice_job(bot: Bot, ev: Event): - await bot.logger.info("开始执行[sr强制推送体力信息]") + logger.info("开始执行[sr强制推送体力信息]") await sr_notice_job() @@ -80,9 +80,9 @@ async def sr_notice_job(): ) ) async def send_daily_info_pic(bot: Bot, ev: Event): - await bot.logger.info("开始执行[sr每日信息]") + logger.info("开始执行[sr每日信息]") user_id = ev.at if ev.at else ev.user_id - await bot.logger.info(f"[sr每日信息]QQ号: {user_id}") + logger.info(f"[sr每日信息]QQ号: {user_id}") im = await get_stamina_img(bot.bot_id, user_id) await bot.send(im) diff --git a/StarRailUID/starrailuid_user/__init__.py b/StarRailUID/starrailuid_user/__init__.py index 8d059a7..cdfc7ea 100644 --- a/StarRailUID/starrailuid_user/__init__.py +++ b/StarRailUID/starrailuid_user/__init__.py @@ -1,6 +1,7 @@ from gsuid_core.sv import SV from gsuid_core.bot import Bot from gsuid_core.models import Event +from gsuid_core.logger import logger from gsuid_core.utils.database.models import GsBind from ..utils.message import send_diff_msg @@ -12,11 +13,11 @@ sv_user_info = SV("sr用户信息") @sv_user_info.on_fullmatch("绑定信息") async def send_bind_card(bot: Bot, ev: Event): - await bot.logger.info("sr开始执行[查询用户绑定状态]") + logger.info("sr开始执行[查询用户绑定状态]") uid_list = await get_user_card(ev.bot_id, ev.user_id) if not uid_list: return await bot.send("你还没有绑定SR_UID哦!") - await bot.logger.info("sr[查询用户绑定状态]完成!等待图片发送中...") + logger.info("sr[查询用户绑定状态]完成!等待图片发送中...") await bot.send(uid_list) return None @@ -34,9 +35,9 @@ async def send_bind_card(bot: Bot, ev: Event): ) ) async def send_link_uid_msg(bot: Bot, ev: Event): - await bot.logger.info("sr开始执行[绑定/解绑用户信息]") + logger.info("sr开始执行[绑定/解绑用户信息]") qid = ev.user_id - await bot.logger.info(f"sr[绑定/解绑]UserID: {qid}") + logger.info(f"sr[绑定/解绑]UserID: {qid}") sr_uid = ev.text.strip() if sr_uid and not sr_uid.isdigit(): diff --git a/StarRailUID/starrailuid_wiki/__init__.py b/StarRailUID/starrailuid_wiki/__init__.py index 6630b74..145030c 100644 --- a/StarRailUID/starrailuid_wiki/__init__.py +++ b/StarRailUID/starrailuid_wiki/__init__.py @@ -3,6 +3,7 @@ import re from gsuid_core.sv import SV from gsuid_core.bot import Bot from gsuid_core.models import Event +from gsuid_core.logger import logger from gsuid_core.utils.image.convert import convert_img from ..utils.name_covert import ( @@ -28,7 +29,7 @@ sv_sr_guide = SV("星铁攻略") @sv_sr_wiki.on_prefix("角色图鉴") async def send_role_wiki_pic(bot: Bot, ev: Event): char_name = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text)) - await bot.logger.info(f"开始获取{char_name}图鉴") + logger.info(f"开始获取{char_name}图鉴") if "开拓者" in str(char_name): char_name = "开拓者" char_id = await name_to_avatar_id(char_name) @@ -38,16 +39,16 @@ async def send_role_wiki_pic(bot: Bot, ev: Event): img = WIKI_ROLE_PATH / f"{char_id}.png" if img.exists(): img = await convert_img(img) - await bot.logger.info(f"获得{char_name}图鉴图片成功!") + logger.info(f"获得{char_name}图鉴图片成功!") await bot.send(img) else: - await bot.logger.warning(f"未找到{char_name}图鉴图片") + logger.warning(f"未找到{char_name}图鉴图片") @sv_sr_guide.on_prefix("角色攻略") async def send_role_guide_pic(bot: Bot, ev: Event): char_name = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text)) - await bot.logger.info(f"开始获取{char_name}图鉴") + logger.info(f"开始获取{char_name}图鉴") char_id = await alias_to_char_id(char_name) if char_id is None: if "开拓者" in str(char_name): @@ -59,44 +60,44 @@ async def send_role_guide_pic(bot: Bot, ev: Event): img = GUIDE_CHARACTER_PATH / f"{char_id}.png" if img.exists(): img = await convert_img(img) - await bot.logger.info(f"获得{char_id}图鉴图片成功!") + logger.info(f"获得{char_id}图鉴图片成功!") await bot.send(img) else: - await bot.logger.warning(f"未找到{char_id}图鉴图片") + logger.warning(f"未找到{char_id}图鉴图片") @sv_sr_guide.on_prefix("光锥攻略") async def send_weapon_guide_pic(bot: Bot, ev: Event): msg = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text)) - await bot.logger.info(f"开始获取{msg}图鉴") + logger.info(f"开始获取{msg}图鉴") light_cone_id = await name_to_weapon_id(msg) img = GUIDE_LIGHT_CONE_PATH / f"{light_cone_id}.png" if img.exists(): img = await convert_img(img) - await bot.logger.info(f"获得{light_cone_id}光锥图片成功!") + logger.info(f"获得{light_cone_id}光锥图片成功!") await bot.send(img) else: - await bot.logger.warning(f"未找到{light_cone_id}光锥图片") + logger.warning(f"未找到{light_cone_id}光锥图片") @sv_sr_wiki.on_prefix("遗器") async def send_relic_wiki_pic(bot: Bot, ev: Event): msg = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text)) - await bot.logger.info(f"开始获取{msg}遗器") + logger.info(f"开始获取{msg}遗器") set_id = await name_to_relic_set_id(msg) img = WIKI_RELIC_PATH / f"{set_id}.png" if img.exists(): img = await convert_img(img) - await bot.logger.info(f"获得{msg}遗器图片成功!") + logger.info(f"获得{msg}遗器图片成功!") await bot.send(img) else: - await bot.logger.warning(f"未找到{msg}遗器图片") + logger.warning(f"未找到{msg}遗器图片") @sv_sr_wiki.on_prefix("突破材料") async def send_material_for_role_wiki_pic(bot: Bot, ev: Event): char_name = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text)) - await bot.logger.info(f"开始获取{char_name}突破材料") + logger.info(f"开始获取{char_name}突破材料") if "开拓者" in str(char_name): char_name = "开拓者" char_id = await name_to_avatar_id(char_name) @@ -106,21 +107,21 @@ async def send_material_for_role_wiki_pic(bot: Bot, ev: Event): img = WIKI_MATERIAL_FOR_ROLE / f"{char_id}.png" if img.exists(): img = await convert_img(img) - await bot.logger.info(f"获得{char_name}突破材料图片成功!") + logger.info(f"获得{char_name}突破材料图片成功!") await bot.send(img) else: - await bot.logger.warning(f"未找到{char_name}突破材料图片") + logger.warning(f"未找到{char_name}突破材料图片") @sv_sr_wiki.on_prefix("武器") async def send_light_cone_wiki_pic(bot: Bot, ev: Event): msg = " ".join(re.findall("[\u4e00-\u9fa5]+", ev.text)) - await bot.logger.info(f"开始获取{msg}武器") + logger.info(f"开始获取{msg}武器") light_cone_id = await name_to_weapon_id(msg) img = WIKI_LIGHT_CONE_PATH / f"{light_cone_id}.png" if img.exists(): img = await convert_img(img) - await bot.logger.info(f"获得{msg}武器图片成功!") + logger.info(f"获得{msg}武器图片成功!") await bot.send(img) else: - await bot.logger.warning(f"未找到{msg}武器图片") + logger.warning(f"未找到{msg}武器图片") diff --git a/StarRailUID/utils/image/icon_nature/IconNatureColorFire.png b/StarRailUID/utils/image/icon_nature/IconNatureColorFire.png new file mode 100644 index 0000000000000000000000000000000000000000..c0e5c09374c390a53a689b15bf695dbff9307e20 GIT binary patch literal 1216 zcmV;x1V8(UP)DS{FFogc-#NdY=RD^8qUt_1bEtSsFRAJw{ z#w_(6J)%;pR#{ETObHdO{|C_i_2p5^uHXK|#@rQXEYHWoojrK8P;1#;n1^Jc$pY

}3jqa;2jEykvnyY&i0vqmU^5NOPs_k?MB=5OiGVRM4om3`k#f_y z0m#zQ@KV`a+pc^K%**B2)Yc8(?Che@`M@|>wOWPy3^}6wY5x$K9fP9mB$w{1G!a}P z>Xlha9A00J4Q*%U&oqdrANIMTq1Mn$ZPCEEnN0;|;l4hD_4JQN=$At!O~(^OTCAYoSGxz$ zx30_;q+f)Xge6w(8Y* zfi^wEIP`KE`ltM&EQykdk^s`kP=R1D(#Fu1no{dsE7gAKOfc9G4dd8j(&Is6F1&#N zbeS^b(Gwjk?TL{|Q9iO^6>>7>R)#ZBG%OsP5+}D;H%Q6eO+_-gVN=^LN_R>`4-;mDRLTmWT@OaF}m#$qW}P<9kAGTZ)-JJyI7I}I8Eym48q z%slYhBr$If4tD5^r7O`$$srMJK2Si}zF*arS?@XF1Sjp!N&97<7ArmD~hm1m!0tXu~721Q3o7aXSVWb@!0RZVtd?1nS@V= z3>w_A`BoH0N!;u8W8<+ic=whb-&!RGJ+Q!ox#FDwa#-z}h0+B13@R`v+=aRel)T_XiNnu5s2J)FPzLkx z^h8wt%j~X#-=t~y=j;hZ(AxoB(imT8;xMxNiYsuaAdUO(LT?2$cOU#tI4&-cCNyEu zhh^_3JWpeE%^5QnF>iG*7U|M^{1{ zF$vxwkW80#dV)pnpfU(UFz25H>GgKXF;%FdW3e5y%VVM9GtUaOQ0RQ&(@17Fmio@bp_n z@K2cu->9j4Q!?Gc0vW9D$UgMf9pslr7bA`qlED$^QjIM;wm-;qyP6B-k;%%pOIqk72m_r zqIu3RS(QrAX~xe)YKbW?mCD|>d;e}}GvC-m?x&aUM@@br&R6Y_0Rz+Ku+t=q_2J_( zm@|+=S+gQIW082dr2&^)8*#O}9fPdu+V*_NH=Ve2g%s?=dNI*Zjz8Wk~Pe>z}i-3q8-bj*-S*cFJ{!}`f)-hX75 z8fw8rLwdluK$HSGlqAU!+W3AkKNIN?KDlwZBA7csS14=p=FhjV{>#9C^^_u*yFeG{ zpYOgZEhvF00lGjrY-^Pwm{OnwCFQ39^Y8eVH-|Fqy)^2Zls^0)rvA$b)kgQ|00000 LNkvXXu0mjfZLvF) literal 0 HcmV?d00001 diff --git a/StarRailUID/utils/image/icon_nature/IconNatureColorImaginary.png b/StarRailUID/utils/image/icon_nature/IconNatureColorImaginary.png new file mode 100644 index 0000000000000000000000000000000000000000..da9f2924e368c7685bb5fb9e860a2cf08501994c GIT binary patch literal 1284 zcmV+f1^fDmP)X3}$O1!P`3@ zXPqB@dKF=Dl~5D}aZ-OLqoBqBSs1A|QDN?g40TrzWb9jof-@~xANef}FGs>VD|9v> zf1;>`i+=e#SXh`L|HvBFsZs${G&Gd-cc!e3h4;kKHQdyJ3_@oD@<0C6&As_v4SN_F znLt~|09>4H8BDOQ?jZ~gjj?t@Vl~`d=5S9xIo}}E5Rfmc?BF&=E0Mm(2ai2shk$Se z-rsWtIbZl`O-%XhD)ac8>;UxjkH9;q1n2VCaT@}h^+NRldByoo2BWrXcQuAP<8b{_ zIF|Yq;UNDE?z1&ldwn>&0hh}{;IrHwBKu6%PuCg}(%nG5q`aNm{CowRAGXErH=e*p zd#}ODDF@0^QpjRFapdbpy!Gm&N{{9?5)rv!Y78Xr-CxIqRGb^gZIUh| z{!bSNO(370{|C2y*AGmI3mmNRTD%wg?LG86f@77;BkG9&JbwBHF4o*cv7#M(@^Wwq zOId$ob051~dho1tU-^sCo)Dk{kSB{7>|};NEm>M_)4ZdQgBjP6@NP8&Q`J(~fm9#t zlzG9-Y+6bCK3T#3w-WES##hm~@|bWB2BpB1!n3Vh>?;>gQMeufevZ&*RGF(+E+7@g z3@fB1WD_yOViEjEpC(Mx=)vipfe{K=T8QQ0A+E!c@p07$TV#{9@yo1wC@*wk$F?O{ z>~X)&2J}#_BrRyTsWM3lU>oWC?fWpDxlK3v@YS(KG`IA#=Lp$(jCE~Kl8{rTkb0Oz zOVp{7RyIg0%D~_ldjGzIKf4A|Ti45yyZ4_v%*(vPtJyqS5NfXUfR?c52}bX!r#=?*>@4u?#!{_~%+1YE zs_a1hBUe3yRi#*#(Tce}`K4(gk3v794` zj`nL&u=mPiD%Jj=NVa+RS#-Ypx{B?7XO%Q3gI5DA`+_+;w(MGFHOPH~+*??*& z5rmuyLl(0b8T(hM2Y;#9jQH0tBJ+3?6U}TeV}J}wUo+VUeC28Bbu5{Oh9_ljZ6!g? zuRU}OQX^o-0vR+e$`h8BVmVC@O{1S3q%s-(eQL^QVj?Yhc5^LQc&U{e8OD1BGAIr2 u>8!QvEp968UVsexT(E23RQqF77yk#XHU8})+{}ys0000Bsxs|(GDYXaq1r|(L}Ja9}#EC9|8g)*QAHoW2 z*B`I-p3~R2_qw{hChAFUde6Q0^z+WI`=0sf&1aCNv<{p<$(fCC#P2C9t(U~Q=f429{xaC*KKA)5sH$v+)sl_Qqt7EJ`*wG}qZ~$| zMu7r$!rjr?z)Er9eYkk(Tb|QeZB3hix(q>$02SC%tXM2|n9Vl${a4ikv}Y7L8Bhl! zSyQ#0e}kbLFqtxV9*xR|p%Vc)XNfS1Twz7|3z$2nTsl`ap;N*@H-#i2V>R&O$p!$?NCGZ*5a+C93>5&so< zkG&|u*u)SL-_1W@x6k1D^jqiQ(G7?2&faQm^~RvN9JD~S^d-rJ`t|KP7=?@)J{$=k zJ1b9kIl}7)g*O$#yE}{4u}-!R*S#yCs}te%DB*3?0(I56WYH!zOh`}PZk+7dsp^s> zac)VdTB&Fh36pa$nIbdH0PRm%@Qed4BDBO#7EmZ@_pj8nb4G_d%C zWMo)L6C=ht-9YmTR*7{B>xBhX3?w1w+UnOm^9!niX3;}US{S>{e-@WeXauoX6v;vr zOCuVM#LtNkhe9`znK_+x`;-~F^M}39q2YY_@606eBQt zopplCa#*y5MfV_7$#ga$qrqVvP%!8LTPUQ>!c|*s%`Q(z=aalSaIQmF1eLC>IP&S% zu`owNBKcMwuzcAwy1ZZb(W}nIe z-TM}Xh4-=?LL?I8J!+4|iylL1$$AywyDa)_=ggMN+b0 zEoRLuL;L#=h-UwbflC)Zj(e6i=t4(%+;?Du0&CO3l7R};r9$`auS509SLw~pn^sE} z{|@_xP>^3S4n~nV?0pu&pihCh#(fc_y4nx9{j5BZJg>E>(hx~69F}z#-Svq z&+K6j6W;apx2FZ0444v1H;c_0e|vPDd?PKG5nxIv-6nz2YiYxb0>?r9{>!*@`8x&H zW*C+ZP=(&R;$_cgC${rdM=g`8^#3g&LraTm#g!&|OyYay|M>D|=v^gsK4tz|y2gJ4 XPQv3hMsdFW00000NkvXXu0mjfJFzS4 literal 0 HcmV?d00001 diff --git a/StarRailUID/utils/image/icon_nature/IconNatureColorThunder.png b/StarRailUID/utils/image/icon_nature/IconNatureColorThunder.png new file mode 100644 index 0000000000000000000000000000000000000000..9982c610b37081207dc39fe2087488af4f9c6dae GIT binary patch literal 1321 zcmV+^1=jkBP)7FCIiY&0( zO#hkPx!=8azu(?-{`cG~D_h(R9i>S5>xiVUX8`|kixlEHQkNggbcJ1ba7v2E3+9Id z?kRFF%QC!n`EVNP zjFonuGLRIa^hcum8EJ;4zgAFffDEG-lfHF5g!@f*drerLGl#+}(aHyd4hB?+l}Hpi zl9}NsOf<2>p|aiT2|+K1;A%~-*5MrpC~}r8!WaPap%!@5Qi*W;C>~H&rl}_x2)BOm z`uF%y>C53A4B8*CCuae$Gj)X97;hw&#$$!;$2@3bVvpkbo7_&TIDt5q1UQ(zhN8L~ z4Ba>Vq%>>ne2q{|z+O31h?i}<6%Bg95Pd`L+d1_xeCi!g*6=$Xx7DD&?J*8|q#^Fs z=Qv++66EBq&U>VHC$8!Pl??>5Gkpb9M!Dk8rZUX73Pfz-T0}c-gG_%2l4j;1@PZ2) z=#Rz{p7)jWUO;^EA1QII<`OPfXGv2>&!EZ@sR`H%=3?%SBVI~w*S0;v{*oQszEYiy zUqt^1!;uKJU5iaO)*$}QW-J!wu`+r|Y#SH6Y3{*ugEKv8%gB4SOysjbMaIJvDKuvu z-mzYRVCzr@<_L4h3&POY{be@9#0z8hxE+uA=;8wP z;F`-zk?vQ_R#$2Ll_(DOW&h#cK~TmYNl_B@ARB#|CGFTtQcA4?(K=wtQv zP>M4xokVu0eMT!IhmIXK9>y{gL`;rm%a<%_!!QFQoS2o5okg3uFcj8a!FXe9y!gVH zo;*Jl$$(9s~xRfExdYy zw{-pkRo&GDdmgB9rA9Ji;m#%;y_X2N<5q;(eu57sg)`u)h(JQgH@vES(@&wcwOYMW zO)yQsKF|rqHdr<(g0})mUr(R&M@lI_inHa%xNU3dfT)613=^AOBdkB58oJ*-Sx&`( z_9W%+S<$NR)Dd*YVG;1dEsxuiTDoek2oq>+0$eEUNkud$VoKB6>hC6H=mD;=7 zIFxiozL(|AFmVVE2pbH@Q17wx)X?xtK@1^LEhW95JqwqrGZ-c+&Y-tAZLS#oLJ4-U zDqU-sw!l8nb@|KD+}WfvOc$UUDy|T6)e$Dz5Z4KvF2lNBgd^#`BFw`TTvynC0WwsS fI@JNW1v=_qF6%dbj7N@B00000NkvXXu0mjfl+Sb} literal 0 HcmV?d00001 diff --git a/StarRailUID/utils/image/icon_nature/IconNatureColorWind.png b/StarRailUID/utils/image/icon_nature/IconNatureColorWind.png new file mode 100644 index 0000000000000000000000000000000000000000..f92982ade871b9134c399dce5ac440c8d3937c68 GIT binary patch literal 1304 zcmV+z1?T#SP)nXq3nD1on4;0 z&h*XPx#ym9&-vZ+J^uHI8!+x7Ev(?4~efve;BuPic)%{q}zT5PBq8 zE`2z_j5X!|2av<6Ud_~XP@6#o28FRuV}X-k_X{-!I4w*cx-2JIa9%MxbT*)}v$#sA ze(S4Qzp64Z6Azu+E!cXw&Ip|esBAv=t5BDA3=RPcFs>fQt=gs;p&f-4@K_fm*mz2( zg-!=lHXbe!RC`b3!Q&}#idxJ&+fM%h)t-}(g!#gm#Y{asijJZR^j&D+eoE+6KxK38S)qPs9%3(K!qVA6Hy~RV1&=imFf$kF`sTkBi<*=}Xe%g#dT0dh zPe-6M;saQ@Nd)&N!zMu|0+sEBI)oryP*}b^)axNI^gnq zUqftXL)kkHJ#o+nDtpdd5w0X>lY+o8_yOKYi?rmONALNo%!MPcmN`Kh8wgoK46Ixo z`8(rdYRzKyHvH}wJtfOqx!a9DaK>hBM5V3>_`F1nx{5;_tM}LrS;|a%no-sx^})IjO~s17|QkszzAeR!z)WdvSToH@r+n_>ed|QwnCmnRFk)^wP3KRn=cSqlm9$ZIn^TpWNV|qTn^C1>~3#AT27Q=i0z7upbIyxhEGZY%*5s#RJ-jc z7H4dL>&lQxCxWS@O(Ax zo)j*R1aXz1!tFj=jp43;b#kU}cN)7;w=EYgj|R;Mn+?dJBuQFm+2d(g@@XPd5kD3$ z5eEKhM|)8@nvVPoU&VSVm03@5#vCyWpqJkGl9!B`NQBXWA^t*O)+YLG8Fged_7G(N z9UHu>8(@84V@97(O*tkSK<@`;Do_U{<);TzVfO>%P$mTZ_u9Kmo%|oz1L|R5J@Uo? O0000cI{H*Kc#qaX=w?}%*fr>Ix~G3Gf$iVH&<8o{3*h63kn!CBR!pa)8AhY4MTN7J%_rm8c>E> zg8DLQNOMce-mjaR;gv00z}MRw0(S3ao3vUjc(}PiVthQbw6#HbWhMOm_%RoC=+H~J z9IdlekNRvipcd5`bqsaypZD)WYH~6J?b!nj7cRh^yLaKo%a>u~$rDIQNPyq(-Gkby zDi|IfhPs9Z%1}Mb!x$z27Z(>nCXk#Q2cjT@J3e$B@RW@l%?($Z3x z!*|!kL`G`f2@Ko}Mu}t$WJOJ|V*FY!4-bRIi12WjLF0I?Z2VqmD100nYp`eYrcF?J z_AJCECW5&_!M)}0zXYP@AO;!~^__tMc+uV-=H}+$RR;%Q(?3;13KBf(mPu1l97 zA}ox7Nkx*wJjA%?esl36OI0$3sIYb^fKwhil2+5Pns zj-6jp5`2PQQWlF7>Dl-={M6meLQV1mHiz1}I`&MqkfCNQUBN5KxRawJpI2B2m_T4> zX9o`k2U*{wX04Zo^XDOS|9;@JvJB>_8&PA(!i0G{AV7do<^nGsWAZsW*8EhpWgX-=)z6=dfrj27#wBj{I@*ySx_0Mx^HER$l z>FID7J=*T+3EZhu1S>NIV?Zi}m7w%z8zvIo9AJ-0M43npoXTQ)dYZwopjnYqannc2 z%*-eol`9#Q8(mAwpwxXF92|JoqR@*kuzgV|Nv3CJAPK`cF*!*;GXQ(0$uJrKVRcbb z^QB*C1f~A@E!HM^mvsENB-mPk%b;{-*4EZAF)<+tCIz?*`tQ@Hl3`MT0+i~M22x@F k2gsmUr<1zpB9JKm0o0o_?%D&=@c;k-07*qoM6N<$f@-yMtpET3 literal 0 HcmV?d00001 diff --git a/StarRailUID/utils/image/image_tools.py b/StarRailUID/utils/image/image_tools.py index 2d67822..7bffa62 100644 --- a/StarRailUID/utils/image/image_tools.py +++ b/StarRailUID/utils/image/image_tools.py @@ -2,13 +2,39 @@ from pathlib import Path from typing import Union from PIL import Image -from gsuid_core.utils.image.image_tools import CustomizeImage +from gsuid_core.models import Event +from gsuid_core.utils.image.image_tools import CustomizeImage, get_event_avatar -from ..resource.RESOURCE_PATH import CU_BG_PATH +from ..resource.RESOURCE_PATH import CU_BG_PATH, CHAR_ICON_PATH BG_PATH = Path(__file__).parent / "bg" NM_BG_PATH = BG_PATH / "nm_bg" TEXT_PATH = Path(__file__).parent / "texture2d" +NATURE_ICON_PATH = Path(__file__).parent / "icon_nature" + +elements = { + "ice": Image.open( + NATURE_ICON_PATH / "IconNatureColorIce.png" + ).convert("RGBA"), + "fire": Image.open( + NATURE_ICON_PATH / "IconNatureColorFire.png" + ).convert("RGBA"), + "imaginary": Image.open( + NATURE_ICON_PATH / "IconNatureColorImaginary.png" + ).convert("RGBA"), + "quantum": Image.open( + NATURE_ICON_PATH / "IconNatureColorQuantum.png" + ).convert("RGBA"), + "lightning": Image.open( + NATURE_ICON_PATH / "IconNatureColorThunder.png" + ).convert("RGBA"), + "wind": Image.open( + NATURE_ICON_PATH / "IconNatureColorWind.png" + ).convert("RGBA"), + "physical": Image.open( + NATURE_ICON_PATH / "IconNaturePhysical.png" + ).convert("RGBA"), +} if list(CU_BG_PATH.iterdir()) != []: bg_path = CU_BG_PATH @@ -30,3 +56,7 @@ async def get_simple_bg( def get_footer(): return Image.open(TEXT_PATH / 'footer.png') + + +async def _get_event_avatar(event: Event) -> Image.Image: + return await get_event_avatar(event, CHAR_ICON_PATH)