From ba13c517d84199b3e3d623a5edc4d26e2b841cb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wuyi=E6=97=A0=E7=96=91?= <444835641@qq.com> Date: Sun, 6 Aug 2023 16:24:58 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20=E9=80=82=E9=85=8D=E6=96=B0?= =?UTF-8?q?=E7=89=88GsCore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- StarRailUID/sruid_utils/api/mihomo/models.py | 8 +- .../starrailuid_abyss/draw_abyss_card.py | 7 +- .../starrailuid_charinfo/draw_char_img.py | 58 ++-- .../starrailuid_gachalog/draw_gachalogs.py | 12 +- .../starrailuid_rogue/draw_rogue_card.py | 7 +- StarRailUID/starrailuid_roleinfo/__init__.py | 2 + StarRailUID/utils/convert.py | 2 +- StarRailUID/utils/image/image_tools.py | 303 +----------------- StarRailUID/utils/image/texture2d/mask.png | Bin 5831 -> 0 bytes StarRailUID/utils/image/texture2d/ring.png | Bin 7988 -> 0 bytes .../map/data/avatarId2Star_mapping_1.2.0.json | 2 +- StarRailUID/utils/map/data/char_alias.json | 6 +- StarRailUID/utils/mys_api.py | 38 ++- 13 files changed, 109 insertions(+), 336 deletions(-) delete mode 100644 StarRailUID/utils/image/texture2d/mask.png delete mode 100644 StarRailUID/utils/image/texture2d/ring.png diff --git a/StarRailUID/sruid_utils/api/mihomo/models.py b/StarRailUID/sruid_utils/api/mihomo/models.py index 29cee23..db348b7 100644 --- a/StarRailUID/sruid_utils/api/mihomo/models.py +++ b/StarRailUID/sruid_utils/api/mihomo/models.py @@ -20,12 +20,18 @@ class Equipment(TypedDict): class Relic(TypedDict): - subAffixList: List[subAffixList] + subAffixList: List[SubAffix] tid: int mainAffixId: int type: int +class SubAffix(TypedDict): + affixID: int + cnt: int + step: int + + class Avatar(TypedDict): skillTreeList: List[Behavior] rank: Optional[int] diff --git a/StarRailUID/starrailuid_abyss/draw_abyss_card.py b/StarRailUID/starrailuid_abyss/draw_abyss_card.py index e08bf63..61085e6 100644 --- a/StarRailUID/starrailuid_abyss/draw_abyss_card.py +++ b/StarRailUID/starrailuid_abyss/draw_abyss_card.py @@ -4,12 +4,15 @@ from typing import Union, Optional from PIL import Image, ImageDraw from gsuid_core.logger import logger from gsuid_core.utils.error_reply import get_error +from gsuid_core.utils.image.image_tools import ( + get_qq_avatar, + draw_pic_with_ring, +) from .utils import get_icon from ..utils.convert import GsCookie from ..utils.image.convert import convert_img from ..sruid_utils.api.mys.models import AbyssAvatar -from ..utils.image.image_tools import get_qq_avatar, draw_pic_with_ring from ..utils.fonts.starrail_fonts import ( sr_font_22, sr_font_28, @@ -190,7 +193,7 @@ async def draw_abyss_img( char_pic = await get_qq_avatar(avatar_url=_id) else: char_pic = await get_qq_avatar(qid=qid) - char_pic = await draw_pic_with_ring(char_pic, 250) + 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_charinfo/draw_char_img.py b/StarRailUID/starrailuid_charinfo/draw_char_img.py index 9df4e11..eadfa66 100644 --- a/StarRailUID/starrailuid_charinfo/draw_char_img.py +++ b/StarRailUID/starrailuid_charinfo/draw_char_img.py @@ -1,18 +1,34 @@ +import re import json import math -import re from pathlib import Path -from typing import Dict, Optional, Union +from typing import Dict, Union, Optional +from mpmath import mp, nstr +from PIL import Image, ImageDraw from gsuid_core.logger import logger from gsuid_core.utils.image.convert import convert_img from gsuid_core.utils.image.image_tools import draw_text_by_line -from mpmath import mp, nstr -from PIL import Image, ImageDraw +from .to_data import api_to_dict +from .mono.Character import Character from ..utils.error_reply import CHAR_HINT -from ..utils.excel.read_excel import light_cone_ranks from ..utils.fonts.first_world import fw_font_28 +from ..utils.excel.read_excel import light_cone_ranks +from ..utils.map.name_covert import name_to_avatar_id, alias_to_char_name +from ..utils.map.SR_MAP_PATH import ( + RelicId2Rarity, + AvatarRelicScore, + avatarId2Name, + avatarId2DamageType, +) +from ..utils.resource.RESOURCE_PATH import ( + RELIC_PATH, + SKILL_PATH, + PLAYER_PATH, + WEAPON_PATH, + CHAR_PORTRAIT_PATH, +) from ..utils.fonts.starrail_fonts import ( sr_font_20, sr_font_23, @@ -22,22 +38,6 @@ from ..utils.fonts.starrail_fonts import ( sr_font_34, sr_font_38, ) -from ..utils.map.name_covert import alias_to_char_name, name_to_avatar_id -from ..utils.map.SR_MAP_PATH import ( - AvatarRelicScore, - RelicId2Rarity, - avatarId2DamageType, - avatarId2Name, -) -from ..utils.resource.RESOURCE_PATH import ( - CHAR_PORTRAIT_PATH, - PLAYER_PATH, - RELIC_PATH, - SKILL_PATH, - WEAPON_PATH, -) -from .mono.Character import Character -from .to_data import api_to_dict mp.dps = 14 @@ -103,7 +103,11 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): char_img_draw.text( (620, 207), char.char_name, (255, 255, 255), sr_font_38, 'lm' ) - char_name_len = sr_font_38.getsize(char.char_name)[0] + if hasattr(sr_font_38, 'getsize'): + char_name_len = sr_font_38.getsize(char.char_name)[0] + else: + bbox = sr_font_38.getbbox(char.char_name) + char_name_len = bbox[2] - bbox[0] # 放等级 char_img_draw.text( @@ -346,9 +350,13 @@ async def draw_char_info_img(raw_mes: str, sr_uid: str, url: Optional[str]): sr_font_34, 'lm', ) - weapon_name_len = sr_font_34.getsize(char.equipment["equipmentName"])[ - 0 - ] + if hasattr(sr_font_34, 'getsize'): + weapon_name_len = sr_font_34.getsize( + char.equipment["equipmentName"] + )[0] + else: + bbox = sr_font_34.getbbox(char.equipment["equipmentName"]) + weapon_name_len = bbox[2] - bbox[0] # 放阶 rank_img = Image.open(TEXT_PATH / 'ImgNewBg.png') rank_img_draw = ImageDraw.Draw(rank_img) diff --git a/StarRailUID/starrailuid_gachalog/draw_gachalogs.py b/StarRailUID/starrailuid_gachalog/draw_gachalogs.py index 90ec66b..4fd7c07 100644 --- a/StarRailUID/starrailuid_gachalog/draw_gachalogs.py +++ b/StarRailUID/starrailuid_gachalog/draw_gachalogs.py @@ -6,6 +6,11 @@ from typing import List, Tuple, Union from PIL import Image, ImageDraw from gsuid_core.logger import logger +from gsuid_core.utils.image.image_tools import ( + get_color_bg, + get_qq_avatar, + draw_pic_with_ring, +) from ..utils.image.convert import convert_img from ..utils.map.name_covert import name_to_avatar_id, name_to_weapon_id @@ -14,11 +19,6 @@ from ..utils.resource.RESOURCE_PATH import ( WEAPON_PATH, CHAR_ICON_PATH, ) -from ..utils.image.image_tools import ( - get_color_bg, - get_qq_avatar, - draw_pic_with_ring, -) from ..utils.fonts.starrail_fonts import ( sr_font_20, sr_font_24, @@ -324,7 +324,7 @@ async def draw_gachalogs_img(uid: str, user_id: str) -> Union[bytes, str]: char_pic = await get_qq_avatar(avatar_url=_id) else: char_pic = await get_qq_avatar(qid=user_id) - char_pic = await draw_pic_with_ring(char_pic, 206) + char_pic = await draw_pic_with_ring(char_pic, 206, None, False) # 获取背景图片各项参数 img = Abg3_img.copy() diff --git a/StarRailUID/starrailuid_rogue/draw_rogue_card.py b/StarRailUID/starrailuid_rogue/draw_rogue_card.py index 878bc34..0487891 100644 --- a/StarRailUID/starrailuid_rogue/draw_rogue_card.py +++ b/StarRailUID/starrailuid_rogue/draw_rogue_card.py @@ -5,11 +5,14 @@ from typing import List, Union, Optional from PIL import Image, ImageDraw from gsuid_core.logger import logger from gsuid_core.utils.error_reply import get_error +from gsuid_core.utils.image.image_tools import ( + get_qq_avatar, + draw_pic_with_ring, +) from .utils import get_icon from ..utils.convert import GsCookie from ..utils.image.convert import convert_img -from ..utils.image.image_tools import get_qq_avatar, draw_pic_with_ring from ..sruid_utils.api.mys.models import ( RogueAvatar, RogueMiracles, @@ -283,7 +286,7 @@ async def draw_rogue_img( char_pic = await get_qq_avatar(avatar_url=_id) else: char_pic = await get_qq_avatar(qid=qid) - char_pic = await draw_pic_with_ring(char_pic, 250) + 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_roleinfo/__init__.py b/StarRailUID/starrailuid_roleinfo/__init__.py index a0d2ced..bd30248 100644 --- a/StarRailUID/starrailuid_roleinfo/__init__.py +++ b/StarRailUID/starrailuid_roleinfo/__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 ..utils.convert import get_uid from ..utils.sr_prefix import PREFIX @@ -21,5 +22,6 @@ async def send_role_info(bot: Bot, ev: Event): if uid is None: return '你还没有绑定UID噢,请使用[sr绑定uid123]完成绑定!' + logger.info(f'[sr查询信息]UID: {uid}') await bot.logger.info('开始执行[sr查询信息]') await bot.send(await get_role_img(uid)) diff --git a/StarRailUID/utils/convert.py b/StarRailUID/utils/convert.py index 4a6e3c0..ab4eb75 100644 --- a/StarRailUID/utils/convert.py +++ b/StarRailUID/utils/convert.py @@ -13,7 +13,7 @@ from ..sruid_utils.api.mys.models import AbyssData, RogueData @overload async def get_uid( - bot: Bot, ev: Event, only_uid: bool = False + bot: Bot, ev: Event, get_user_id: bool = False, only_uid: bool = False ) -> Optional[str]: ... diff --git a/StarRailUID/utils/image/image_tools.py b/StarRailUID/utils/image/image_tools.py index cf2f628..504842e 100644 --- a/StarRailUID/utils/image/image_tools.py +++ b/StarRailUID/utils/image/image_tools.py @@ -1,22 +1,20 @@ -import math -import random -from io import BytesIO from pathlib import Path -from typing import Tuple, Union, Optional +from typing import Union, Optional -from httpx import get -from PIL import Image, ImageDraw, ImageFont +from PIL import Image +from gsuid_core.utils.image.image_tools import TEXT_PATH, CustomizeImage +from ..resource.RESOURCE_PATH import CU_BG_PATH from ...starrailuid_config.sr_config import srconfig -from ..resource.RESOURCE_PATH import CU_BG_PATH, TEXT2D_PATH BG_PATH = Path(__file__).parent / 'bg' -TEXT_PATH = Path(__file__).parent / 'texture2d' -ring_pic = Image.open(TEXT_PATH / 'ring.png') -mask_pic = Image.open(TEXT_PATH / 'mask.png') NM_BG_PATH = BG_PATH / 'nm_bg' SP_BG_PATH = BG_PATH / 'sp_bg' +if list(CU_BG_PATH.iterdir()) != []: + bg_path = CU_BG_PATH +else: + bg_path = NM_BG_PATH if list(CU_BG_PATH.iterdir()) != []: bg_path = CU_BG_PATH @@ -24,60 +22,11 @@ else: bg_path = NM_BG_PATH -def draw_text_by_line( - img: Image.Image, - pos: Tuple[int, int], - text: str, - font: ImageFont.FreeTypeFont, - fill: Union[Tuple[int, int, int, int], str], - max_length: float, - center=False, - line_space: Optional[float] = None, -): - """ - 在图片上写长段文字, 自动换行 - max_length单行最大长度, 单位像素 - line_space 行间距, 单位像素, 默认是字体高度的0.3倍 - """ - x, y = pos - _, h = font.getsize('X') - if line_space is None: - y_add = math.ceil(1.3 * h) - else: - y_add = math.ceil(h + line_space) - draw = ImageDraw.Draw(img) - row = "" # 存储本行文字 - length = 0 # 记录本行长度 - for character in text: - w, h = font.getsize(character) # 获取当前字符的宽度 - if length + w * 2 <= max_length: - row += character - length += w - else: - row += character - if center: - font_size = font.getsize(row) - x = math.ceil((img.size[0] - font_size[0]) / 2) - draw.text((x, y), row, font=font, fill=fill) - row = "" - length = 0 - y += y_add - if row != "": - if center: - font_size = font.getsize(row) - x = math.ceil((img.size[0] - font_size[0]) / 2) - draw.text((x, y), row, font=font, fill=fill) - - -async def get_qq_avatar( - qid: Optional[Union[int, str]] = None, avatar_url: Optional[str] = None +async def get_simple_bg( + based_w: int, based_h: int, image: Union[str, None, Image.Image] = None ) -> Image.Image: - if qid: - avatar_url = f'http://q1.qlogo.cn/g?b=qq&nk={qid}&s=640' - elif avatar_url is None: - avatar_url = 'https://q1.qlogo.cn/g?b=qq&nk=3399214199&s=640' - char_pic = Image.open(BytesIO(get(avatar_url).content)).convert('RGBA') - return char_pic + CIL = CustomizeImage(NM_BG_PATH) + return CIL.get_image(image, based_w, based_h) async def get_color_bg( @@ -94,233 +43,13 @@ async def get_color_bg( image = Image.open(path2) elif path.exists(): image = Image.open(path) - CI_img = CustomizeImage(image, based_w, based_h) - img = CI_img.bg_img - color = CI_img.bg_color + CI_img = CustomizeImage(bg_path) + img = CI_img.get_image(image, based_w, based_h) + color = CI_img.get_bg_color(img) if not without_mask: color_mask = Image.new('RGBA', (based_w, based_h), color) - enka_mask = Image.open(TEXT2D_PATH / 'mask.png').resize( + enka_mask = Image.open(TEXT_PATH / 'bg_mask.png').resize( (based_w, based_h) ) img.paste(color_mask, (0, 0), enka_mask) return img - - -async def get_simple_bg( - based_w: int, based_h: int, image: Union[str, None, Image.Image] = None -) -> Image.Image: - if image: - if isinstance(image, str): - edit_bg = Image.open(BytesIO(get(image).content)).convert('RGBA') - elif isinstance(image, Image.Image): - edit_bg = image.convert('RGBA') - else: - bg_path = random.choice(list(NM_BG_PATH.iterdir())) - edit_bg = Image.open(bg_path).convert('RGBA') - - # 确定图片的长宽 - bg_img = crop_center_img(edit_bg, based_w, based_h) - return bg_img - - -def crop_center_img( - img: Image.Image, based_w: int, based_h: int -) -> Image.Image: - # 确定图片的长宽 - based_scale = '%.3f' % (based_w / based_h) - w, h = img.size - scale_f = '%.3f' % (w / h) - new_w = math.ceil(based_h * float(scale_f)) - new_h = math.ceil(based_w / float(scale_f)) - if scale_f > based_scale: - resize_img = img.resize((new_w, based_h), Image.ANTIALIAS) - x1 = int(new_w / 2 - based_w / 2) - y1 = 0 - x2 = int(new_w / 2 + based_w / 2) - y2 = based_h - else: - resize_img = img.resize((based_w, new_h), Image.ANTIALIAS) - x1 = 0 - y1 = int(new_h / 2 - based_h / 2) - x2 = based_w - y2 = int(new_h / 2 + based_h / 2) - crop_img = resize_img.crop((x1, y1, x2, y2)) - return crop_img - - -async def draw_pic_with_ring( - pic: Image.Image, - size: int, - bg_color: Optional[Tuple[int, int, int]] = None, -): - ''' - :说明: - 绘制一张带白色圆环的1:1比例图片。 - - :参数: - * pic: `Image.Image`: 要修改的图片。 - * size: `int`: 最后传出图片的大小(1:1)。 - * bg_color: `Optional[Tuple[int, int, int]]`: 是否指定圆环内背景颜色。 - - :返回: - * img: `Image.Image`: 图片对象 - ''' - img = Image.new('RGBA', (size, size)) - mask = mask_pic.resize((size, size)) - # ring = ring_pic.resize((size, size)) - resize_pic = crop_center_img(pic, size, size) - if bg_color: - img_color = Image.new('RGBA', (size, size), bg_color) - img_color.paste(resize_pic, (0, 0), resize_pic) - img.paste(img_color, (0, 0), mask) - else: - img.paste(resize_pic, (0, 0), mask) - # img.paste(ring, (0, 0), ring) - return img - - -class CustomizeImage: - def __init__( - self, image: Union[str, Image.Image], based_w: int, based_h: int - ) -> None: - self.bg_img = self.get_image(image, based_w, based_h) - self.bg_color = self.get_bg_color(self.bg_img, is_light=True) - self.text_color = self.get_text_color(self.bg_color) - self.highlight_color = self.get_highlight_color(self.bg_color) - self.char_color = self.get_char_color(self.bg_color) - self.bg_detail_color = self.get_bg_detail_color(self.bg_color) - self.char_high_color = self.get_char_high_color(self.bg_color) - - @staticmethod - def get_image( - image: Union[str, Image.Image], based_w: int, based_h: int - ) -> Image.Image: - # 获取背景图片 - if isinstance(image, Image.Image): - edit_bg = image - elif image: - edit_bg = Image.open(BytesIO(get(image).content)).convert('RGBA') - else: - path = random.choice(list(bg_path.iterdir())) - edit_bg = Image.open(path).convert('RGBA') - - # 确定图片的长宽 - bg_img = crop_center_img(edit_bg, based_w, based_h) - return bg_img - - @staticmethod - def get_dominant_color(pil_img: Image.Image) -> Tuple[int, int, int]: - img = pil_img.copy() - img = img.convert("RGBA") - img = img.resize((1, 1), resample=0) - dominant_color = img.getpixel((0, 0)) - return dominant_color - - @staticmethod - def get_bg_color( - edit_bg: Image.Image, is_light: Optional[bool] = False - ) -> Tuple[int, int, int]: - # 获取背景主色 - color = 8 - q = edit_bg.quantize(colors=color, method=2) - bg_color = (0, 0, 0) - if is_light: - based_light = 195 - else: - based_light = 120 - temp = 9999 - for i in range(color): - bg = tuple( - q.getpalette()[ # type:ignore - i * 3 : (i * 3) + 3 # noqa:E203 - ] - ) - light_value = bg[0] * 0.3 + bg[1] * 0.6 + bg[2] * 0.1 - if abs(light_value - based_light) < temp: # noqa:E203 - bg_color = bg - temp = abs(light_value - based_light) - return bg_color - - @staticmethod - def get_text_color(bg_color: Tuple[int, int, int]) -> Tuple[int, int, int]: - # 通过背景主色(bg_color)确定文字主色 - r = 125 - if max(*bg_color) > 255 - r: - r *= -1 - text_color = ( - math.floor(bg_color[0] + r if bg_color[0] + r <= 255 else 255), - math.floor(bg_color[1] + r if bg_color[1] + r <= 255 else 255), - math.floor(bg_color[2] + r if bg_color[2] + r <= 255 else 255), - ) - return text_color - - @staticmethod - def get_char_color(bg_color: Tuple[int, int, int]) -> Tuple[int, int, int]: - r = 140 - if max(*bg_color) > 255 - r: - r *= -1 - char_color = ( - math.floor(bg_color[0] + 5 if bg_color[0] + r <= 255 else 255), - math.floor(bg_color[1] + 5 if bg_color[1] + r <= 255 else 255), - math.floor(bg_color[2] + 5 if bg_color[2] + r <= 255 else 255), - ) - return char_color - - @staticmethod - def get_char_high_color( - bg_color: Tuple[int, int, int] - ) -> Tuple[int, int, int]: - r = 140 - d = 20 - if max(*bg_color) > 255 - r: - r *= -1 - char_color = ( - math.floor(bg_color[0] + d if bg_color[0] + r <= 255 else 255), - math.floor(bg_color[1] + d if bg_color[1] + r <= 255 else 255), - math.floor(bg_color[2] + d if bg_color[2] + r <= 255 else 255), - ) - return char_color - - @staticmethod - def get_bg_detail_color( - bg_color: Tuple[int, int, int] - ) -> Tuple[int, int, int]: - r = 140 - if max(*bg_color) > 255 - r: - r *= -1 - bg_detail_color = ( - math.floor(bg_color[0] - 20 if bg_color[0] + r <= 255 else 255), - math.floor(bg_color[1] - 20 if bg_color[1] + r <= 255 else 255), - math.floor(bg_color[2] - 20 if bg_color[2] + r <= 255 else 255), - ) - return bg_detail_color - - @staticmethod - def get_highlight_color( - color: Tuple[int, int, int] - ) -> Tuple[int, int, int]: - red_color = color[0] - green_color = color[1] - blue_color = color[2] - - highlight_color = { - 'red': red_color - 127 if red_color > 127 else 127, - 'green': green_color - 127 if green_color > 127 else 127, - 'blue': blue_color - 127 if blue_color > 127 else 127, - } - - max_color = max(highlight_color.values()) - - name = '' - for _highlight_color in highlight_color: - if highlight_color[_highlight_color] == max_color: - name = str(_highlight_color) - - if name == 'red': - return red_color, highlight_color['green'], highlight_color['blue'] - elif name == 'green': - return highlight_color['red'], green_color, highlight_color['blue'] - elif name == 'blue': - return highlight_color['red'], highlight_color['green'], blue_color - else: - return 0, 0, 0 # Error diff --git a/StarRailUID/utils/image/texture2d/mask.png b/StarRailUID/utils/image/texture2d/mask.png deleted file mode 100644 index c2211002bb790a52f19fa3c33c8b491106342c80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5831 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 diff --git a/StarRailUID/utils/image/texture2d/ring.png b/StarRailUID/utils/image/texture2d/ring.png deleted file mode 100644 index 328995cb67d55b95cb71135c640b8dcb1171d9a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7988 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 NH&BMxNLL(V{|C{+e}Vu2 diff --git a/StarRailUID/utils/map/data/avatarId2Star_mapping_1.2.0.json b/StarRailUID/utils/map/data/avatarId2Star_mapping_1.2.0.json index 2813f0b..f120a88 100644 --- a/StarRailUID/utils/map/data/avatarId2Star_mapping_1.2.0.json +++ b/StarRailUID/utils/map/data/avatarId2Star_mapping_1.2.0.json @@ -32,4 +32,4 @@ "8002": "5", "8003": "5", "8004": "5" -} +} \ No newline at end of file diff --git a/StarRailUID/utils/map/data/char_alias.json b/StarRailUID/utils/map/data/char_alias.json index 8862f38..27d3fc1 100644 --- a/StarRailUID/utils/map/data/char_alias.json +++ b/StarRailUID/utils/map/data/char_alias.json @@ -45,7 +45,7 @@ "天才俱乐部第83席", "天才俱乐部第八十三席", "黑塔女士", - "转圈圈" + "转圈圈" ], "1003": [ "姬子", @@ -128,7 +128,7 @@ "骚狐狸" ], "8002": [ - "开拓者", + "开拓者", "开拓者物理", "爷", "星爷", @@ -143,7 +143,7 @@ "毁灭主" ], "8004": [ - "开拓者", + "开拓者", "开拓者火", "火主", "存护主" diff --git a/StarRailUID/utils/mys_api.py b/StarRailUID/utils/mys_api.py index 2690558..42180a5 100644 --- a/StarRailUID/utils/mys_api.py +++ b/StarRailUID/utils/mys_api.py @@ -76,7 +76,10 @@ class MysApi(_MysApi): is_os = self.check_os(uid) if is_os: HEADER = copy.deepcopy(self._HEADER_OS) - HEADER['Cookie'] = await self.get_ck(uid, 'OWNER') + ck = await self.get_ck(uid, 'OWNER') + if ck is None: + return -51 + HEADER['Cookie'] = ck HEADER['DS'] = generate_os_ds() header = HEADER data = await self.simple_mys_req( @@ -105,10 +108,14 @@ class MysApi(_MysApi): return -51 header['Cookie'] = sk header['x-rpc-channel'] = 'beta' - header['x-rpc-device_id'] = await self.get_user_device_id(uid) + device_id = await self.get_user_device_id(uid) + header['x-rpc-device_id'] = ( + '233333' if device_id is None else device_id + ) header['x-rpc-app_version'] = '2.53.0' header['x-rpc-device_model'] = 'Mi 10' - header['x-rpc-device_fp'] = await self.get_user_fp(uid) + fp = await self.get_user_fp(uid) + header['x-rpc-device_fp'] = 'Asmr489' if fp is None else fp header['x-rpc-client_type'] = '2' header['DS'] = get_ds_token2() header['Referer'] = 'https://app.mihoyo.com' @@ -126,7 +133,10 @@ class MysApi(_MysApi): is_os = self.check_os(uid) if is_os: HEADER = copy.deepcopy(self._HEADER_OS) - HEADER['Cookie'] = await self.get_ck(uid, 'OWNER') + ck = await self.get_ck(uid, 'OWNER') + if ck is None: + return -51 + HEADER['Cookie'] = ck HEADER['DS'] = generate_os_ds() header = HEADER data = await self.simple_mys_req( @@ -159,7 +169,10 @@ class MysApi(_MysApi): server_id = RECOGNIZE_SERVER.get(str(uid)[0]) if self.check_os(uid): HEADER = copy.deepcopy(self._HEADER_OS) - HEADER['Cookie'] = await self.get_ck(uid, 'OWNER') + ck = await self.get_ck(uid, 'OWNER') + if ck is None: + return -51 + HEADER['Cookie'] = ck HEADER['DS'] = generate_os_ds() header = HEADER url = self.MAPI['STAR_RAIL_GACHA_LOG_URL_OS'] @@ -200,7 +213,10 @@ class MysApi(_MysApi): is_os = self.check_os(uid) if is_os: HEADER = copy.deepcopy(self._HEADER_OS) - HEADER['Cookie'] = await self.get_ck(uid, 'OWNER') + ck = await self.get_ck(uid, 'OWNER') + if ck is None: + return -51 + HEADER['Cookie'] = ck HEADER['DS'] = generate_os_ds() header = HEADER data = await self.simple_mys_req( @@ -259,7 +275,10 @@ class MysApi(_MysApi): 'lang': 'zh-cn', } HEADER = copy.deepcopy(self._HEADER_OS) - HEADER['Cookie'] = await self.get_ck(uid, 'OWNER') + ck = await self.get_ck(uid, 'OWNER') + if ck is None: + return -51 + HEADER['Cookie'] = ck HEADER['DS'] = generate_os_ds() header = HEADER else: @@ -287,7 +306,10 @@ class MysApi(_MysApi): is_os = self.check_os(uid) if is_os: HEADER = copy.deepcopy(self._HEADER_OS) - HEADER['Cookie'] = await self.get_ck(uid, 'OWNER') + ck = await self.get_ck(uid, 'OWNER') + if ck is None: + return -51 + HEADER['Cookie'] = ck HEADER['DS'] = generate_os_ds() header = HEADER data = await self.simple_mys_req(