mirror of
https://github.com/KimigaiiWuyi/GenshinUID.git
synced 2025-05-08 04:55:51 +08:00
✨ 新增gs深渊队伍
This commit is contained in:
parent
8c410efc19
commit
6f30dbef0b
@ -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)
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
BIN
GenshinUID/genshinuid_xkdata/texture2d2/bar.png
Normal file
BIN
GenshinUID/genshinuid_xkdata/texture2d2/bar.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
BIN
GenshinUID/genshinuid_xkdata/texture2d2/char4_bg.png
Normal file
BIN
GenshinUID/genshinuid_xkdata/texture2d2/char4_bg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 618 B |
BIN
GenshinUID/genshinuid_xkdata/texture2d2/char5_bg.png
Normal file
BIN
GenshinUID/genshinuid_xkdata/texture2d2/char5_bg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 614 B |
@ -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`
|
||||
资源保存名称
|
||||
|
@ -1,2 +1,2 @@
|
||||
GenshinUID_version = '5.1.1'
|
||||
GenshinUID_version = '5.1.2'
|
||||
Genshin_version = '5.1.0'
|
||||
|
Loading…
x
Reference in New Issue
Block a user