mirror of
https://github.com/xuthus83/LittlePaimon.git
synced 2024-10-21 16:27:15 +08:00
✨ ys
探索度增加百分比环,增加原神数据自动更新时间配置项,增加删除别名
,修复ssbq
百分比环
This commit is contained in:
parent
783e4b8eb3
commit
a005ddd27b
@ -58,4 +58,8 @@ class Config(BaseModel):
|
|||||||
ssbq_end: int = Field(6, alias='实时便签停止检查结束时间')
|
ssbq_end: int = Field(6, alias='实时便签停止检查结束时间')
|
||||||
ssbq_check: int = Field(16, alias='实时便签检查间隔')
|
ssbq_check: int = Field(16, alias='实时便签检查间隔')
|
||||||
|
|
||||||
AI_voice_cooldown: int = Field(10, alias='原神AI语音合成冷却时间(秒)')
|
AI_voice_cooldown: int = Field(10, alias='原神语音合成冷却')
|
||||||
|
|
||||||
|
ys_auto_update: int = Field(24, alia='ys自动更新小时')
|
||||||
|
ysa_auto_update: int = Field(24, alia='ysa自动更新小时')
|
||||||
|
ysd_auto_update: int = Field(6, alia='ysd自动更新小时')
|
||||||
|
@ -28,7 +28,7 @@ async def draw_daily_note_card(data, uid):
|
|||||||
# 宝钱文字
|
# 宝钱文字
|
||||||
await bg_img.text(f"{data['current_home_coin']}/{data['max_home_coin']}", 337, 701, fm.get('number.ttf', 48),
|
await bg_img.text(f"{data['current_home_coin']}/{data['max_home_coin']}", 337, 701, fm.get('number.ttf', 48),
|
||||||
'white')
|
'white')
|
||||||
await bg_img.draw_ring((266, 266), (98, 369), percent=data['current_home_coin'] / data['max_home_coin'] if data['max_home_coin'] != 0 else 1, width=0.18, colors=['#507bd0', '#FFFFFF'])
|
await bg_img.draw_ring((266, 266), (98, 593), percent=(data['current_home_coin'] / data['max_home_coin']) if data['max_home_coin'] != 0 else 1, width=0.18, colors=['#507bd0', '#FFFFFF'])
|
||||||
if data['current_home_coin'] == data['max_home_coin']:
|
if data['current_home_coin'] == data['max_home_coin']:
|
||||||
await bg_img.text("洞天宝钱满了哦~", 820, 701, fm.get('优设标题黑.ttf', 40), 'white')
|
await bg_img.text("洞天宝钱满了哦~", 820, 701, fm.get('优设标题黑.ttf', 40), 'white')
|
||||||
else:
|
else:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from nonebot import on_command, on_regex
|
from nonebot import on_command, on_regex
|
||||||
from nonebot.adapters.onebot.v11 import Message, MessageEvent, MessageSegment
|
from nonebot.adapters.onebot.v11 import Message, MessageEvent, MessageSegment
|
||||||
from nonebot.params import Arg, RegexDict
|
from nonebot.params import Arg, RegexDict, CommandArg
|
||||||
from nonebot.plugin import PluginMetadata
|
from nonebot.plugin import PluginMetadata
|
||||||
|
|
||||||
from LittlePaimon import NICKNAME
|
from LittlePaimon import NICKNAME
|
||||||
@ -60,16 +60,24 @@ ysd = on_command('ysd', aliases={'角色详情', '角色信息', '角色面板'}
|
|||||||
})
|
})
|
||||||
update_info = on_command('udi', aliases={'更新角色信息', '更新面板', '更新玩家信息'}, priority=10, block=True, state={
|
update_info = on_command('udi', aliases={'更新角色信息', '更新面板', '更新玩家信息'}, priority=10, block=True, state={
|
||||||
'pm_name': 'udi',
|
'pm_name': 'udi',
|
||||||
'pm_description': '更新你的原神玩家和角色数据,绑定cookie后数据更详细',
|
'pm_description': '更新你的原神玩家和角色数据,绑定cookie后数据更详细,加上"天赋"可以更新天赋等级',
|
||||||
'pm_usage': '更新角色信息(uid)',
|
'pm_usage': '更新角色信息[天赋](uid)',
|
||||||
'pm_priority': 6
|
'pm_priority': 6
|
||||||
})
|
})
|
||||||
add_alias = on_regex(rf'((?P<chara>{CHARA_RE})是[我俺咱]的?(?P<alias>\w+))|([我俺咱]的?(?P<alias2>\w+)[是叫名](?P<chara2>{CHARA_RE}))', priority=10, block=True, state={
|
add_alias = on_regex(
|
||||||
|
rf'((?P<chara>{CHARA_RE})是[我俺咱]的?(?P<alias>\w+))|([我俺咱]的?(?P<alias2>\w+)[是叫名](?P<chara2>{CHARA_RE}))', priority=10,
|
||||||
|
block=True, state={
|
||||||
'pm_name': '角色别名设置',
|
'pm_name': '角色别名设置',
|
||||||
'pm_description': '设置专属于你的角色别名',
|
'pm_description': '设置专属于你的角色别名',
|
||||||
'pm_usage': '<角色名>是我<别名>',
|
'pm_usage': '<角色名>是我<别名>',
|
||||||
'pm_priority': 7
|
'pm_priority': 7
|
||||||
})
|
})
|
||||||
|
delete_alias = on_command('删除别名', priority=10, block=True, state={
|
||||||
|
'pm_name': '角色别名删除',
|
||||||
|
'pm_description': '删除你已设置的角色别名',
|
||||||
|
'pm_usage': '删除别名<别名>',
|
||||||
|
'pm_priority': 8
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
@ys.handle()
|
@ys.handle()
|
||||||
@ -97,6 +105,7 @@ async def _(event: MessageEvent, players=CommandPlayer()):
|
|||||||
|
|
||||||
running_ysa = []
|
running_ysa = []
|
||||||
|
|
||||||
|
|
||||||
@ysa.handle()
|
@ysa.handle()
|
||||||
async def _(event: MessageEvent, players=CommandPlayer(2)):
|
async def _(event: MessageEvent, players=CommandPlayer(2)):
|
||||||
logger.info('原神角色背包', '开始执行')
|
logger.info('原神角色背包', '开始执行')
|
||||||
@ -250,3 +259,13 @@ async def _(event: MessageEvent, regex_dict: dict = RegexDict()):
|
|||||||
alias = regex_dict['alias'] or regex_dict['alias2']
|
alias = regex_dict['alias'] or regex_dict['alias2']
|
||||||
await PlayerAlias.update_or_create(user_id=str(event.user_id), alias=alias, defaults={'character': chara})
|
await PlayerAlias.update_or_create(user_id=str(event.user_id), alias=alias, defaults={'character': chara})
|
||||||
await add_alias.finish(f'{NICKNAME}知道{chara}是你的{alias}啦..')
|
await add_alias.finish(f'{NICKNAME}知道{chara}是你的{alias}啦..')
|
||||||
|
|
||||||
|
|
||||||
|
@delete_alias.handle()
|
||||||
|
async def _(event: MessageEvent, msg: Message = CommandArg()):
|
||||||
|
msg = msg.extract_plain_text().strip()
|
||||||
|
if alias := await PlayerAlias.get_or_none(user_id=str(event.user_id), alias=msg):
|
||||||
|
await alias.delete()
|
||||||
|
await delete_alias.finish(f'别名{msg}删除成功!')
|
||||||
|
else:
|
||||||
|
await delete_alias.finish(f'你并没有将{msg}设置为某个角色的别名')
|
||||||
|
@ -73,18 +73,21 @@ async def draw_world_card(img: PMImage, info: PlayerWorldInfo):
|
|||||||
pass
|
pass
|
||||||
elif info.name == '蒙德':
|
elif info.name == '蒙德':
|
||||||
if info.unlock:
|
if info.unlock:
|
||||||
|
await img.draw_ring((225, 225), (89, 1157), 0.08, info.percent / 1000, ['white', (0, 0, 0, 0)])
|
||||||
await img.text(get_percent_text(info.percent), (110, 301), 1387, fm.get('hywh', 24), 'white', 'center')
|
await img.text(get_percent_text(info.percent), (110, 301), 1387, fm.get('hywh', 24), 'white', 'center')
|
||||||
await img.text(str(info.level) if info.level != 8 else 'Max', 150, 1447, fm.get('hywh', 24), 'white')
|
await img.text(str(info.level) if info.level != 8 else 'Max', 150, 1447, fm.get('hywh', 24), 'white')
|
||||||
else:
|
else:
|
||||||
await img.text('未解锁', (110, 301), 1387, fm.get('hywh', 24), 'white', 'center')
|
await img.text('未解锁', (110, 301), 1387, fm.get('hywh', 24), 'white', 'center')
|
||||||
elif info.name == '璃月':
|
elif info.name == '璃月':
|
||||||
if info.unlock:
|
if info.unlock:
|
||||||
|
await img.draw_ring((225, 225), (313, 1157), 0.08, info.percent / 1000, ['white', (0, 0, 0, 0)])
|
||||||
await img.text(get_percent_text(info.percent), (334, 525), 1387, fm.get('hywh', 24), 'white', 'center')
|
await img.text(get_percent_text(info.percent), (334, 525), 1387, fm.get('hywh', 24), 'white', 'center')
|
||||||
await img.text(str(info.level) if info.level != 8 else 'Max', 374, 1447, fm.get('hywh', 24), 'white')
|
await img.text(str(info.level) if info.level != 8 else 'Max', 374, 1447, fm.get('hywh', 24), 'white')
|
||||||
else:
|
else:
|
||||||
await img.text('未解锁', (334, 525), 1387, fm.get('hywh', 24), 'white', 'center')
|
await img.text('未解锁', (334, 525), 1387, fm.get('hywh', 24), 'white', 'center')
|
||||||
elif info.name == '稻妻':
|
elif info.name == '稻妻':
|
||||||
if info.unlock:
|
if info.unlock:
|
||||||
|
await img.draw_ring((225, 225), (537, 1157), 0.08, info.percent / 1000, ['white', (0, 0, 0, 0)])
|
||||||
await img.text(get_percent_text(info.percent), (558, 749), 1387, fm.get('hywh', 24), 'white', 'center')
|
await img.text(get_percent_text(info.percent), (558, 749), 1387, fm.get('hywh', 24), 'white', 'center')
|
||||||
await img.text(str(info.level) if info.level != 10 else 'Max', 598, 1447, fm.get('hywh', 24), 'white')
|
await img.text(str(info.level) if info.level != 10 else 'Max', 598, 1447, fm.get('hywh', 24), 'white')
|
||||||
await img.text(str(info.tree_level) if info.tree_level != 50 else 'Max', 710, 1447, fm.get('hywh', 24),
|
await img.text(str(info.tree_level) if info.tree_level != 50 else 'Max', 710, 1447, fm.get('hywh', 24),
|
||||||
@ -94,6 +97,7 @@ async def draw_world_card(img: PMImage, info: PlayerWorldInfo):
|
|||||||
await img.text('未解锁', (558, 749), 1387, fm.get('hywh', 24), 'white', 'center')
|
await img.text('未解锁', (558, 749), 1387, fm.get('hywh', 24), 'white', 'center')
|
||||||
elif info.name == '龙脊雪山':
|
elif info.name == '龙脊雪山':
|
||||||
if info.unlock:
|
if info.unlock:
|
||||||
|
await img.draw_ring((225, 225), (89, 1494), 0.08, info.percent / 1000, ['white', (0, 0, 0, 0)])
|
||||||
await img.text(get_percent_text(info.percent), (110, 301), 1724, fm.get('hywh', 24), 'white', 'center')
|
await img.text(get_percent_text(info.percent), (110, 301), 1724, fm.get('hywh', 24), 'white', 'center')
|
||||||
await img.text(str(info.tree_level) if info.tree_level != 12 else 'Max', 150, 1784, fm.get('hywh', 24),
|
await img.text(str(info.tree_level) if info.tree_level != 12 else 'Max', 150, 1784, fm.get('hywh', 24),
|
||||||
'white')
|
'white')
|
||||||
@ -110,6 +114,7 @@ async def draw_world_card(img: PMImage, info: PlayerWorldInfo):
|
|||||||
'center')
|
'center')
|
||||||
elif info.name == '层岩巨渊·地下矿区':
|
elif info.name == '层岩巨渊·地下矿区':
|
||||||
if info.unlock:
|
if info.unlock:
|
||||||
|
await img.draw_ring((225, 225), (313, 1494), 0.08, info.percent / 1000, ['white', (0, 0, 0, 0)])
|
||||||
await img.text(f'地下{get_percent_text(info.percent)}', (334, 525), 1751, fm.get('hywh', 24), 'white',
|
await img.text(f'地下{get_percent_text(info.percent)}', (334, 525), 1751, fm.get('hywh', 24), 'white',
|
||||||
'center')
|
'center')
|
||||||
else:
|
else:
|
||||||
@ -117,11 +122,13 @@ async def draw_world_card(img: PMImage, info: PlayerWorldInfo):
|
|||||||
'center')
|
'center')
|
||||||
elif info.name == '渊下宫':
|
elif info.name == '渊下宫':
|
||||||
if info.unlock:
|
if info.unlock:
|
||||||
|
await img.draw_ring((225, 225), (537, 1494), 0.08, info.percent / 1000, ['white', (0, 0, 0, 0)])
|
||||||
await img.text(get_percent_text(info.percent), (558, 749), 1724, fm.get('hywh', 24), 'white', 'center')
|
await img.text(get_percent_text(info.percent), (558, 749), 1724, fm.get('hywh', 24), 'white', 'center')
|
||||||
else:
|
else:
|
||||||
await img.text('未解锁', (558, 749), 1724, fm.get('hywh', 24), 'white', 'center')
|
await img.text('未解锁', (558, 749), 1724, fm.get('hywh', 24), 'white', 'center')
|
||||||
elif info.name == '须弥':
|
elif info.name == '须弥':
|
||||||
if info.unlock:
|
if info.unlock:
|
||||||
|
await img.draw_ring((225, 225), (761, 1157), 0.08, info.percent / 1000, ['white', (0, 0, 0, 0)])
|
||||||
await img.text(get_percent_text(info.percent), (782, 973), 1387, fm.get('hywh', 24), 'white', 'center')
|
await img.text(get_percent_text(info.percent), (782, 973), 1387, fm.get('hywh', 24), 'white', 'center')
|
||||||
await img.text(str(info.level) if info.level != 10 else 'Max', 826, 1447, fm.get('hywh', 24), 'white')
|
await img.text(str(info.level) if info.level != 10 else 'Max', 826, 1447, fm.get('hywh', 24), 'white')
|
||||||
await img.text(str(info.tree_level) if info.tree_level != 50 else 'Max', 938, 1447, fm.get('hywh', 24),
|
await img.text(str(info.tree_level) if info.tree_level != 50 else 'Max', 938, 1447, fm.get('hywh', 24),
|
||||||
@ -166,7 +173,9 @@ async def draw_player_card(player: Player, info: PlayerInfo, characters: List[Ch
|
|||||||
(0, 0, 0, 153), 'center') for name in home_name])
|
(0, 0, 0, 153), 'center') for name in home_name])
|
||||||
|
|
||||||
# 世界探索
|
# 世界探索
|
||||||
await asyncio.gather(*[draw_world_card(img, w) for w in info.world_explore.list()])
|
# await asyncio.gather(*[draw_world_card(img, w) for w in info.world_explore.list()])
|
||||||
|
for w in info.world_explore.list():
|
||||||
|
await draw_world_card(img, w)
|
||||||
|
|
||||||
# 角色
|
# 角色
|
||||||
await asyncio.gather(
|
await asyncio.gather(
|
||||||
|
@ -13,6 +13,7 @@ from LittlePaimon.utils.api import get_enka_data, get_mihoyo_public_data, get_mi
|
|||||||
from LittlePaimon.utils.typing import DataSourceType
|
from LittlePaimon.utils.typing import DataSourceType
|
||||||
from LittlePaimon.utils.alias import get_name_by_id
|
from LittlePaimon.utils.alias import get_name_by_id
|
||||||
from LittlePaimon.utils.typing import CHARACTERS
|
from LittlePaimon.utils.typing import CHARACTERS
|
||||||
|
from LittlePaimon.manager.plugin_manager import plugin_manager as pm
|
||||||
|
|
||||||
ra_score = load_json(JSON_DATA / 'score.json')
|
ra_score = load_json(JSON_DATA / 'score.json')
|
||||||
talent_map = load_json(JSON_DATA / 'role_skill.json')
|
talent_map = load_json(JSON_DATA / 'role_skill.json')
|
||||||
@ -95,6 +96,8 @@ class GenshinInfoManager:
|
|||||||
if len(character.constellation) >= 5:
|
if len(character.constellation) >= 5:
|
||||||
data[ra_score['Talent'][cname][1]]['level_current'] += 3
|
data[ra_score['Talent'][cname][1]]['level_current'] += 3
|
||||||
length = 4 if character.name in ['莫娜', '神里绫华'] else 3
|
length = 4 if character.name in ['莫娜', '神里绫华'] else 3
|
||||||
|
if character.name == '安柏':
|
||||||
|
data[0], data[2] = data[2], data[0]
|
||||||
character.talents = Talents(talent_list=[Talent(
|
character.talents = Talents(talent_list=[Talent(
|
||||||
name=t['name'],
|
name=t['name'],
|
||||||
level=t['level_current'],
|
level=t['level_current'],
|
||||||
@ -166,7 +169,7 @@ class GenshinInfoManager:
|
|||||||
if data_source == 'enka':
|
if data_source == 'enka':
|
||||||
"""如果角色不存在或者角色的更新时间在6小时前,则更新角色信息"""
|
"""如果角色不存在或者角色的更新时间在6小时前,则更新角色信息"""
|
||||||
character = await Character.get_or_none(**query, data_source='enka')
|
character = await Character.get_or_none(**query, data_source='enka')
|
||||||
if not character or character.update_time < (datetime.datetime.now() - datetime.timedelta(hours=6)).replace(
|
if not character or character.update_time < (datetime.datetime.now() - datetime.timedelta(hours=pm.config.ysd_auto_update)).replace(
|
||||||
tzinfo=pytz.timezone('Asia/Shanghai')):
|
tzinfo=pytz.timezone('Asia/Shanghai')):
|
||||||
await self.update_from_enka()
|
await self.update_from_enka()
|
||||||
if character := await Character.get_or_none(**query, data_source='enka'):
|
if character := await Character.get_or_none(**query, data_source='enka'):
|
||||||
@ -179,8 +182,8 @@ class GenshinInfoManager:
|
|||||||
elif data_source == 'mihoyo':
|
elif data_source == 'mihoyo':
|
||||||
return await Character.get_or_none(**query, data_source='mihoyo')
|
return await Character.get_or_none(**query, data_source='mihoyo')
|
||||||
else:
|
else:
|
||||||
characters = await Character.filter(**query).order_by('update_time')
|
characters = await Character.filter(**query).order_by('data_source')
|
||||||
return characters[-1] if characters else None
|
return characters[0] if characters else None
|
||||||
|
|
||||||
async def get_chara_bag(self) -> Tuple[Union[PlayerInfo, str], List[Character]]:
|
async def get_chara_bag(self) -> Tuple[Union[PlayerInfo, str], List[Character]]:
|
||||||
"""
|
"""
|
||||||
@ -190,7 +193,7 @@ class GenshinInfoManager:
|
|||||||
await self.set_last_query()
|
await self.set_last_query()
|
||||||
player_info = await PlayerInfo.get_or_none(user_id=self.user_id, uid=self.uid)
|
player_info = await PlayerInfo.get_or_none(user_id=self.user_id, uid=self.uid)
|
||||||
if player_info is None or player_info.update_time is None or player_info.update_time < (
|
if player_info is None or player_info.update_time is None or player_info.update_time < (
|
||||||
datetime.datetime.now() - datetime.timedelta(days=1)).replace(
|
datetime.datetime.now() - datetime.timedelta(hours=pm.config.ysa_auto_update)).replace(
|
||||||
tzinfo=pytz.timezone('Asia/Shanghai')):
|
tzinfo=pytz.timezone('Asia/Shanghai')):
|
||||||
result = await self.update_from_mihoyo()
|
result = await self.update_from_mihoyo()
|
||||||
if result != '更新成功':
|
if result != '更新成功':
|
||||||
@ -207,7 +210,7 @@ class GenshinInfoManager:
|
|||||||
await self.set_last_query()
|
await self.set_last_query()
|
||||||
player_info = await PlayerInfo.get_or_none(user_id=self.user_id, uid=self.uid)
|
player_info = await PlayerInfo.get_or_none(user_id=self.user_id, uid=self.uid)
|
||||||
if player_info is None or player_info.update_time is None or player_info.update_time < (
|
if player_info is None or player_info.update_time is None or player_info.update_time < (
|
||||||
datetime.datetime.now() - datetime.timedelta(days=1)).replace(
|
datetime.datetime.now() - datetime.timedelta(hours=pm.config.ys_auto_update)).replace(
|
||||||
tzinfo=pytz.timezone('Asia/Shanghai')):
|
tzinfo=pytz.timezone('Asia/Shanghai')):
|
||||||
result = await self.update_from_mihoyo()
|
result = await self.update_from_mihoyo()
|
||||||
if result != '更新成功':
|
if result != '更新成功':
|
||||||
@ -223,6 +226,7 @@ class GenshinInfoManager:
|
|||||||
|
|
||||||
async def get_abyss_info(self, abyss_index: int = 1) -> Union[AbyssInfo, str]:
|
async def get_abyss_info(self, abyss_index: int = 1) -> Union[AbyssInfo, str]:
|
||||||
await self.set_last_query()
|
await self.set_last_query()
|
||||||
|
await AbyssInfo.filter(user_id=self.user_id, uid=self.uid).delete()
|
||||||
result = await self.update_abyss_info(abyss_index)
|
result = await self.update_abyss_info(abyss_index)
|
||||||
if result != '更新成功':
|
if result != '更新成功':
|
||||||
return result
|
return result
|
||||||
|
Loading…
Reference in New Issue
Block a user