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 0000000..c0e5c09 Binary files /dev/null and b/StarRailUID/utils/image/icon_nature/IconNatureColorFire.png differ diff --git a/StarRailUID/utils/image/icon_nature/IconNatureColorIce.png b/StarRailUID/utils/image/icon_nature/IconNatureColorIce.png new file mode 100644 index 0000000..9026e17 Binary files /dev/null and b/StarRailUID/utils/image/icon_nature/IconNatureColorIce.png differ diff --git a/StarRailUID/utils/image/icon_nature/IconNatureColorImaginary.png b/StarRailUID/utils/image/icon_nature/IconNatureColorImaginary.png new file mode 100644 index 0000000..da9f292 Binary files /dev/null and b/StarRailUID/utils/image/icon_nature/IconNatureColorImaginary.png differ diff --git a/StarRailUID/utils/image/icon_nature/IconNatureColorQuantum.png b/StarRailUID/utils/image/icon_nature/IconNatureColorQuantum.png new file mode 100644 index 0000000..3ba24c0 Binary files /dev/null and b/StarRailUID/utils/image/icon_nature/IconNatureColorQuantum.png differ diff --git a/StarRailUID/utils/image/icon_nature/IconNatureColorThunder.png b/StarRailUID/utils/image/icon_nature/IconNatureColorThunder.png new file mode 100644 index 0000000..9982c61 Binary files /dev/null and b/StarRailUID/utils/image/icon_nature/IconNatureColorThunder.png differ diff --git a/StarRailUID/utils/image/icon_nature/IconNatureColorWind.png b/StarRailUID/utils/image/icon_nature/IconNatureColorWind.png new file mode 100644 index 0000000..f92982a Binary files /dev/null and b/StarRailUID/utils/image/icon_nature/IconNatureColorWind.png differ diff --git a/StarRailUID/utils/image/icon_nature/IconNaturePhysical.png b/StarRailUID/utils/image/icon_nature/IconNaturePhysical.png new file mode 100644 index 0000000..e78da4f Binary files /dev/null and b/StarRailUID/utils/image/icon_nature/IconNaturePhysical.png differ 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)