mirror of
https://github.com/KimigaiiWuyi/GenshinUID.git
synced 2025-05-06 19:53:45 +08:00
✨ 支持版本深渊4.3
, 头像获取不到时使用随机角色
This commit is contained in:
parent
36d4d27458
commit
d5fec5b5a9
@ -33,7 +33,6 @@ async def send_cp_info(bot: Bot, ev: Event):
|
||||
@sv_sj.on_command(('查询收集', 'sj'), block=True)
|
||||
async def send_collection_info(bot: Bot, ev: Event):
|
||||
await bot.logger.info('开始执行[查询收集信息]')
|
||||
user_id = ev.at if ev.at else ev.user_id
|
||||
|
||||
# 获取uid
|
||||
uid = await get_uid(bot, ev)
|
||||
@ -41,7 +40,7 @@ async def send_collection_info(bot: Bot, ev: Event):
|
||||
return await bot.send(UID_HINT)
|
||||
await bot.logger.info('[查询角色面板]uid: {}'.format(uid))
|
||||
|
||||
im = await draw_collection_img(user_id, uid)
|
||||
im = await draw_collection_img(ev, uid)
|
||||
a = Button('🔍查询探索', '查询探索')
|
||||
b = Button('🔍查询收集', '查询收集')
|
||||
await bot.send_option(im, [a, b])
|
||||
@ -50,7 +49,6 @@ async def send_collection_info(bot: Bot, ev: Event):
|
||||
@sv_ts.on_command(('查询探索', 'ts'), block=True)
|
||||
async def send_explora_info(bot: Bot, ev: Event):
|
||||
await bot.logger.info('开始执行[查询探索信息]')
|
||||
user_id = ev.at if ev.at else ev.user_id
|
||||
|
||||
# 获取uid
|
||||
uid = await get_uid(bot, ev)
|
||||
@ -58,7 +56,7 @@ async def send_explora_info(bot: Bot, ev: Event):
|
||||
return await bot.send(UID_HINT)
|
||||
await bot.logger.info('[查询角色面板]uid: {}'.format(uid))
|
||||
|
||||
im = await draw_explora_img(user_id, uid)
|
||||
im = await draw_explora_img(ev, uid)
|
||||
a = Button('🔍查询探索', '查询探索')
|
||||
b = Button('🔍查询收集', '查询收集')
|
||||
await bot.send_option(im, [a, b])
|
||||
|
@ -2,6 +2,7 @@ from pathlib import Path
|
||||
from typing import Dict, Tuple, Union, Literal
|
||||
|
||||
from PIL import Image, ImageDraw
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.utils.api.mys.models import IndexData
|
||||
from gsuid_core.utils.error_reply import get_error_img
|
||||
|
||||
@ -9,12 +10,7 @@ from ..utils.mys_api import mys_api
|
||||
from ..utils.image.convert import convert_img
|
||||
from ..utils.map.GS_MAP_PATH import avatarId2Name
|
||||
from ..utils.fonts.genshin_fonts import gs_font_30, gs_font_40
|
||||
from ..utils.image.image_tools import (
|
||||
draw_bar,
|
||||
get_color_bg,
|
||||
get_qq_avatar,
|
||||
draw_pic_with_ring,
|
||||
)
|
||||
from ..utils.image.image_tools import draw_bar, get_avatar, get_color_bg
|
||||
|
||||
TEXT_PATH = Path(__file__).parent / 'texture2D'
|
||||
|
||||
@ -55,16 +51,12 @@ expmax_data = {
|
||||
}
|
||||
|
||||
|
||||
async def draw_collection_img(
|
||||
qid: Union[str, int], uid: str
|
||||
) -> Union[str, bytes]:
|
||||
return await draw_base_img(qid, uid, '收集')
|
||||
async def draw_collection_img(ev: Event, uid: str) -> Union[str, bytes]:
|
||||
return await draw_base_img(ev, uid, '收集')
|
||||
|
||||
|
||||
async def draw_explora_img(
|
||||
qid: Union[str, int], uid: str
|
||||
) -> Union[str, bytes]:
|
||||
return await draw_base_img(qid, uid, '探索')
|
||||
async def draw_explora_img(ev: Event, uid: str) -> Union[str, bytes]:
|
||||
return await draw_base_img(ev, uid, '探索')
|
||||
|
||||
|
||||
async def get_base_data(uid: str) -> Union[bytes, str, IndexData]:
|
||||
@ -165,7 +157,7 @@ async def get_collection_data(
|
||||
|
||||
|
||||
async def draw_base_img(
|
||||
qid: Union[str, int], uid: str, mode: Literal['探索', '收集'] = '收集'
|
||||
ev: Event, uid: str, mode: Literal['探索', '收集'] = '收集'
|
||||
) -> Union[str, bytes]:
|
||||
# 获取数据
|
||||
if mode == '收集':
|
||||
@ -179,12 +171,7 @@ async def draw_base_img(
|
||||
percent_data, value_data = data[0], data[1]
|
||||
|
||||
# 获取背景图片各项参数
|
||||
_id = str(qid)
|
||||
if _id.startswith('http'):
|
||||
char_pic = await get_qq_avatar(avatar_url=_id)
|
||||
else:
|
||||
char_pic = await get_qq_avatar(qid=qid)
|
||||
char_pic = await draw_pic_with_ring(char_pic, 264)
|
||||
char_pic = await get_avatar(ev, 264)
|
||||
|
||||
if mode == '收集':
|
||||
title = Image.open(TEXT_PATH / 'collection_title.png')
|
||||
|
@ -51,7 +51,7 @@ async def sned_rank_pic(bot: Bot, ev: Event):
|
||||
if uid is None:
|
||||
return await bot.send(UID_HINT)
|
||||
logger.info(f'[排名列表]uid: {uid}')
|
||||
im = await draw_rank_img(ev.user_id, uid)
|
||||
im = await draw_rank_img(ev, uid)
|
||||
await bot.send_option(
|
||||
im,
|
||||
[
|
||||
@ -127,7 +127,7 @@ async def sned_aritifacts_list(bot: Bot, ev: Event):
|
||||
else:
|
||||
num = 1
|
||||
|
||||
im = await draw_lib(ev.user_id, uid, num)
|
||||
im = await draw_lib(ev, uid, num)
|
||||
await bot.send_option(
|
||||
im,
|
||||
[
|
||||
@ -312,12 +312,11 @@ async def send_card_info(bot: Bot, ev: Event):
|
||||
await bot.send(im)
|
||||
|
||||
|
||||
@sv_get_enka.on_command('毕业度统计')
|
||||
@sv_get_enka.on_command(('毕业度统计', '毕业都统计'))
|
||||
async def send_charcard_list(bot: Bot, ev: Event):
|
||||
uid = await get_uid(bot, ev)
|
||||
user_id = ev.at if ev.at else ev.user_id
|
||||
if uid is None:
|
||||
return await bot.send(UID_HINT)
|
||||
im = await draw_cahrcard_list(str(uid), user_id)
|
||||
im = await draw_cahrcard_list(str(uid), ev)
|
||||
await bot.logger.info(f'UID{uid}获取角色数据成功!')
|
||||
await bot.send(im)
|
||||
|
@ -4,13 +4,14 @@ from typing import Dict, Union, Optional
|
||||
|
||||
import aiofiles
|
||||
from PIL import Image, ImageDraw
|
||||
from gsuid_core.models import Event
|
||||
|
||||
from .etc.etc import TEXT_PATH
|
||||
from .start import refresh_player_list
|
||||
from ..utils.image.convert import convert_img
|
||||
from ..utils.image.image_tools import get_avatar
|
||||
from .draw_normal import _get_single_artifact_img
|
||||
from ..utils.resource.RESOURCE_PATH import PLAYER_PATH
|
||||
from ..utils.image.image_tools import get_qq_avatar, draw_pic_with_ring
|
||||
from ..utils.fonts.genshin_fonts import gs_font_25, gs_font_36, gs_font_38
|
||||
|
||||
|
||||
@ -36,7 +37,7 @@ async def get_artifacts_lib_data(uid: str) -> Optional[Dict]:
|
||||
return data
|
||||
|
||||
|
||||
async def draw_lib(user_id: str, uid: str, num: int) -> Union[bytes, str]:
|
||||
async def draw_lib(ev: Event, uid: str, num: int) -> Union[bytes, str]:
|
||||
data = await get_artifacts_lib_data(uid)
|
||||
if data is None:
|
||||
return '你还没有圣遗物数据...请尝试使用[刷新圣遗物仓库]获取数据!'
|
||||
@ -80,8 +81,7 @@ async def draw_lib(user_id: str, uid: str, num: int) -> Union[bytes, str]:
|
||||
return f'[UID{uid}] 圣遗物仓库没有 {num} 页!\n最多为 {all_page} 页!'
|
||||
|
||||
bg = Image.open(TEXT_PATH / 'artifacts_lib_bg.png')
|
||||
avatar = await get_qq_avatar(user_id)
|
||||
avatar_img = await draw_pic_with_ring(avatar, 280)
|
||||
avatar_img = await get_avatar(ev, 280)
|
||||
|
||||
bg.paste(avatar_img, (120, 88), avatar_img)
|
||||
|
||||
|
@ -3,6 +3,7 @@ import asyncio
|
||||
from typing import Tuple, Union, Literal
|
||||
|
||||
from PIL import Image, ImageDraw
|
||||
from gsuid_core.models import Event
|
||||
|
||||
from .mono.Character import Character
|
||||
from ..utils.image.convert import convert_img
|
||||
@ -12,8 +13,8 @@ from ..utils.map.name_covert import avatar_id_to_char_star
|
||||
from ..utils.fonts.genshin_fonts import genshin_font_origin
|
||||
from ..utils.resource.RESOURCE_PATH import CHAR_PATH, PLAYER_PATH, WEAPON_PATH
|
||||
from ..utils.image.image_tools import (
|
||||
get_avatar,
|
||||
get_color_bg,
|
||||
get_qq_avatar,
|
||||
get_fetter_pic,
|
||||
get_talent_pic,
|
||||
draw_pic_with_ring,
|
||||
@ -63,7 +64,8 @@ value_mask = Image.open(TEXT_PATH / 'value_mask.png')
|
||||
|
||||
|
||||
async def draw_cahrcard_list(
|
||||
uid: str, qid: Union[str, int]
|
||||
uid: str,
|
||||
ev: Event,
|
||||
) -> Union[str, bytes]:
|
||||
uid_fold = PLAYER_PATH / str(uid)
|
||||
char_file_list = uid_fold.glob('*')
|
||||
@ -114,12 +116,8 @@ async def draw_cahrcard_list(
|
||||
|
||||
# 排序
|
||||
char_done_list.sort(key=lambda x: (-x['percent']))
|
||||
qid = str(qid)
|
||||
if qid.startswith('http'):
|
||||
char_pic = await get_qq_avatar(avatar_url=qid)
|
||||
else:
|
||||
char_pic = await get_qq_avatar(qid=qid)
|
||||
char_pic = await draw_pic_with_ring(char_pic, 320)
|
||||
|
||||
char_pic = await get_avatar(ev, 320)
|
||||
|
||||
img = await get_color_bg(950, 540 + 100 * len(char_done_list))
|
||||
img.paste(char_rank_title, (0, 0), char_rank_title)
|
||||
|
@ -1,15 +1,16 @@
|
||||
from typing import Dict, Union
|
||||
|
||||
from PIL import Image, ImageDraw
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.utils.image.convert import convert_img
|
||||
from gsuid_core.utils.image.image_tools import crop_center_img
|
||||
|
||||
from .etc.etc import TEXT_PATH
|
||||
from ..utils.colors import get_color
|
||||
from .get_akasha_data import _get_rank
|
||||
from ..utils.image.image_tools import get_avatar
|
||||
from ..utils.map.name_covert import avatar_id_to_name
|
||||
from .to_card import draw_char_card, draw_weapon_card
|
||||
from ..utils.image.image_tools import get_qq_avatar, draw_pic_with_ring
|
||||
from ..utils.fonts.genshin_fonts import (
|
||||
gs_font_15,
|
||||
gs_font_22,
|
||||
@ -25,13 +26,12 @@ TITLE_PATH = RANK_TEXT / 'title.png'
|
||||
grey = (191, 191, 191)
|
||||
|
||||
|
||||
async def draw_rank_img(user_id: str, uid: str) -> Union[bytes, str]:
|
||||
async def draw_rank_img(ev: Event, uid: str) -> Union[bytes, str]:
|
||||
rank_data = await _get_rank(uid)
|
||||
if isinstance(rank_data, str):
|
||||
return rank_data
|
||||
|
||||
user_avatar = await get_qq_avatar(user_id)
|
||||
user_pic = await draw_pic_with_ring(user_avatar, 314)
|
||||
user_pic = await get_avatar(ev, 314)
|
||||
title = Image.open(TITLE_PATH)
|
||||
title_draw = ImageDraw.Draw(title)
|
||||
|
||||
|
@ -42,10 +42,10 @@ async def send_import_gacha_info(bot: Bot, ev: Event):
|
||||
@sv_gacha_log.on_fullmatch(('抽卡记录'))
|
||||
async def send_gacha_log_card_info(bot: Bot, ev: Event):
|
||||
await bot.logger.info('开始执行[抽卡记录]')
|
||||
uid, user_id = await get_uid(bot, ev, True)
|
||||
uid = await get_uid(bot, ev)
|
||||
if uid is None:
|
||||
return await bot.send(UID_HINT)
|
||||
im = await draw_gachalogs_img(uid, user_id)
|
||||
im = await draw_gachalogs_img(uid, ev)
|
||||
a = Button('🔁刷新抽卡记录', '刷新抽卡记录')
|
||||
b = Button('🔜导出抽卡记录至提瓦特小助手', '导出抽卡记录到小助手')
|
||||
c = Button('🔙从提瓦特小助手导入抽卡记录', '从小助手导入抽卡记录')
|
||||
|
@ -6,16 +6,13 @@ from pathlib import Path
|
||||
from typing import List, Tuple, Union
|
||||
|
||||
from PIL import Image, ImageDraw
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.logger import logger
|
||||
|
||||
from ..utils.image.convert import convert_img
|
||||
from ..utils.map.name_covert import name_to_avatar_id
|
||||
from ..utils.image.image_tools import get_avatar, get_color_bg
|
||||
from ..utils.resource.RESOURCE_PATH import CHAR_PATH, PLAYER_PATH, WEAPON_PATH
|
||||
from ..utils.image.image_tools import (
|
||||
get_color_bg,
|
||||
get_qq_avatar,
|
||||
draw_pic_with_ring,
|
||||
)
|
||||
from ..utils.fonts.genshin_fonts import (
|
||||
gs_font_24,
|
||||
gs_font_28,
|
||||
@ -132,7 +129,7 @@ def check_up(name: str, _time: str) -> bool:
|
||||
return False
|
||||
|
||||
|
||||
async def draw_gachalogs_img(uid: str, user_id: str) -> Union[bytes, str]:
|
||||
async def draw_gachalogs_img(uid: str, ev: Event) -> Union[bytes, str]:
|
||||
path = PLAYER_PATH / str(uid) / 'gacha_logs.json'
|
||||
if not path.exists():
|
||||
return '你还没有祈愿数据噢~\n请添加Stoken后使用命令`刷新抽卡记录`更新祈愿数据~'
|
||||
@ -301,12 +298,7 @@ async def draw_gachalogs_img(uid: str, user_id: str) -> Union[bytes, str]:
|
||||
weapon_y = (1 + ((total_data['武器祈愿']['total'] - 1) // 6)) * single_y
|
||||
|
||||
# 获取背景图片各项参数
|
||||
_id = str(user_id)
|
||||
if _id.startswith('http'):
|
||||
char_pic = await get_qq_avatar(avatar_url=_id)
|
||||
else:
|
||||
char_pic = await get_qq_avatar(qid=user_id)
|
||||
char_pic = await draw_pic_with_ring(char_pic, 320)
|
||||
char_pic = await get_avatar(ev, 320)
|
||||
|
||||
avatar_title = Image.open(TEXT_PATH / 'avatar_title.png')
|
||||
img = await get_color_bg(950, 530 + 900 + normal_y + char_y + weapon_y)
|
||||
|
@ -34,5 +34,5 @@ async def send_deck_pic(bot: Bot, ev: Event):
|
||||
deck_id = int(ev.text.strip())
|
||||
else:
|
||||
return bot.send('请输入正确的序号, 例如我的卡组1...')
|
||||
im = await draw_deck_img(ev.user_id, uid, deck_id)
|
||||
im = await draw_deck_img(ev, uid, deck_id)
|
||||
await bot.send_option(im, [Button('✅七圣数据总览', '七圣召唤')])
|
||||
|
@ -2,6 +2,7 @@ from pathlib import Path
|
||||
from typing import Union
|
||||
|
||||
from PIL import Image, ImageDraw
|
||||
from gsuid_core.models import Event
|
||||
from gsuid_core.logger import logger
|
||||
from gsuid_core.utils.error_reply import get_error_img
|
||||
|
||||
@ -11,17 +12,13 @@ from ..utils.resource.download_url import download
|
||||
from ..utils.resource.RESOURCE_PATH import CARD_PATH
|
||||
from ..utils.colors import sec_color, first_color, light_color
|
||||
from ..utils.fonts.genshin_fonts import gs_font_20, gs_font_36
|
||||
from ..utils.image.image_tools import (
|
||||
get_color_bg,
|
||||
get_qq_avatar,
|
||||
draw_pic_with_ring,
|
||||
)
|
||||
from ..utils.image.image_tools import get_avatar, get_color_bg
|
||||
|
||||
TEXT_PATH = Path(__file__).parent / 'texture2d'
|
||||
|
||||
|
||||
async def draw_deck_img(
|
||||
user_id: str, uid: str, deck_id: int
|
||||
ev: Event, uid: str, deck_id: int
|
||||
) -> Union[str, bytes]:
|
||||
# 获取数据
|
||||
raw_data = await mys_api.get_gcg_deck(uid)
|
||||
@ -32,12 +29,7 @@ async def draw_deck_img(
|
||||
raw_data = raw_data['deck_list'][deck_id - 1]
|
||||
deck_name = raw_data['name']
|
||||
# 获取背景图片各项参数
|
||||
_id = str(user_id)
|
||||
if _id.startswith('http'):
|
||||
char_pic = await get_qq_avatar(avatar_url=_id)
|
||||
else:
|
||||
char_pic = await get_qq_avatar(qid=user_id)
|
||||
char_pic = await draw_pic_with_ring(char_pic, 320)
|
||||
char_pic = await get_avatar(ev, 320)
|
||||
|
||||
# 初始化图片
|
||||
img = await get_color_bg(950, 2300)
|
||||
|
@ -1,6 +1,7 @@
|
||||
import json
|
||||
import datetime
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Literal
|
||||
from typing import Dict, List, Literal, Optional
|
||||
|
||||
import httpx
|
||||
import aiofiles
|
||||
@ -162,8 +163,22 @@ async def get_half_img(data: List, half: Literal['Upper', 'Lower']):
|
||||
return half_img
|
||||
|
||||
|
||||
async def _get_data_from_url(url: str, path: Path) -> Dict:
|
||||
if not path.exists():
|
||||
async def _get_data_from_url(
|
||||
url: str, path: Path, expire_sec: Optional[float] = None
|
||||
) -> Dict:
|
||||
time_difference = 10
|
||||
if expire_sec is not None:
|
||||
modified_time = path.stat().st_mtime
|
||||
modified_datetime = datetime.datetime.fromtimestamp(modified_time)
|
||||
current_datetime = datetime.datetime.now()
|
||||
|
||||
time_difference = (
|
||||
current_datetime - modified_datetime
|
||||
).total_seconds()
|
||||
|
||||
if (
|
||||
expire_sec is not None and time_difference >= expire_sec
|
||||
) or not path.exists():
|
||||
async with httpx.AsyncClient() as client:
|
||||
response = await client.get(url)
|
||||
data = response.json()
|
||||
@ -181,7 +196,9 @@ async def get_review_data(
|
||||
version: str = Genshin_version[:3], floor: str = '12'
|
||||
):
|
||||
schedule_data = await _get_data_from_url(
|
||||
'http://www.yuhengcup.top/api/get_DatabaseSchedule', schedule_path
|
||||
'http://www.yuhengcup.top/api/get_DatabaseSchedule',
|
||||
schedule_path,
|
||||
86400,
|
||||
)
|
||||
|
||||
schedule: List = schedule_data['SpiralAbyssSchedule']
|
||||
|
Loading…
x
Reference in New Issue
Block a user