支持版本深渊4.3, 头像获取不到时使用随机角色

This commit is contained in:
KimigaiiWuyi 2023-12-03 19:37:53 +08:00
parent 36d4d27458
commit d5fec5b5a9
11 changed files with 60 additions and 77 deletions

View File

@ -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])

View File

@ -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')

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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('🔙从提瓦特小助手导入抽卡记录', '从小助手导入抽卡记录')

View File

@ -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)

View File

@ -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('✅七圣数据总览', '七圣召唤')])

View File

@ -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)

View File

@ -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']