mirror of
https://github.com/xuthus83/LittlePaimon.git
synced 2025-04-12 23:29:37 +08:00
✨ 优化ysd
卡片和部分消息提示
This commit is contained in:
parent
206b86ea90
commit
04b5b31852
@ -7,7 +7,7 @@ from LittlePaimon.utils.migration import migrate_database
|
|||||||
from LittlePaimon.utils.tool import check_resource
|
from LittlePaimon.utils.tool import check_resource
|
||||||
|
|
||||||
DRIVER = get_driver()
|
DRIVER = get_driver()
|
||||||
__version__ = '3.0.0beta1'
|
__version__ = '3.0.0beta2'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
SUPERUSERS: List[int] = [int(s) for s in DRIVER.config.superusers]
|
SUPERUSERS: List[int] = [int(s) for s in DRIVER.config.superusers]
|
||||||
|
File diff suppressed because it is too large
Load Diff
1429
LittlePaimon/config/data/genshin_info.json
Normal file
1429
LittlePaimon/config/data/genshin_info.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -19,7 +19,7 @@ weapon_map = load_json(JSON_DATA / 'weapon.json')
|
|||||||
prop_list_map = load_json(JSON_DATA / 'prop.json')
|
prop_list_map = load_json(JSON_DATA / 'prop.json')
|
||||||
artifact_map = load_json(JSON_DATA / 'artifact.json')
|
artifact_map = load_json(JSON_DATA / 'artifact.json')
|
||||||
score_talent_map = load_json(JSON_DATA / 'score.json')
|
score_talent_map = load_json(JSON_DATA / 'score.json')
|
||||||
enka_icon_map = load_json(JSON_DATA / 'enka_icon.json')
|
enka_icon_map = load_json(JSON_DATA / 'genshin_info.json')
|
||||||
reaction_coefficient = {
|
reaction_coefficient = {
|
||||||
'蒸发': 0,
|
'蒸发': 0,
|
||||||
'融化': 0,
|
'融化': 0,
|
||||||
@ -165,6 +165,9 @@ class Artifacts(BaseModel):
|
|||||||
def append(self, artifact: Artifact):
|
def append(self, artifact: Artifact):
|
||||||
self.artifact_list.append(artifact)
|
self.artifact_list.append(artifact)
|
||||||
|
|
||||||
|
def index(self, artifact: Artifact) -> int:
|
||||||
|
return self.artifact_list.index(artifact)
|
||||||
|
|
||||||
|
|
||||||
class Constellation(BaseModel):
|
class Constellation(BaseModel):
|
||||||
"""命座数据"""
|
"""命座数据"""
|
||||||
@ -325,14 +328,13 @@ class Character(Model):
|
|||||||
data['skillLevelMap'][
|
data['skillLevelMap'][
|
||||||
list(data['skillLevelMap'].keys())[score_talent_map['Talent'][role_name][1]]] += 3
|
list(data['skillLevelMap'].keys())[score_talent_map['Talent'][role_name][1]]] += 3
|
||||||
|
|
||||||
|
if character.name in ['神里绫华', '莫娜']:
|
||||||
|
del data['skillLevelMap'][list(data['skillLevelMap'].keys())[2]]
|
||||||
|
|
||||||
character.talents = Talents(talent_list=[Talent(name=role_skill_map['Name'][talent],
|
character.talents = Talents(talent_list=[Talent(name=role_skill_map['Name'][talent],
|
||||||
level=data['skillLevelMap'][talent],
|
level=data['skillLevelMap'][talent],
|
||||||
icon=role_skill_map['Icon'][talent]) for talent in
|
icon=role_skill_map['Icon'][talent]) for talent in
|
||||||
data['skillLevelMap']])
|
data['skillLevelMap']])
|
||||||
|
|
||||||
if character.name == '神里绫华':
|
|
||||||
character.talents[0], character.talents[-1] = character.talents[-1], character.talents[0]
|
|
||||||
character.talents[2], character.talents[-1] = character.talents[-1], character.talents[2]
|
|
||||||
if character.name == '安柏':
|
if character.name == '安柏':
|
||||||
character.talents[0], character.talents[-1] = character.talents[-1], character.talents[0]
|
character.talents[0], character.talents[-1] = character.talents[-1], character.talents[0]
|
||||||
if character.name in ['空', '荧']:
|
if character.name in ['空', '荧']:
|
||||||
@ -431,7 +433,6 @@ class Character(Model):
|
|||||||
range(data['actived_constellation_num'])
|
range(data['actived_constellation_num'])
|
||||||
])
|
])
|
||||||
if character.name in ['荧', '空']:
|
if character.name in ['荧', '空']:
|
||||||
# TODO 草主
|
|
||||||
character.fetter = 10
|
character.fetter = 10
|
||||||
character.element = '岩' if data['element'] == 'Geo' else '风' if data['element'] == 'Anemo' else '草' if data['element'] == 'Dendro' else '雷'
|
character.element = '岩' if data['element'] == 'Geo' else '风' if data['element'] == 'Anemo' else '草' if data['element'] == 'Dendro' else '雷'
|
||||||
role_name = character.element + '主'
|
role_name = character.element + '主'
|
||||||
@ -446,10 +447,10 @@ class Character(Model):
|
|||||||
data['skill_list'][score_talent_map['Talent'][role_name][0]]['level_current'] += 3
|
data['skill_list'][score_talent_map['Talent'][role_name][0]]['level_current'] += 3
|
||||||
if len(data['talentIdList']) >= 5:
|
if len(data['talentIdList']) >= 5:
|
||||||
data['skill_list'][score_talent_map['Talent'][role_name][1]]['level_current'] += 3
|
data['skill_list'][score_talent_map['Talent'][role_name][1]]['level_current'] += 3
|
||||||
talents_list = data['skill_list'][:3]
|
|
||||||
if character.name in ['莫娜', '神里绫华']:
|
if character.name in ['莫娜', '神里绫华']:
|
||||||
talents_list[-1] = data['skill_list'][3]
|
del data['skill_list'][2]
|
||||||
elif character.name == '达达利亚':
|
talents_list = data['skill_list'][:3]
|
||||||
|
if character.name == '达达利亚':
|
||||||
talents_list[0]['level_current'] += 1
|
talents_list[0]['level_current'] += 1
|
||||||
character.talents = Talents(talent_list=[Talent(name=t['name'],
|
character.talents = Talents(talent_list=[Talent(name=t['name'],
|
||||||
level=t['level_current'],
|
level=t['level_current'],
|
||||||
|
@ -863,32 +863,32 @@ async def draw_dmg_pic(dmg: Dict[str, Union[tuple, list]]) -> PMImage:
|
|||||||
:return: 伤害图片
|
:return: 伤害图片
|
||||||
"""
|
"""
|
||||||
height = 60 * len(dmg) - 20
|
height = 60 * len(dmg) - 20
|
||||||
img = PMImage(size=(948, height + 80), color=(0, 0, 0, 0), mode='RGBA')
|
img = PMImage(size=(1002, height + 80), color=(0, 0, 0, 0), mode='RGBA')
|
||||||
await img.draw_rounded_rectangle((0, 0, img.width, img.height), 10, (0, 0, 0, 100))
|
await img.draw_rounded_rectangle((0, 0, img.width, img.height), 10, (14, 41, 68, 115))
|
||||||
await img.draw_line((250, 0), (250, 948), (255, 255, 255, 75), 2)
|
await img.draw_line((250, 0), (250, 1002), (255, 255, 255, 75), 2)
|
||||||
await img.draw_line((599, 0), (599, 60), (255, 255, 255, 75), 2)
|
await img.draw_line((626, 0), (626, 60), (255, 255, 255, 75), 2)
|
||||||
await img.draw_line((0, 60), (948, 60), (255, 255, 255, 75), 2)
|
await img.draw_line((0, 60), (1002, 60), (255, 255, 255, 75), 2)
|
||||||
await img.text('伤害计算', (0, 250), (0, 60), font_manager.get('hywh.ttf', 30), 'white', 'center')
|
await img.text('伤害计算', (0, 250), (0, 60), font_manager.get('hywh.ttf', 30), 'white', 'center')
|
||||||
await img.text('期望伤害', (250, 599), (0, 60), font_manager.get('hywh.ttf', 30), 'white', 'center')
|
await img.text('期望伤害', (250, 626), (0, 60), font_manager.get('hywh.ttf', 30), 'white', 'center')
|
||||||
await img.text('暴击伤害', (599, 948), (0, 60), font_manager.get('hywh.ttf', 30), 'white', 'center')
|
await img.text('暴击伤害', (626, 1002), (0, 60), font_manager.get('hywh.ttf', 30), 'white', 'center')
|
||||||
i = 1
|
i = 1
|
||||||
for describe, dmg_list in dmg.items():
|
for describe, dmg_list in dmg.items():
|
||||||
await img.draw_line((0, 60 * i), (948, 60 * i), (255, 255, 255, 75), 2)
|
await img.draw_line((0, 60 * i), (1002, 60 * i), (255, 255, 255, 75), 2)
|
||||||
await img.text(describe, (0, 250), (60 * i, 60 * (i + 1)), font_manager.get('hywh.ttf', 30), 'white', 'center')
|
await img.text(describe, (0, 250), (60 * i, 60 * (i + 1)), font_manager.get('hywh.ttf', 30), 'white', 'center')
|
||||||
if len(dmg_list) == 1:
|
if len(dmg_list) == 1:
|
||||||
if describe == '额外说明':
|
if describe == '额外说明':
|
||||||
await img.text(dmg_list[0], (250, 948), (60 * i, 60 * (i + 1)), font_manager.get('hywh.ttf', 30),
|
await img.text(dmg_list[0], (250, 1002), (60 * i, 60 * (i + 1)), font_manager.get('hywh.ttf', 30),
|
||||||
'white',
|
'white',
|
||||||
'center')
|
'center')
|
||||||
else:
|
else:
|
||||||
await img.text(dmg_list[0], (250, 948), (60 * i, 60 * (i + 1)), font_manager.get('number.ttf', 30),
|
await img.text(dmg_list[0], (250, 1002), (60 * i, 60 * (i + 1)), font_manager.get('number.ttf', 30),
|
||||||
'white',
|
'white',
|
||||||
'center')
|
'center')
|
||||||
else:
|
else:
|
||||||
await img.draw_line((599, 60 * i), (599, 60 * (i + 1)), (255, 255, 255, 75), 2)
|
await img.draw_line((626, 60 * i), (626, 60 * (i + 1)), (255, 255, 255, 75), 2)
|
||||||
await img.text(dmg_list[0], (250, 599), (60 * i, 60 * (i + 1)), font_manager.get('number.ttf', 30), 'white',
|
await img.text(dmg_list[0], (250, 626), (60 * i, 60 * (i + 1)), font_manager.get('number.ttf', 30), 'white',
|
||||||
'center')
|
'center')
|
||||||
await img.text(dmg_list[1], (599, 948), (60 * i, 60 * (i + 1)), font_manager.get('number.ttf', 30), 'white',
|
await img.text(dmg_list[1], (626, 1002), (60 * i, 60 * (i + 1)), font_manager.get('number.ttf', 30), 'white',
|
||||||
'center')
|
'center')
|
||||||
i += 1
|
i += 1
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
from nonebot import logger
|
from nonebot import logger
|
||||||
|
|
||||||
from LittlePaimon.config.path import ENKA_RES, RESOURCE_BASE_PATH
|
from LittlePaimon.config.path import ENKA_RES, RESOURCE_BASE_PATH
|
||||||
from LittlePaimon.utils import load_image, aiorequests
|
from LittlePaimon.utils import load_image
|
||||||
from LittlePaimon.utils.genshin import GenshinTools
|
from LittlePaimon.utils.genshin import GenshinTools
|
||||||
from LittlePaimon.utils.image import PMImage, font_manager as fm
|
from LittlePaimon.utils.image import PMImage, font_manager as fm
|
||||||
from LittlePaimon.utils.message import MessageBuild
|
from LittlePaimon.utils.message import MessageBuild
|
||||||
|
from LittlePaimon.utils.alias import get_icon
|
||||||
from LittlePaimon.database.models import Character
|
from LittlePaimon.database.models import Character
|
||||||
from .damage_cal import get_role_dmg
|
from .damage_cal import get_role_dmg
|
||||||
|
|
||||||
@ -22,11 +23,7 @@ ICON = RESOURCE_BASE_PATH / 'icon'
|
|||||||
|
|
||||||
|
|
||||||
async def draw_chara_detail(uid: str, info: Character):
|
async def draw_chara_detail(uid: str, info: Character):
|
||||||
# 暂时用风
|
img = PMImage(await load_image(ENKA_RES / f'背景_{info.element}.png'))
|
||||||
if info.element == '草':
|
|
||||||
img = PMImage(image=ENKA_RES / f'背景_风.png')
|
|
||||||
else:
|
|
||||||
img = PMImage(image=ENKA_RES / f'背景_{info.element}.png')
|
|
||||||
try:
|
try:
|
||||||
dmg_img = await get_role_dmg(info)
|
dmg_img = await get_role_dmg(info)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@ -34,87 +31,95 @@ async def draw_chara_detail(uid: str, info: Character):
|
|||||||
dmg_img = None
|
dmg_img = None
|
||||||
if dmg_img:
|
if dmg_img:
|
||||||
await img.stretch((730, 1377), dmg_img.height + 667, 'height')
|
await img.stretch((730, 1377), dmg_img.height + 667, 'height')
|
||||||
await img.paste(dmg_img, (71, 1846))
|
await img.paste(dmg_img, (42, 1820))
|
||||||
await img.paste(await load_image(ENKA_RES / '底遮罩.png'), (0, 0))
|
|
||||||
if info.name not in ['荧', '空', '埃洛伊']:
|
|
||||||
await img.paste(await load_image(ENKA_RES / f'{info.region}.png', size=(130, 130)), (0, 0))
|
|
||||||
|
|
||||||
await img.text(f"UID{uid}", 131, 100, fm.get('number.ttf', 48))
|
# 立绘
|
||||||
await img.text(info.name, 134, 150, fm.get('优设标题黑.ttf', 72))
|
chara_img = await load_image(RESOURCE_BASE_PATH / 'splash' / f'{get_icon(chara_id=info.character_id, icon_type="splash")}.png')
|
||||||
|
if chara_img.height >= 630:
|
||||||
|
chara_img = chara_img.resize((chara_img.width * 630 // chara_img.height, 630))
|
||||||
|
await img.paste(chara_img, (770 - chara_img.width // 2, 20))
|
||||||
|
await img.paste(await load_image(ENKA_RES / '底遮罩.png'), (0, 0))
|
||||||
|
# 地区
|
||||||
|
if info.name not in ['荧', '空', '埃洛伊']:
|
||||||
|
await img.paste(await load_image(ENKA_RES / f'{info.region}.png', size=(108, 108)), (25, 25))
|
||||||
|
|
||||||
|
await img.text(f"UID{uid}", 160, 100, fm.get('number.ttf', 48))
|
||||||
|
await img.text(info.name, 45, 150, fm.get('优设标题黑.ttf', 72))
|
||||||
|
name_length = img.text_length(info.name, fm.get('优设标题黑.ttf', 72))
|
||||||
|
|
||||||
level_mask = await load_image(ENKA_RES / '等级遮罩.png')
|
level_mask = await load_image(ENKA_RES / '等级遮罩.png')
|
||||||
await img.paste(level_mask, (298 + 60 * (len(info.name) - 2), 172))
|
await img.paste(level_mask, (45 + name_length + 25, 172))
|
||||||
await img.text(f'LV{info.level}',
|
await img.text(f'LV{info.level}',
|
||||||
(298 + 60 * (len(info.name) - 2), 298 + 60 * (len(info.name) - 2) + 171),
|
(40 + name_length + 25, 40 + name_length + 25 + 171),
|
||||||
(170, 172 + 52),
|
(172, 172 + 52),
|
||||||
fm.get('number.ttf', 48),
|
fm.get('number.ttf', 48),
|
||||||
'black',
|
'#0e2944',
|
||||||
'center')
|
'center')
|
||||||
# 属性值
|
# 属性值
|
||||||
await img.text('生命值', 89, 262, fm.get('hywh.ttf', 34))
|
await img.text('生命值', 59, 267, fm.get('hywh.ttf', 34))
|
||||||
await img.text(f"{info.prop.base_health}",
|
await img.text(f"{info.prop.base_health}",
|
||||||
480 - img.text_length(f"+{info.prop.extra_health}", fm.get('number.ttf', 34)) - 5,
|
450 - img.text_length(f"+{info.prop.extra_health}", fm.get('number.ttf', 34)) - 5,
|
||||||
264,
|
269,
|
||||||
fm.get('number.ttf', 34),
|
fm.get('number.ttf', 34),
|
||||||
align='right')
|
align='right')
|
||||||
await img.text(f"+{info.prop.extra_health}",
|
await img.text(f"+{info.prop.extra_health}",
|
||||||
480,
|
450,
|
||||||
264,
|
269,
|
||||||
fm.get('number.ttf', 34),
|
fm.get('number.ttf', 34),
|
||||||
'#59c538',
|
'#59c538',
|
||||||
'right')
|
'right')
|
||||||
|
|
||||||
await img.text('攻击力', 89, 319, fm.get('hywh.ttf', 34))
|
await img.text('攻击力', 59, 324, fm.get('hywh.ttf', 34))
|
||||||
await img.text(f"{info.prop.base_attack}",
|
await img.text(f"{info.prop.base_attack}",
|
||||||
480 - img.text_length(f"+{info.prop.extra_attack}", fm.get('number.ttf', 34)) - 5,
|
450 - img.text_length(f"+{info.prop.extra_attack}", fm.get('number.ttf', 34)) - 5,
|
||||||
321,
|
326,
|
||||||
fm.get('number.ttf', 34),
|
fm.get('number.ttf', 34),
|
||||||
align='right')
|
align='right')
|
||||||
await img.text(f"+{info.prop.extra_attack}",
|
await img.text(f"+{info.prop.extra_attack}",
|
||||||
480,
|
450,
|
||||||
321,
|
326,
|
||||||
fm.get('number.ttf', 34),
|
fm.get('number.ttf', 34),
|
||||||
'#59c538',
|
'#59c538',
|
||||||
'right')
|
'right')
|
||||||
|
|
||||||
await img.text('防御力', 89, 377, fm.get('hywh.ttf', 34))
|
await img.text('防御力', 59, 382, fm.get('hywh.ttf', 34))
|
||||||
await img.text(f"{info.prop.base_defense}",
|
await img.text(f"{info.prop.base_defense}",
|
||||||
480 - img.text_length(f"+{info.prop.extra_defense}", fm.get('number.ttf', 34)) - 5,
|
450 - img.text_length(f"+{info.prop.extra_defense}", fm.get('number.ttf', 34)) - 5,
|
||||||
379,
|
384,
|
||||||
fm.get('number.ttf', 34),
|
fm.get('number.ttf', 34),
|
||||||
align='right')
|
align='right')
|
||||||
await img.text(f"+{info.prop.extra_defense}",
|
await img.text(f"+{info.prop.extra_defense}",
|
||||||
480,
|
450,
|
||||||
379,
|
384,
|
||||||
fm.get('number.ttf', 34),
|
fm.get('number.ttf', 34),
|
||||||
'#59c538',
|
'#59c538',
|
||||||
'right')
|
'right')
|
||||||
|
|
||||||
await img.text('暴击率', 89, 436, fm.get('hywh.ttf', 34))
|
await img.text('暴击率', 59, 441, fm.get('hywh.ttf', 34))
|
||||||
await img.text(f"{round(info.prop.crit_rate * 100, 1)}%",
|
await img.text(f"{round(info.prop.crit_rate * 100, 1)}%",
|
||||||
480,
|
450,
|
||||||
438,
|
443,
|
||||||
fm.get('number.ttf', 34),
|
fm.get('number.ttf', 34),
|
||||||
align='right')
|
align='right')
|
||||||
|
|
||||||
await img.text('暴击伤害', 89, 493, fm.get('hywh.ttf', 34))
|
await img.text('暴击伤害', 59, 498, fm.get('hywh.ttf', 34))
|
||||||
await img.text(f"{round(info.prop.crit_damage * 100, 1)}%",
|
await img.text(f"{round(info.prop.crit_damage * 100, 1)}%",
|
||||||
480,
|
450,
|
||||||
495,
|
500,
|
||||||
fm.get('number.ttf', 34),
|
fm.get('number.ttf', 34),
|
||||||
align='right')
|
align='right')
|
||||||
|
|
||||||
await img.text('元素精通', 89, 551, fm.get('hywh.ttf', 34))
|
await img.text('元素精通', 59, 556, fm.get('hywh.ttf', 34))
|
||||||
await img.text(str(int(info.prop.elemental_mastery)),
|
await img.text(str(int(info.prop.elemental_mastery)),
|
||||||
480,
|
450,
|
||||||
553,
|
558,
|
||||||
fm.get('number.ttf', 34),
|
fm.get('number.ttf', 34),
|
||||||
align='right')
|
align='right')
|
||||||
|
|
||||||
await img.text('元素充能效率', 89, 610, fm.get('hywh.ttf', 34))
|
await img.text('元素充能效率', 59, 615, fm.get('hywh.ttf', 34))
|
||||||
await img.text(f"{round(info.prop.elemental_efficiency * 100, 1)}%",
|
await img.text(f"{round(info.prop.elemental_efficiency * 100, 1)}%",
|
||||||
480,
|
450,
|
||||||
612,
|
617,
|
||||||
fm.get('number.ttf', 34),
|
fm.get('number.ttf', 34),
|
||||||
align='right')
|
align='right')
|
||||||
|
|
||||||
@ -123,99 +128,91 @@ async def draw_chara_detail(uid: str, info: Character):
|
|||||||
if v >= max_element[1]:
|
if v >= max_element[1]:
|
||||||
max_element = e, v
|
max_element = e, v
|
||||||
await img.text(f'{max_element[0]}伤害加成' if max_element[0] == '物理' else f'{max_element[0]}元素伤害加成',
|
await img.text(f'{max_element[0]}伤害加成' if max_element[0] == '物理' else f'{max_element[0]}元素伤害加成',
|
||||||
89,
|
59,
|
||||||
669,
|
674,
|
||||||
fm.get('hywh.ttf', 34))
|
fm.get('hywh.ttf', 34))
|
||||||
await img.text(f"{round(max_element[1] * 100, 1)}%",
|
await img.text(f"{round(max_element[1] * 100, 1)}%",
|
||||||
480,
|
450,
|
||||||
671,
|
676,
|
||||||
fm.get('number.ttf', 34),
|
fm.get('number.ttf', 34),
|
||||||
align='right')
|
align='right')
|
||||||
|
|
||||||
# 天赋
|
# 天赋
|
||||||
if info.element == '草':
|
|
||||||
base_icon = await load_image(ENKA_RES / '图标_风.png', mode='RGBA')
|
|
||||||
else:
|
|
||||||
base_icon = await load_image(ENKA_RES / f'图标_{info.element}.png', mode='RGBA')
|
base_icon = await load_image(ENKA_RES / f'图标_{info.element}.png', mode='RGBA')
|
||||||
base_icon_grey = await load_image(ENKA_RES / '图标_灰.png', mode='RGBA')
|
base_icon_grey = await load_image(ENKA_RES / '图标_灰.png', mode='RGBA')
|
||||||
if info.name in ['神里绫华', '莫娜']:
|
|
||||||
info.talents.pop(2)
|
|
||||||
for i in range(3):
|
for i in range(3):
|
||||||
await img.paste(base_icon.resize((132, 142)), (564, 253 + 146 * i))
|
await img.paste(base_icon.resize((132, 142)), (551 + i * 176, 633))
|
||||||
await img.text(str(info.talents[i].level),
|
await img.text(str(info.talents[i].level),
|
||||||
(510, 552),
|
(517 + 176 * i, 559 + 176 * i),
|
||||||
(304 + 146 * i, 349 + 146 * i),
|
690,
|
||||||
fm.get('number.ttf', 34),
|
fm.get('number.ttf', 34),
|
||||||
'black',
|
'#0e2944',
|
||||||
'center')
|
'center')
|
||||||
talent_icon = await load_image(TALENT_ICON / f'{info.talents[i].icon}.png', size=(57, 57), mode='RGBA')
|
await img.paste(await load_image(TALENT_ICON / f'{info.talents[i].icon}.png', size=(57, 57), mode='RGBA'), (588 + i * 176, 679))
|
||||||
await img.paste(talent_icon, (603, 298 + 147 * i))
|
|
||||||
|
|
||||||
# 命座
|
# 命座
|
||||||
lock = await load_image(ENKA_RES / '锁.png', mode='RGBA', size=(45, 45))
|
lock = await load_image(ENKA_RES / '锁.png', mode='RGBA', size=(45, 45))
|
||||||
t = 0
|
t = 0
|
||||||
for con in info.constellation:
|
for con in info.constellation:
|
||||||
await img.paste(base_icon.resize((83, 90)), (510 + t * 84, 790))
|
await img.paste(base_icon.resize((83, 90)), (510 + t * 84, 805))
|
||||||
con_icon = await load_image(TALENT_ICON / f'{con.icon}.png', size=(45, 45), mode='RGBA')
|
con_icon = await load_image(TALENT_ICON / f'{con.icon}.png', size=(45, 45), mode='RGBA')
|
||||||
await img.paste(con_icon, (529 + t * 84, 813))
|
await img.paste(con_icon, (529 + t * 84, 828))
|
||||||
t += 1
|
t += 1
|
||||||
for t2 in range(t, 6):
|
for t2 in range(t, 6):
|
||||||
await img.paste(base_icon_grey.resize((83, 90)), (510 + t2 * 84, 790))
|
await img.paste(base_icon_grey.resize((83, 90)), (510 + t2 * 84, 805))
|
||||||
await img.paste(lock, (530 + t2 * 84, 813))
|
await img.paste(lock, (530 + t2 * 84, 828))
|
||||||
|
|
||||||
# 武器
|
# 武器
|
||||||
weapon_bg = await load_image(ICON / f'star{info.weapon.rarity}.png', size=(150, 150))
|
weapon_bg = await load_image(ICON / f'star{info.weapon.rarity}.png', size=(150, 150))
|
||||||
await img.paste(weapon_bg, (91, 760))
|
await img.paste(weapon_bg, (59, 757))
|
||||||
weapon_icon = await load_image(WEAPON_ICON / f'{info.weapon.icon}.png', size=(150, 150), mode='RGBA')
|
weapon_icon = await load_image(WEAPON_ICON / f'{info.weapon.icon}.png', size=(150, 150), mode='RGBA')
|
||||||
await img.paste(weapon_icon, (91, 760))
|
await img.paste(weapon_icon, (59, 757))
|
||||||
await img.text(info.weapon.name, 268, 758, fm.get('hywh.ttf', 34))
|
await img.text(info.weapon.name, 254, 759, fm.get('hywh.ttf', 34))
|
||||||
|
|
||||||
star = await load_image(ENKA_RES / 'star.png')
|
star = await load_image(ENKA_RES / 'star.png')
|
||||||
for i in range(info.weapon.rarity):
|
for i in range(info.weapon.rarity):
|
||||||
await img.paste(star, (267 + i * 30, 799))
|
await img.paste(star, (254 + i * 30, 798))
|
||||||
await img.text(f'LV{info.weapon.level}',
|
await img.text(f'LV{info.weapon.level}',
|
||||||
(268, 268 + 98),
|
(254, 254 + 98),
|
||||||
(835, 864),
|
(834, 864),
|
||||||
fm.get('number.ttf', 27),
|
fm.get('number.ttf', 27),
|
||||||
'black',
|
'#0e2944',
|
||||||
'center')
|
'center')
|
||||||
await img.text(f'精炼{info.weapon.affix_level}阶', 266, 869, fm.get('hywh.ttf', 34))
|
await img.text(f'精炼{info.weapon.affix_level}阶', 254, 879, fm.get('hywh.ttf', 34))
|
||||||
|
|
||||||
# 圣遗物
|
# 圣遗物
|
||||||
effective = GenshinTools.get_effective(info)
|
effective = GenshinTools.get_effective(info)
|
||||||
average = GenshinTools.get_expect_score(effective)
|
average = GenshinTools.get_expect_score(effective)
|
||||||
total_score = 0
|
total_score = 0
|
||||||
# 第一排
|
w = 380
|
||||||
for i in range(2):
|
h = 937
|
||||||
try:
|
for artifact in info.artifacts:
|
||||||
artifact = info.artifacts[i]
|
artifact_bg = await load_image(ICON / f'star{artifact.rarity}.png', size=(93, 93))
|
||||||
except IndexError:
|
await img.paste(artifact_bg, (216 + w, 70 + h))
|
||||||
break
|
a_icon = await load_image(ARTIFACT_ICON / f'{artifact.icon}.png', size=(93, 93), mode='RGBA')
|
||||||
artifact_bg = await load_image(RESOURCE_BASE_PATH / 'other' / f'star{artifact.rarity}.png', size=(100, 100))
|
await img.paste(a_icon, (217 + w, 70 + h))
|
||||||
await img.paste(artifact_bg, (587 + 317 * i, 1002))
|
await img.text(artifact.name, 22 + w, 24 + h, fm.get('hywh.ttf', 36))
|
||||||
artifact_icon = await load_image(ARTIFACT_ICON / f'{artifact.icon}.png', size=(100, 100), mode='RGBA')
|
|
||||||
await img.paste(artifact_icon, (587 + 317 * i, 1002))
|
|
||||||
await img.text(artifact.name, 411 + 317 * i, 951, fm.get('hywh.ttf', 40))
|
|
||||||
value, score = GenshinTools.artifact_score(info.prop, artifact, effective)
|
value, score = GenshinTools.artifact_score(info.prop, artifact, effective)
|
||||||
total_score += value
|
total_score += value
|
||||||
rank = 'SSS' if score >= 140 else 'SS' if 120 <= score < 140 else 'S' if 100 <= score < 120 else 'A' if 75 <= score < 100 else 'B' if 50 <= score < 75 else 'C'
|
rank = 'SSS' if score >= 140 else 'SS' if 120 <= score < 140 else 'S' if 100 <= score < 120 else 'A' if 75 <= score < 100 else 'B' if 50 <= score < 75 else 'C'
|
||||||
await img.text(f'{rank}-{value}', 412 + 317 * i, 998, fm.get('number.ttf', 28))
|
await img.text(f'{rank}-{value}', 22 + w, 66 + h, fm.get('number.ttf', 28), '#ffde6b')
|
||||||
await img.paste(level_mask.resize((98, 30)), (412 + 317 * i, 1032))
|
await img.paste(level_mask.resize((98, 30)), (21 + w, 97 + h))
|
||||||
await img.text(f"LV{artifact.level}",
|
await img.text(f"+{artifact.level}",
|
||||||
(412 + 317 * i, 412 + 317 * i + 98),
|
(21 + w, 21 + w + 98),
|
||||||
(1032, 1062),
|
99 + h,
|
||||||
fm.get('number.ttf', 27),
|
fm.get('number.ttf', 27),
|
||||||
'black',
|
'black',
|
||||||
'center')
|
'center')
|
||||||
await img.text(artifact.main_property.name, 410 + 317 * i, 1069, fm.get('hywh.ttf', 25))
|
await img.text(artifact.main_property.name, 21 + w, 134 + h, fm.get('hywh.ttf', 25))
|
||||||
value_text = f'+{artifact.main_property.value}%' if artifact.main_property.name not in ['生命值', '攻击力', '元素精通'] else f'+{int(artifact.main_property.value)}'
|
value_text = f'+{artifact.main_property.value}%' if artifact.main_property.name not in ['生命值', '攻击力', '元素精通'] else f'+{int(artifact.main_property.value)}'
|
||||||
await img.text(value_text, 408 + 317 * i, 1100, font=fm.get('number.ttf', 48))
|
await img.text(value_text, 21 + w, 168 + h, font=fm.get('number.ttf', 48))
|
||||||
for j in range(len(artifact.prop_list)):
|
for j in range(len(artifact.prop_list)):
|
||||||
if '百分比' in artifact.prop_list[j].name:
|
if '百分比' in artifact.prop_list[j].name:
|
||||||
text = artifact.prop_list[j].name.replace('百分比', '')
|
text = artifact.prop_list[j].name.replace('百分比', '')
|
||||||
else:
|
else:
|
||||||
text = artifact.prop_list[j].name
|
text = artifact.prop_list[j].name
|
||||||
await img.text(text, 411 + 317 * i, 1163 + 50 * j,
|
await img.text(text, 21 + w, 230 + h + 50 * j,
|
||||||
color='white' if GenshinTools.check_effective(artifact.prop_list[j].name,
|
color='white' if GenshinTools.check_effective(artifact.prop_list[j].name,
|
||||||
effective) else '#afafaf',
|
effective) else '#afafaf',
|
||||||
font=fm.get('hywh.ttf', 25))
|
font=fm.get('hywh.ttf', 25))
|
||||||
@ -223,107 +220,67 @@ async def draw_chara_detail(uid: str, info: Character):
|
|||||||
num = '+' + str(artifact.prop_list[j].value) + '%'
|
num = '+' + str(artifact.prop_list[j].value) + '%'
|
||||||
else:
|
else:
|
||||||
num = '+' + str(int(artifact.prop_list[j].value))
|
num = '+' + str(int(artifact.prop_list[j].value))
|
||||||
await img.text(num, 679 + 317 * i, 1163 + 50 * j,
|
await img.text(num, 307 + w, 230 + h + 50 * j,
|
||||||
color='white' if GenshinTools.check_effective(artifact.prop_list[j].name,
|
color='white' if GenshinTools.check_effective(artifact.prop_list[j].name,
|
||||||
effective) else '#afafaf',
|
effective) else '#afafaf',
|
||||||
font=fm.get('number.ttf', 25), align='right')
|
font=fm.get('number.ttf', 25), align='right')
|
||||||
# 第二排
|
if info.artifacts.index(artifact) == 1:
|
||||||
for i in range(3):
|
w = 42
|
||||||
try:
|
h += 437
|
||||||
artifact = info.artifacts[i + 2]
|
|
||||||
except IndexError:
|
|
||||||
break
|
|
||||||
artifact_bg = await load_image(RESOURCE_BASE_PATH / 'other' / f'star{artifact.rarity}.png', size=(100, 100))
|
|
||||||
await img.paste(artifact_bg, (270 + 317 * i, 1439))
|
|
||||||
artifact_icon = await load_image(ARTIFACT_ICON / f'{artifact.icon}.png', size=(100, 100), mode='RGBA')
|
|
||||||
await img.paste(artifact_icon, (270 + 317 * i, 1439))
|
|
||||||
await img.text(artifact.name, 94 + 317 * i, 1388, fm.get('hywh.ttf', 40))
|
|
||||||
value, score = GenshinTools.artifact_score(info.prop, artifact, effective)
|
|
||||||
total_score += value
|
|
||||||
rank = 'SSS' if score >= 140 else 'SS' if 120 <= score < 140 else 'S' if 100 <= score < 120 else 'A' if 75 <= score < 100 else 'B' if 50 <= score < 75 else 'C'
|
|
||||||
await img.text(f'{rank}-{value}', 95 + 317 * i, 1435, fm.get('number.ttf', 28))
|
|
||||||
await img.paste(level_mask.resize((98, 30)), (95 + 317 * i, 1469))
|
|
||||||
await img.text(f"LV{artifact.level}",
|
|
||||||
(95 + 317 * i, 95 + 317 * i + 98),
|
|
||||||
(1469, 1499),
|
|
||||||
fm.get('number.ttf', 27),
|
|
||||||
'black',
|
|
||||||
'center')
|
|
||||||
await img.text(artifact.main_property.name, 94 + 317 * i, 1506, fm.get('hywh.ttf', 25))
|
|
||||||
value_text = f'+{artifact.main_property.value}%' if artifact.main_property.name not in ['生命值', '攻击力',
|
|
||||||
'元素精通'] else f'+{int(artifact.main_property.value)}'
|
|
||||||
await img.text(value_text, 91 + 317 * i, 1538, font=fm.get('number.ttf', 48))
|
|
||||||
for j in range(len(artifact.prop_list)):
|
|
||||||
if '百分比' in artifact.prop_list[j].name:
|
|
||||||
text = artifact.prop_list[j].name.replace('百分比', '')
|
|
||||||
else:
|
else:
|
||||||
text = artifact.prop_list[j].name
|
w += 338
|
||||||
await img.text(text, 94 + 317 * i, 1600 + 50 * j,
|
|
||||||
color='white' if GenshinTools.check_effective(artifact.prop_list[j].name,
|
|
||||||
effective) else '#afafaf',
|
|
||||||
font=fm.get('hywh.ttf', 25))
|
|
||||||
if artifact.prop_list[j].name not in ['攻击力', '防御力', '生命值', '元素精通']:
|
|
||||||
num = '+' + str(artifact.prop_list[j].value) + '%'
|
|
||||||
else:
|
|
||||||
num = '+' + str(int(artifact.prop_list[j].value))
|
|
||||||
await img.text(num, 362 + 317 * i, 1600 + 50 * j,
|
|
||||||
color='white' if GenshinTools.check_effective(artifact.prop_list[j].name,
|
|
||||||
effective) else '#afafaf',
|
|
||||||
font=fm.get('number.ttf', 25), align='right')
|
|
||||||
|
|
||||||
# 圣遗物评分
|
# 圣遗物评分
|
||||||
await img.text('总有效词条数', 119, 1057, color='#afafaf', font=fm.get('hywh.ttf', 36))
|
|
||||||
score_pro = total_score / (average * 5) * 100
|
score_pro = total_score / (average * 5) * 100
|
||||||
total_rank = 'SSS' if score_pro >= 140 else 'SS' if 120 <= score_pro < 140 else 'S' if 100 <= score_pro < 120 else 'A' if 75 <= score_pro < 100 else 'B' if 50 <= score_pro < 75 else 'C'
|
total_rank = 'SSS' if score_pro >= 140 else 'SS' if 120 <= score_pro < 140 else 'S' if 100 <= score_pro < 120 else 'A' if 75 <= score_pro < 100 else 'B' if 50 <= score_pro < 75 else 'C'
|
||||||
rank_icon = await load_image(ENKA_RES / f'评分{total_rank[0]}.png', mode='RGBA')
|
rank_icon = await load_image(ENKA_RES / f'评分{total_rank[0]}.png', mode='RGBA')
|
||||||
if len(total_rank) == 3:
|
if len(total_rank) == 3:
|
||||||
|
await img.paste(rank_icon, (65, 964))
|
||||||
|
await img.paste(rank_icon, (115, 964))
|
||||||
|
await img.paste(rank_icon, (165, 964))
|
||||||
|
await img.text(str(round(total_score, 1)), 220, 974, font=fm.get('number.ttf', 60))
|
||||||
|
elif len(total_rank) == 2:
|
||||||
await img.paste(rank_icon, (95, 964))
|
await img.paste(rank_icon, (95, 964))
|
||||||
await img.paste(rank_icon, (145, 964))
|
await img.paste(rank_icon, (145, 964))
|
||||||
await img.paste(rank_icon, (195, 964))
|
await img.text(str(round(total_score, 1)), 205, 974, font=fm.get('number.ttf', 60))
|
||||||
await img.text(str(round(total_score, 1)), 250, 974, font=fm.get('number.ttf', 60))
|
|
||||||
elif len(total_rank) == 2:
|
|
||||||
await img.paste(rank_icon, (125, 964))
|
|
||||||
await img.paste(rank_icon, (175, 964))
|
|
||||||
await img.text(str(round(total_score, 1)), 235, 974, font=fm.get('number.ttf', 60))
|
|
||||||
else:
|
else:
|
||||||
await img.paste(rank_icon, (143, 964))
|
await img.paste(rank_icon, (113, 964))
|
||||||
await img.text(str(round(total_score, 1)), 217, 974, font=fm.get('number.ttf', 60))
|
await img.text(str(round(total_score, 1)), 187, 974, font=fm.get('number.ttf', 60))
|
||||||
|
|
||||||
# 圣遗物套装
|
# 圣遗物套装
|
||||||
suit = GenshinTools.get_artifact_suit(info.artifacts)
|
suit = GenshinTools.get_artifact_suit(info.artifacts)
|
||||||
if not suit:
|
if not suit:
|
||||||
await img.text('未激活套装', 184, 1168, font=fm.get('hywh.ttf', 36))
|
await img.text('未激活套装', 154, 1168, font=fm.get('hywh.ttf', 36))
|
||||||
await img.text('未激活套装', 184, 1292, font=fm.get('hywh.ttf', 36))
|
await img.text('未激活套装', 154, 1292, font=fm.get('hywh.ttf', 36))
|
||||||
elif len(suit) == 1:
|
elif len(suit) == 1:
|
||||||
artifact1 = await load_image(ARTIFACT_ICON / f'{suit[0][1]}.png', size=(110, 110), mode='RGBA')
|
artifact1 = await load_image(ARTIFACT_ICON / f'{suit[0][1]}.png', size=(110, 110), mode='RGBA')
|
||||||
await img.paste(artifact1, (76, 1130))
|
await img.paste(artifact1, (46, 1130))
|
||||||
await img.text(f'{suit[0][0][:2]}二件套', 184, 1168, font=fm.get('hywh.ttf', 36))
|
await img.text(f'{suit[0][0][:2]}二件套', 154, 1168, font=fm.get('hywh.ttf', 36))
|
||||||
await img.text('未激活套装', 184, 1292, font=fm.get('hywh.ttf', 36))
|
await img.text('未激活套装', 154, 1292, font=fm.get('hywh.ttf', 36))
|
||||||
else:
|
else:
|
||||||
if suit[0][0] == suit[1][0]:
|
if suit[0][0] == suit[1][0]:
|
||||||
artifact2 = artifact1 = await load_image(ARTIFACT_ICON / f'{suit[0][1]}.png', size=(110, 110), mode='RGBA')
|
artifact2 = artifact1 = await load_image(ARTIFACT_ICON / f'{suit[0][1]}.png', size=(110, 110), mode='RGBA')
|
||||||
await img.text(f'{suit[0][0][:2]}四件套', 184, 1168, font=fm.get('hywh.ttf', 36))
|
await img.text(f'{suit[0][0][:2]}四件套', 154, 1168, font=fm.get('hywh.ttf', 36))
|
||||||
await img.text(f'{suit[0][0][:2]}四件套', 184, 1292, font=fm.get('hywh.ttf', 36))
|
await img.text(f'{suit[0][0][:2]}四件套', 154, 1292, font=fm.get('hywh.ttf', 36))
|
||||||
else:
|
else:
|
||||||
artifact1 = await load_image(ARTIFACT_ICON / f'{suit[0][1]}.png', size=(110, 110), mode='RGBA')
|
artifact1 = await load_image(ARTIFACT_ICON / f'{suit[0][1]}.png', size=(110, 110), mode='RGBA')
|
||||||
artifact2 = await load_image(ARTIFACT_ICON / f'{suit[1][1]}.png', size=(110, 110), mode='RGBA')
|
artifact2 = await load_image(ARTIFACT_ICON / f'{suit[1][1]}.png', size=(110, 110), mode='RGBA')
|
||||||
await img.text(f'{suit[0][0][:2]}两件套', 184, 1168, font=fm.get('hywh.ttf', 36))
|
await img.text(f'{suit[0][0][:2]}两件套', 154, 1168, font=fm.get('hywh.ttf', 36))
|
||||||
await img.text(f'{suit[1][0][:2]}两件套', 184, 1292, font=fm.get('hywh.ttf', 36))
|
await img.text(f'{suit[1][0][:2]}两件套', 154, 1292, font=fm.get('hywh.ttf', 36))
|
||||||
await img.paste(artifact1, (76, 1130))
|
await img.paste(artifact1, (46, 1130))
|
||||||
await img.paste(artifact2, (76, 1255))
|
await img.paste(artifact2, (46, 1255))
|
||||||
|
|
||||||
# 立绘
|
# 立绘
|
||||||
await img.paste(await load_image(ENKA_RES / '立绘' / f'{info.name}.png'), (695, 234))
|
|
||||||
await img.text(f'更新于{info.update_time.strftime("%m-%d %H:%M")}',
|
await img.text(f'更新于{info.update_time.strftime("%m-%d %H:%M")}',
|
||||||
(0, 1080),
|
(0, 1080),
|
||||||
(img.height - 110, img.height - 50),
|
(img.height - 123, img.height - 80),
|
||||||
fm.get('优设标题黑.ttf', 33),
|
fm.get('优设标题黑.ttf', 33),
|
||||||
'#afafaf',
|
'#afafaf',
|
||||||
'center')
|
'center')
|
||||||
await img.text('Created by LittlePaimon | Powered by Enka.Network',
|
await img.text('Created by LittlePaimon | Powered by Enka.Network',
|
||||||
(0, 1080),
|
(0, 1080),
|
||||||
(img.height - 60, img.height),
|
(img.height - 80, img.height - 40),
|
||||||
fm.get('优设标题黑.ttf', 36),
|
fm.get('优设标题黑.ttf', 33),
|
||||||
'white',
|
'white',
|
||||||
'center')
|
'center')
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
import difflib
|
import difflib
|
||||||
from typing import Union, Literal, List
|
from typing import Union, Literal, List, Optional
|
||||||
|
|
||||||
from .files import load_json
|
from .files import load_json
|
||||||
from LittlePaimon.config import JSON_DATA
|
from LittlePaimon.config import JSON_DATA
|
||||||
|
|
||||||
alias_file = load_json(JSON_DATA / 'alias.json')
|
alias_file = load_json(JSON_DATA / 'alias.json')
|
||||||
|
info_file = load_json(JSON_DATA / 'genshin_info.json')
|
||||||
|
|
||||||
|
|
||||||
def get_short_name(name: str) -> str:
|
def get_short_name(name: str) -> str:
|
||||||
@ -85,3 +86,31 @@ def get_match_alias(msg: str, type: Literal['角色', '武器', '原魔', '圣
|
|||||||
elif type == '原魔':
|
elif type == '原魔':
|
||||||
match_list = difflib.get_close_matches(msg, alias_list, cutoff=0.4, n=5)
|
match_list = difflib.get_close_matches(msg, alias_list, cutoff=0.4, n=5)
|
||||||
return match_list[0] if len(match_list) == 1 else match_list
|
return match_list[0] if len(match_list) == 1 else match_list
|
||||||
|
|
||||||
|
|
||||||
|
def get_icon(name: Optional[str] = None, chara_id: Optional[int] = None,
|
||||||
|
icon_type: Literal['avatar', 'card', 'splash', 'slice', 'side'] = 'avatar') -> Optional[str]:
|
||||||
|
"""
|
||||||
|
根据角色名字或id获取角色的图标
|
||||||
|
:param name: 角色名
|
||||||
|
:param chara_id:角色id
|
||||||
|
:param icon_type: 图标类型,有roles、weapons、monsters
|
||||||
|
:return: 图标字符串
|
||||||
|
"""
|
||||||
|
if name and not chara_id:
|
||||||
|
chara_id = get_id_by_name(name)
|
||||||
|
info = info_file.get(str(chara_id))
|
||||||
|
if not info:
|
||||||
|
return None
|
||||||
|
side_icon = info['SideIconName']
|
||||||
|
if icon_type == 'side':
|
||||||
|
return side_icon
|
||||||
|
elif icon_type == 'avatar':
|
||||||
|
return side_icon.replace('_Side', '')
|
||||||
|
elif icon_type == 'card':
|
||||||
|
return side_icon.replace('_Side', '') + '_Card'
|
||||||
|
elif icon_type == 'splash':
|
||||||
|
return side_icon.replace('Icon_Side', 'Img').replace('UI_', 'UI_Gacha_')
|
||||||
|
elif icon_type == 'slice':
|
||||||
|
return side_icon.replace('_Side', '').replace('UI_', 'UI_Gacha_')
|
||||||
|
|
||||||
|
@ -330,7 +330,7 @@ async def get_mihoyo_private_data(
|
|||||||
if await check_retcode(data, cookie_info, 'private', user_id, uid):
|
if await check_retcode(data, cookie_info, 'private', user_id, uid):
|
||||||
return data
|
return data
|
||||||
else:
|
else:
|
||||||
return 'cookie疑似失效'
|
return f'你的UID{uid}的cookie疑似失效了'
|
||||||
|
|
||||||
|
|
||||||
async def get_sign_reward_list() -> dict:
|
async def get_sign_reward_list() -> dict:
|
||||||
|
@ -180,7 +180,7 @@ def CommandPlayer(limit: int = 3, only_cn: bool = True) -> List[Player]:
|
|||||||
elif uid := await get_uid(event=event, user_id=user):
|
elif uid := await get_uid(event=event, user_id=user):
|
||||||
uids = [uid]
|
uids = [uid]
|
||||||
else:
|
else:
|
||||||
await matcher.finish('请把uid给我哦', at_sender=True)
|
await matcher.finish('第一次查询请把uid给我哦', at_sender=True)
|
||||||
extra_info = replace_all(extra_info, uids)
|
extra_info = replace_all(extra_info, uids)
|
||||||
for uid in uids:
|
for uid in uids:
|
||||||
query_list.append(Player(user_id=user, uid=uid))
|
query_list.append(Player(user_id=user, uid=uid))
|
||||||
@ -212,7 +212,7 @@ def CommandUID(only_cn: bool = True) -> str:
|
|||||||
elif uid := await get_uid(event=event):
|
elif uid := await get_uid(event=event):
|
||||||
uid = uid
|
uid = uid
|
||||||
else:
|
else:
|
||||||
await matcher.finish('请提供uid')
|
await matcher.finish('第一次查询请把UID给我哦')
|
||||||
state['msg'] = event.message.extract_plain_text().replace(uid, '')
|
state['msg'] = event.message.extract_plain_text().replace(uid, '')
|
||||||
return uid
|
return uid
|
||||||
|
|
||||||
@ -228,7 +228,7 @@ def CommandCharacter(limit: int = 3, replace_uid: bool = True) -> List[str]:
|
|||||||
|
|
||||||
async def _character(matcher: Matcher, state: T_State, msg: str = Arg('msg')):
|
async def _character(matcher: Matcher, state: T_State, msg: str = Arg('msg')):
|
||||||
if not msg:
|
if not msg:
|
||||||
await matcher.finish('请输入要查询的角色名称')
|
await matcher.finish('请给出要查询的角色名称')
|
||||||
character_list = []
|
character_list = []
|
||||||
characters = msg.split(' ')
|
characters = msg.split(' ')
|
||||||
for character_name in characters:
|
for character_name in characters:
|
||||||
@ -237,7 +237,7 @@ def CommandCharacter(limit: int = 3, replace_uid: bool = True) -> List[str]:
|
|||||||
character_list.append(list(character_match.keys())[0])
|
character_list.append(list(character_match.keys())[0])
|
||||||
msg.replace(character_name, '')
|
msg.replace(character_name, '')
|
||||||
if not character_list:
|
if not character_list:
|
||||||
await matcher.finish(f'没有名为{msg}的角色')
|
await matcher.finish(f'没有名为{msg}的角色!')
|
||||||
state['msg'] = msg
|
state['msg'] = msg
|
||||||
if len(character_list) > limit:
|
if len(character_list) > limit:
|
||||||
character_list = character_list[:limit]
|
character_list = character_list[:limit]
|
||||||
@ -246,7 +246,7 @@ def CommandCharacter(limit: int = 3, replace_uid: bool = True) -> List[str]:
|
|||||||
async def _character2(matcher: Matcher, state: T_State, msg: Message = CommandArg()):
|
async def _character2(matcher: Matcher, state: T_State, msg: Message = CommandArg()):
|
||||||
msg = msg.extract_plain_text().strip()
|
msg = msg.extract_plain_text().strip()
|
||||||
if not msg:
|
if not msg:
|
||||||
await matcher.finish('请输入角色名称')
|
await matcher.finish('请给出要查询的角色名称')
|
||||||
character_list = []
|
character_list = []
|
||||||
characters = msg.split(' ')
|
characters = msg.split(' ')
|
||||||
for character_name in characters:
|
for character_name in characters:
|
||||||
@ -255,7 +255,7 @@ def CommandCharacter(limit: int = 3, replace_uid: bool = True) -> List[str]:
|
|||||||
character_list.append(list(character_match.keys())[0])
|
character_list.append(list(character_match.keys())[0])
|
||||||
msg.replace(character_name, '')
|
msg.replace(character_name, '')
|
||||||
if not character_list:
|
if not character_list:
|
||||||
await matcher.finish(f'没有名为{msg}的角色')
|
await matcher.finish(f'没有名为{msg}的角色!')
|
||||||
state['msg'] = msg
|
state['msg'] = msg
|
||||||
if len(character_list) > limit:
|
if len(character_list) > limit:
|
||||||
character_list = character_list[:limit]
|
character_list = character_list[:limit]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user