补充资源,fix bug

This commit is contained in:
CMHopeSunshine 2022-06-03 20:33:10 +08:00
parent 9b3ea61b74
commit 80fbee4ce4
7 changed files with 157 additions and 31 deletions

View File

@ -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))

View File

@ -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)

View File

@ -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()

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 KiB

View File

@ -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)

View File

@ -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]}

View File

@ -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]
}
}