新增gs深渊队伍

This commit is contained in:
KimigaiiWuyi 2024-10-22 01:13:58 +08:00
parent 8c410efc19
commit 6f30dbef0b
7 changed files with 103 additions and 12 deletions

View File

@ -8,10 +8,10 @@ from gsuid_core.aps import scheduler
from gsuid_core.logger import logger
from .draw_char_abyss import draw_char_abyss_info
from .draw_teyvat_img import draw_teyvat_abyss_img
# from .draw_abyss_total import TOTAL_IMG, draw_xk_abyss_img
from .get_all_char_data import save_all_char_info, save_all_abyss_rank
from .draw_teyvat_img import draw_teyvat_team_img, draw_teyvat_abyss_img
sv_get_abyss_database = SV('查询深渊数据库', priority=4)
@ -37,7 +37,17 @@ async def send_abyss_pic(bot: Bot, ev: Event):
# await draw_xk_abyss_img()
img = await draw_teyvat_abyss_img()
# img = await convert_img(TOTAL_IMG)
logger.info('获得深渊概览图片成功!')
logger.info('[深渊概览] 获得深渊概览图片成功!')
await bot.send(img)
@sv_get_abyss_database.on_fullmatch(
('深渊队伍', '深渊队伍统计', '深渊队伍推荐', '深渊组队'), block=True
)
async def send_abyss_team_pic(bot: Bot, ev: Event):
# await draw_xk_abyss_img()
img = await draw_teyvat_team_img()
logger.info('[深渊概览] 获得深渊队伍排行图片成功!')
await bot.send(img)

View File

@ -6,16 +6,19 @@ from gsuid_core.utils.error_reply import get_error
from ..utils.image.convert import convert_img
from ..utils.api.teyvat.request import teyvat_api
from ..utils.api.teyvat.models import FakeTeyvatRank
from ..utils.resource.RESOURCE_PATH import CHAR_PATH
from ..utils.resource.download_url import download
from ..utils.map.name_covert import name_to_avatar_id
from ..utils.image.image_tools import get_v4_bg, add_footer
from ..utils.resource.RESOURCE_PATH import CHAR_PATH, TEMP_PATH
from ..utils.api.teyvat.models import FakeTeyvatRank, TeyvatAbyssRank
from ..utils.fonts.genshin_fonts import (
gs_font_24,
gs_font_26,
gs_font_30,
gs_font_32,
gs_font_36,
gs_font_38,
gs_font_40,
)
TEXT_PATH = Path(__file__).parent / 'texture2d2'
@ -32,13 +35,92 @@ COLOR_MAP = {
}
async def get_teyvat_title(data: TeyvatAbyssRank):
version = data['version'].replace('当前版本:', '')
data_time = data['update']
title = Image.open(TEXT_PATH / 'title_bg.png')
title_draw = ImageDraw.Draw(title)
title_draw.text((664, 318), version, 'white', gs_font_36, 'mm')
title_draw.text((287, 364), data_time, GREY, gs_font_26, 'lm')
return title
async def draw_teyvat_team_img():
data = await teyvat_api.get_abyss_rank()
if isinstance(data, int):
return get_error(data)
tip1 = data['tips']
tip2 = data['tips2']
title = await get_teyvat_title(data)
w, h = 1500, 500
result = data['result'][3][:14]
h += len(result) * 190 + 100 + 200
img = get_v4_bg(w, h)
img.paste(title, (0, 0), title)
img_draw = ImageDraw.Draw(img)
img_draw.text((750, h - 130), tip1, GREY, gs_font_26, 'mm')
img_draw.text((750, h - 80), tip2, GREY, gs_font_26, 'mm')
img_draw.rounded_rectangle((42, 518, 1457, 576), 0, (0, 0, 0, 170))
img_draw.text((138, 547), '阵容列表', 'white', gs_font_38, 'mm')
img_draw.text((786, 547), '使用率', 'white', gs_font_38, 'mm')
img_draw.text((969, 547), '持有率', 'white', gs_font_38, 'mm')
img_draw.text((1152, 547), '登场率', 'white', gs_font_38, 'mm')
img_draw.text((1341, 547), '上下比', 'white', gs_font_38, 'mm')
for index, team in enumerate(result):
roles = team['role']
bar = Image.open(TEXT_PATH / 'bar.png')
for rindex, role in enumerate(roles):
icon_url = role['avatar']
icon_name = icon_url.split('/')[-1].split('.')[0]
if icon_name == '0':
icon_name = icon_url.split('/')[-2].split('.')[0]
char_name = f'{icon_name}.png'
char_path = TEMP_PATH / char_name
if not char_path.exists():
await download(icon_url, 16, char_name)
char = Image.open(char_path).convert('RGBA')
char = char.resize((128, 128))
char_bg = Image.open(TEXT_PATH / f'char{role["star"]}_bg.png')
char_bg.paste(char, (11, 11), char)
bar.paste(char_bg, (55 + rindex * 150, 20), char_bg)
bar_draw = ImageDraw.Draw(bar)
use_rate = f'{team["use_rate"]}%'
has_rate = f'{team["has_rate"]}%'
attend_rate = f'{team["attend_rate"]}%'
up_down = f'{team["up_use"]}:{team["down_use"]}'
bar_draw.text((786, 95), use_rate, 'white', gs_font_40, 'mm')
bar_draw.text((969, 95), has_rate, 'white', gs_font_40, 'mm')
bar_draw.text((1152, 95), attend_rate, 'white', gs_font_40, 'mm')
bar_draw.text((1341, 95), up_down, 'white', gs_font_40, 'mm')
img.paste(bar, (0, 595 + index * 190), bar)
img = add_footer(img)
img = img.convert('RGB')
return await convert_img(img)
async def draw_teyvat_abyss_img():
data = await teyvat_api.get_abyss_rank()
if isinstance(data, int):
return get_error(data)
version = data['version'].replace('当前版本:', '')
data_time = data['update']
tip1 = data['tips']
tip2 = data['tips2']
@ -67,11 +149,7 @@ async def draw_teyvat_abyss_img():
)
h += 200
title = Image.open(TEXT_PATH / 'title_bg.png')
title_draw = ImageDraw.Draw(title)
title_draw.text((664, 318), version, 'white', gs_font_36, 'mm')
title_draw.text((287, 364), data_time, GREY, gs_font_26, 'lm')
title = await get_teyvat_title(data)
img = get_v4_bg(w, h)
img.paste(title, (0, 0), title)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 614 B

View File

@ -11,6 +11,7 @@ from .RESOURCE_PATH import (
CARD_PATH,
CHAR_PATH,
ICON_PATH,
TEMP_PATH,
WIKI_PATH,
GUIDE_PATH,
WEAPON_PATH,
@ -39,6 +40,7 @@ PATH_MAP = {
13: CHAR_SIDE_TEMP_PATH,
14: CHAR_NAMECARDPIC_PATH,
15: ACHI_ICON_PATH,
16: TEMP_PATH,
}
@ -71,6 +73,7 @@ async def download(
13: CHAR_SIDE_TEMP_PATH,
14: CHAR_NAMECARDPIC_PATH,
15: ACHI_ICON_PATH,
16: TEMP_PATH,
'''
* name: `str`
资源保存名称

View File

@ -1,2 +1,2 @@
GenshinUID_version = '5.1.1'
GenshinUID_version = '5.1.2'
Genshin_version = '5.1.0'