mirror of
https://github.com/xuthus83/LittlePaimon.git
synced 2025-04-12 23:29:37 +08:00
补充资源,fix bug
This commit is contained in:
parent
9b3ea61b74
commit
80fbee4ce4
@ -18,7 +18,7 @@ from utils.db_util import get_auto_sign, delete_auto_sign, get_last_query
|
||||
from utils.db_util import insert_public_cookie, update_private_cookie, delete_cookie_cache, delete_private_cookie, \
|
||||
update_last_query, reset_public_cookie
|
||||
from utils.db_util import update_note_remind2, update_note_remind, get_note_remind, delete_note_remind, \
|
||||
update_day_remind_count, get_private_cookie, add_auto_sign
|
||||
update_day_remind_count, get_private_cookie, add_auto_sign, get_all_query
|
||||
from utils.auth_util import check_cookie, FreqLimiter
|
||||
from utils.decorator import exception_handler
|
||||
from utils.enka_util import PlayerInfo
|
||||
@ -32,7 +32,8 @@ from .get_data import get_bind_game, get_sign_info, sign, get_sign_list, get_aby
|
||||
from .get_data import get_monthinfo_data, get_player_card_data, get_chara_detail_data, get_chara_skill_data
|
||||
from .draw_role_card import draw_role_card
|
||||
|
||||
scheduler = require('nonebot_plugin_apscheduler').scheduler
|
||||
require('nonebot_plugin_apscheduler')
|
||||
from nonebot_plugin_apscheduler import scheduler
|
||||
|
||||
__usage__ = '''
|
||||
[ys (uid)]查看原神个人卡片(包含宝箱、探索度等数据)
|
||||
@ -69,7 +70,8 @@ ysc = on_command('ysc', aliases={'角色卡片'}, priority=7, block=True)
|
||||
ysb = on_command('ysb', aliases={'原神绑定', '绑定cookie'}, priority=7, block=True)
|
||||
mys_sign = on_command('mys_sign', aliases={'mys签到', '米游社签到'}, priority=7, block=True)
|
||||
mys_sign_auto = on_command('mys_sign_auto', aliases={'mys自动签到', '米游社自动签到'}, priority=7, block=True)
|
||||
mys_sign_all = on_command('mys_sign_all', aliases={'全部重签'}, priority=7, permission=SUPERUSER, rule=to_me(), block=True)
|
||||
mys_sign_all = on_command('mys_sign_all', aliases={'全部重签'}, priority=1, permission=SUPERUSER, rule=to_me(), block=True)
|
||||
update_all = on_command('update_all', aliases={'更新全部玩家'}, priority=1, permission=SUPERUSER, rule=to_me(), block=True)
|
||||
add_public_ck = on_command('add_ck', aliases={'添加公共cookie', '添加公共ck'}, permission=SUPERUSER, priority=7, block=True)
|
||||
delete_ck = on_command('delete_ck', aliases={'删除ck', '删除cookie'}, priority=7, block=True)
|
||||
update_info = on_command('udi', aliases={'更新角色信息', '更新角色面板', '更新玩家信息'}, priority=6, block=True)
|
||||
@ -424,6 +426,7 @@ async def mys_sign_auto_handler(event: MessageEvent, msg: Message = CommandArg()
|
||||
await add_auto_sign(str(event.user_id), uid, str(event.group_id))
|
||||
await mys_sign_auto.finish('开启米游社自动签到成功,派蒙会在每日0点帮你签到', at_sender=True)
|
||||
|
||||
|
||||
ud_lmt = FreqLimiter(300)
|
||||
ud_p_lmt = FreqLimiter(10)
|
||||
|
||||
@ -459,8 +462,8 @@ async def _(event: MessageEvent, state: T_State):
|
||||
await update_info.send('派蒙开始更新信息~请稍等哦~')
|
||||
enka_data = await get_enka_data(uid)
|
||||
if not enka_data:
|
||||
if uid[0] == '5':
|
||||
await update_info.finish('暂不支持查询B服账号哦~请等待开发者更新吧~')
|
||||
if uid[0] == '5' or uid[0] == '2':
|
||||
await update_info.finish('暂不支持B服和2开头的账号哦~请等待开发者更新吧~')
|
||||
else:
|
||||
await update_info.finish('派蒙没有查到该uid的信息哦~')
|
||||
ud_lmt.start_cd(uid, 300)
|
||||
@ -475,7 +478,7 @@ async def _(event: MessageEvent, state: T_State):
|
||||
player_info.set_role(role)
|
||||
player_info.save()
|
||||
role_list = list(player_info.get_update_roles_list().keys())
|
||||
await update_info.finish(f'uid{uid}更新完成~\n本次更新的角色有:\n' + ' '.join(role_list))
|
||||
await update_info.finish(f'uid{uid}更新完成~本次更新的角色有:\n' + ' '.join(role_list))
|
||||
|
||||
|
||||
@role_info.handle()
|
||||
@ -483,6 +486,7 @@ async def _(event: MessageEvent, state: T_State, msg: Message = CommandArg()):
|
||||
uid = re.search(r'(?P<uid>(1|2|5)\d{8})', msg.extract_plain_text())
|
||||
if uid:
|
||||
state['uid'] = uid.group('uid')
|
||||
await update_last_query(str(event.user_id), uid)
|
||||
else:
|
||||
user = ''
|
||||
for msg_seg in msg:
|
||||
@ -501,14 +505,13 @@ async def _(event: MessageEvent, state: T_State, msg: Message = CommandArg()):
|
||||
|
||||
|
||||
@role_info.got('uid', prompt='请把要查询的uid给派蒙哦~')
|
||||
@exception_handler()
|
||||
# @exception_handler()
|
||||
async def _(event: MessageEvent, state: T_State):
|
||||
uid = transform_uid(state['uid'])
|
||||
if uid:
|
||||
state['uid'] = uid
|
||||
else:
|
||||
await role_info.finish('这个uid不正确哦~,请检查一下', at_sender=True)
|
||||
await update_last_query(str(event.user_id), uid)
|
||||
uid = state['uid']
|
||||
role = state['role']
|
||||
player_info = PlayerInfo(uid)
|
||||
@ -526,7 +529,13 @@ async def sign_all():
|
||||
await auto_sign()
|
||||
|
||||
|
||||
@scheduler.scheduled_job('cron', hour=config.paimon_sign_hour, minute=config.paimon_sign_minute)
|
||||
@update_all.handle()
|
||||
async def update_all():
|
||||
res = await all_update()
|
||||
await update_all.finish(res)
|
||||
|
||||
|
||||
@scheduler.scheduled_job('cron', hour=config.paimon_sign_hour, minute=config.paimon_sign_minute, misfire_grace_time=10)
|
||||
async def auto_sign():
|
||||
data = await get_auto_sign()
|
||||
if data:
|
||||
@ -559,7 +568,7 @@ async def auto_sign():
|
||||
logger.error(f'米游社签到结果发送失败:{e}')
|
||||
|
||||
|
||||
@scheduler.scheduled_job('cron', minute=f'*/{config.paimon_check_interval}')
|
||||
@scheduler.scheduled_job('cron', minute=f'*/{config.paimon_check_interval}', misfire_grace_time=10)
|
||||
async def check_note():
|
||||
now_time = datetime.datetime.now()
|
||||
start_time = datetime.datetime(now_time.year, now_time.month, now_time.day, config.paimon_remind_start, 0, 0)
|
||||
@ -616,7 +625,7 @@ async def check_note():
|
||||
await sleep(3)
|
||||
|
||||
|
||||
@scheduler.scheduled_job('cron', hour=0)
|
||||
@scheduler.scheduled_job('cron', hour=0, misfire_grace_time=10)
|
||||
async def daily_update():
|
||||
logger.info('---清空今日树脂提醒限制---')
|
||||
await update_day_remind_count()
|
||||
@ -625,3 +634,26 @@ async def daily_update():
|
||||
logger.info('---清空今日cookie限制记录---')
|
||||
await reset_public_cookie()
|
||||
|
||||
|
||||
@scheduler.scheduled_job('cron', hour=3, misfire_grace_time=10)
|
||||
async def all_update():
|
||||
uid_list = await get_all_query()
|
||||
logger.info('派蒙开始更新用户角色信息,共{}个用户'.format(len(uid_list)))
|
||||
failed_time = 0
|
||||
for uid in uid_list:
|
||||
try:
|
||||
data = await get_enka_data(uid)
|
||||
if data:
|
||||
player_info = PlayerInfo(uid)
|
||||
player_info.set_player(data['playerInfo'])
|
||||
if 'avatarInfoList' in data:
|
||||
for role in data['avatarInfoList']:
|
||||
player_info.set_role(role)
|
||||
player_info.save()
|
||||
logger.info(f'---派蒙更新{uid}的角色信息成功---')
|
||||
await sleep(random.randint(8, 15))
|
||||
except Exception:
|
||||
failed_time += 1
|
||||
if failed_time > 5:
|
||||
break
|
||||
return '共{}个用户,更新完成'.format(len(uid_list))
|
||||
|
@ -98,9 +98,11 @@ async def draw_role_card(uid, data):
|
||||
font=get_font(34, 'number.ttf'))
|
||||
|
||||
# 天赋
|
||||
if data['名称'] in ['神里绫华', '莫娜']:
|
||||
data['天赋'].pop(2)
|
||||
for i in range(3):
|
||||
bg.alpha_composite(base_icon[data['元素']].resize((132, 142)), (564, 253 + 147 * i))
|
||||
bg_draw.text((520 if data['天赋'][i]['等级'] < 10 else 513, 310 + 147 * i), str(data['天赋'][i]['等级']), fill='black',
|
||||
bg_draw.text((520 if data['天赋'][i]['等级'] < 10 else 517, 310 + 147 * i), str(data['天赋'][i]['等级']), fill='black',
|
||||
font=get_font(34, 'number.ttf'))
|
||||
skill_icon = res_path2 / 'skill' / f'{data["天赋"][i]["图标"]}.png'
|
||||
skill_icon = await aiorequests.get_img(url=skill_url.format(data["天赋"][i]["图标"]), size=(57, 57), save_path=skill_icon)
|
||||
@ -153,7 +155,7 @@ async def draw_role_card(uid, data):
|
||||
bg_draw.text((408 + 317 * i, 1100), f"+{artifact['主属性']['属性值']}%", fill='white', font=get_font(25, 'number.ttf'))
|
||||
else:
|
||||
bg_draw.text((408 + 317 * i, 1100), f"+{artifact['主属性']['属性值']}", fill='white', font=get_font(48, 'number.ttf'))
|
||||
for j in range(4):
|
||||
for j in range(len(artifact['词条'])):
|
||||
if '百分比' in artifact['词条'][j]['属性名']:
|
||||
text = artifact['词条'][j]['属性名'].replace('百分比', '')
|
||||
else:
|
||||
@ -191,7 +193,7 @@ async def draw_role_card(uid, data):
|
||||
bg_draw.text((91 + 317 * i, 1537), f"+{artifact['主属性']['属性值']}%", fill='white', font=get_font(48, 'number.ttf'))
|
||||
else:
|
||||
bg_draw.text((91 + 317 * i, 1537), f"+{artifact['主属性']['属性值']}", fill='white', font=get_font(48, 'number.ttf'))
|
||||
for j in range(4):
|
||||
for j in range(len(artifact['词条'])):
|
||||
if '百分比' in artifact['词条'][j]['属性名']:
|
||||
text = artifact['词条'][j]['属性名'].replace('百分比', '')
|
||||
else:
|
||||
@ -219,25 +221,41 @@ async def draw_role_card(uid, data):
|
||||
for artifact in data['圣遗物']:
|
||||
suit.append(artifact['所属套装'])
|
||||
for s in suit:
|
||||
if s not in suit2 and suit.count(s) > 1:
|
||||
if suit.count(s) == 4:
|
||||
reli_path = res_path2 / 'reli' / f'{data["圣遗物"][0]["图标"]}.png'
|
||||
reli_path = await aiorequests.get_img(url=artifact_url.format(data["圣遗物"][0]["图标"]), size=(110, 110),
|
||||
save_path=reli_path)
|
||||
bg.alpha_composite(reli_path, (76, 1255))
|
||||
bg_draw.text((184, 1168), f'{s[:2]}四件套', fill='white', font=get_font(36))
|
||||
bg_draw.text((184, 1292), f'{s[:2]}四件套', fill='white', font=get_font(36))
|
||||
flag = True
|
||||
break
|
||||
if s not in suit2 and suit.count(s) == 2:
|
||||
suit2.append(s)
|
||||
reli_path = res_path2 / 'reli' / f'{data["圣遗物"][0]["图标"]}.png'
|
||||
reli_path = await aiorequests.get_img(url=artifact_url.format(data["圣遗物"][0]["图标"]), size=(110, 110), save_path=reli_path)
|
||||
bg.alpha_composite(reli_path, (76, 1130))
|
||||
if len(suit2) == 1:
|
||||
bg.alpha_composite(reli_path, (76, 1255))
|
||||
bg_draw.text((184, 1168), f'{suit2[0][:2]}四件套', fill='white', font=get_font(36))
|
||||
bg_draw.text((184, 1292), f'{suit2[0][:2]}四件套', fill='white', font=get_font(36))
|
||||
elif len(suit2) == 2:
|
||||
if len(suit2) == 2:
|
||||
bg_draw.text((184, 1168), f'{suit2[0][:2]}两件套', fill='white', font=get_font(36))
|
||||
bg_draw.text((184, 1292), f'{suit2[1][:2]}两件套', fill='white', font=get_font(36))
|
||||
suit2.pop(0)
|
||||
n = 0
|
||||
for r in data["圣遗物"]:
|
||||
if n == 2:
|
||||
break
|
||||
if r['所属套装'] in suit2:
|
||||
suit2.remove(r['所属套装'])
|
||||
reli_path = res_path2 / 'reli' / f'{r["图标"]}.png'
|
||||
reli_path = await aiorequests.get_img(url=artifact_url.format(r["图标"]), size=(110, 110),
|
||||
save_path=reli_path)
|
||||
bg.alpha_composite(reli_path, (76, 1130 + n * 125))
|
||||
n += 1
|
||||
elif len(suit2) == 1:
|
||||
bg_draw.text((184, 1168), f'{suit2[0][:2]}两件套', fill='white', font=get_font(36))
|
||||
bg_draw.text((184, 1292), '未激活套装', fill='white', font=get_font(36))
|
||||
for r in data["圣遗物"]:
|
||||
if r['所属套装'] in suit2:
|
||||
reli2_path = res_path2 / 'reli' / f'{r["图标"]}.png'
|
||||
reli2_path = await aiorequests.get_img(url=artifact_url.format(r["图标"]), size=(110, 110),
|
||||
save_path=reli2_path)
|
||||
bg.alpha_composite(reli2_path, (76, 1255))
|
||||
reli_path = res_path2 / 'reli' / f'{r["图标"]}.png'
|
||||
reli_path = await aiorequests.get_img(url=artifact_url.format(r["图标"]), size=(110, 110),
|
||||
save_path=reli_path)
|
||||
bg.alpha_composite(reli_path, (76, 1130))
|
||||
|
||||
break
|
||||
else:
|
||||
bg_draw.text((184, 1168), '未激活套装', fill='white', font=get_font(36))
|
||||
@ -251,7 +269,7 @@ async def draw_role_card(uid, data):
|
||||
else:
|
||||
bg.alpha_composite(load_image(path=paint_path), (695, 234))
|
||||
|
||||
bg_draw.text((50, 1870), f'更新于{data["更新时间"].replace("2022-", "")}', fill='#afafaf', font=get_font(36, '优设标题黑.ttf'))
|
||||
bg_draw.text((50, 1870), f'更新于{data["更新时间"].replace("2022-", "")}', fill='white', font=get_font(36, '优设标题黑.ttf'))
|
||||
bg_draw.text((560, 1869), 'Created by LittlePaimon', fill='white', font=get_font(36, '优设标题黑.ttf'))
|
||||
|
||||
return MessageBuild.Image(bg, quality=75)
|
||||
|
@ -225,8 +225,7 @@ async def get_sign_list():
|
||||
return data
|
||||
|
||||
|
||||
@cache(ttl=datetime.timedelta(minutes=5))
|
||||
async def get_enka_data(uid, use_cache=True):
|
||||
async def get_enka_data(uid):
|
||||
url = f'https://enka.shinshin.moe/u/{uid}/__data.json'
|
||||
resp = await aiorequests.get(url=url)
|
||||
data = resp.json()
|
||||
|
BIN
res/player_card2/立绘/八重神子.png
Normal file
BIN
res/player_card2/立绘/八重神子.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 350 KiB |
@ -239,6 +239,24 @@ async def update_last_query(user_id, value, key='uid'):
|
||||
conn.close()
|
||||
|
||||
|
||||
async def get_all_query():
|
||||
conn = sqlite3.connect(db_path)
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''CREATE TABLE IF NOT EXISTS last_query(
|
||||
user_id TEXT PRIMARY KEY NOT NULL,
|
||||
uid TEXT,
|
||||
mys_id TEXT,
|
||||
last_time datetime);''')
|
||||
cursor.execute('SELECT uid, last_time FROM last_query')
|
||||
uid_list = cursor.fetchall()
|
||||
uids = []
|
||||
for uid, last_time in uid_list:
|
||||
if (datetime.now() - datetime.strptime(last_time, '%Y-%m-%d %H:%M:%S')).days <= 3:
|
||||
uids.append(uid)
|
||||
conn.close()
|
||||
return uids
|
||||
|
||||
|
||||
# 获取树脂提醒信息
|
||||
async def get_note_remind():
|
||||
conn = sqlite3.connect(db_path)
|
||||
|
@ -48,6 +48,11 @@ class PlayerInfo:
|
||||
role_info['元素'] = role_element[role_name]
|
||||
|
||||
role_info['天赋'] = []
|
||||
if 'talentIdList' in data:
|
||||
if len(data['talentIdList']) >= 3:
|
||||
data['skillLevelMap'][list(data['skillLevelMap'].keys())[ra_score['Talent'][role_name][0]]] += 3
|
||||
if len(data['talentIdList']) >= 5:
|
||||
data['skillLevelMap'][list(data['skillLevelMap'].keys())[ra_score['Talent'][role_name][1]]] += 3
|
||||
for skill in data['skillLevelMap']:
|
||||
skill_detail = {'名称': role_skill['Name'][skill], '等级': data['skillLevelMap'][skill],
|
||||
'图标': role_skill['Icon'][skill]}
|
||||
|
@ -52,5 +52,59 @@
|
||||
"神里绫人": ["暴击率", "暴击伤害", "攻击力", "防御力"],
|
||||
"夜兰": ["暴击率", "暴击伤害", "生命值", "元素充能效率"],
|
||||
"久岐忍": ["暴击率", "暴击伤害", "攻击力", "元素充能效率"]
|
||||
},
|
||||
"Talent": {
|
||||
"胡桃": [1, 2],
|
||||
"托马": [1, 2],
|
||||
"宵宫": [1, 2],
|
||||
"烟绯": [1, 2],
|
||||
"可莉": [1, 2],
|
||||
"迪卢克": [1, 2],
|
||||
"辛焱": [1, 2],
|
||||
"安柏": [2, 1],
|
||||
"香菱": [2, 1],
|
||||
"班尼特": [1, 2],
|
||||
"珊瑚宫心海": [2, 1],
|
||||
"达达利亚": [1, 2],
|
||||
"行秋": [2, 1],
|
||||
"莫娜": [2, 1],
|
||||
"芭芭拉": [2, 1],
|
||||
"申鹤": [1, 2],
|
||||
"神里绫华": [3, 1],
|
||||
"优菈": [2, 1],
|
||||
"甘雨": [2, 1],
|
||||
"凯亚": [1, 2],
|
||||
"重云": [2, 1],
|
||||
"七七": [2, 1],
|
||||
"迪奥娜": [2, 1],
|
||||
"罗莎莉亚": [1, 2],
|
||||
"埃洛伊": [0, 0],
|
||||
"八重神子": [1, 2],
|
||||
"雷电将军": [2, 1],
|
||||
"九条裟罗": [2, 1],
|
||||
"刻晴": [2, 1],
|
||||
"雷泽": [2, 1],
|
||||
"菲谢尔": [1, 2],
|
||||
"丽莎": [2, 1],
|
||||
"北斗": [1, 2],
|
||||
"雷主": [1, 2],
|
||||
"早柚": [2, 1],
|
||||
"枫原万叶": [1, 2],
|
||||
"魈": [1, 2],
|
||||
"温迪": [2, 1],
|
||||
"琴": [2, 1],
|
||||
"砂糖": [1, 2],
|
||||
"风主": [1, 2],
|
||||
"荒泷一斗": [1, 2],
|
||||
"五郎": [1, 2],
|
||||
"阿贝多": [1, 2],
|
||||
"钟离": [1, 2],
|
||||
"诺艾尔": [1, 2],
|
||||
"凝光": [2, 1],
|
||||
"岩主": [1, 2],
|
||||
"云堇": [2, 1],
|
||||
"神里绫人": [1, 2],
|
||||
"夜兰": [2, 1],
|
||||
"久岐忍": [1, 2]
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user