mirror of
https://github.com/xuthus83/LittlePaimon.git
synced 2025-04-12 23:29:37 +08:00
ys、ysc、ysa、ys、攻略、材料等指令可以对话式查询
This commit is contained in:
parent
c04406ceb0
commit
972e39ff7c
@ -2,7 +2,7 @@ import os
|
||||
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
|
||||
from utils.character_alias import get_short_name
|
||||
from utils.alias_handler import get_short_name
|
||||
from utils.message_util import MessageBuild
|
||||
|
||||
res_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'res')
|
||||
|
@ -5,21 +5,22 @@ from asyncio import sleep
|
||||
from collections import defaultdict
|
||||
|
||||
from nonebot import on_command, require, logger, get_bot
|
||||
from nonebot.adapters.onebot.v11 import MessageEvent, Message, Bot
|
||||
from nonebot.adapters.onebot.v11 import MessageEvent, Message, Bot, MessageSegment
|
||||
from nonebot.params import CommandArg
|
||||
from nonebot.typing import T_State
|
||||
from nonebot.permission import SUPERUSER
|
||||
from nonebot.rule import to_me
|
||||
|
||||
from utils.character_alias import get_id_by_alias
|
||||
from utils.alias_handler import get_match_alias
|
||||
from utils.config import config
|
||||
from utils.db_util import get_auto_sign, delete_auto_sign
|
||||
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
|
||||
from utils.auth_util import check_cookie
|
||||
from utils.decorator import exception_handler
|
||||
from utils.message_util import get_uid_in_msg
|
||||
from utils.message_util import get_uid_in_msg, uid_userId_to_dict, replace_all, transform_uid
|
||||
from .draw_abyss_info import draw_abyss_card
|
||||
from .draw_daily_note import draw_daily_note_card
|
||||
from .draw_month_info import draw_monthinfo_card
|
||||
@ -70,26 +71,73 @@ delete_ck = on_command('delete_ck', aliases={'删除ck', '删除cookie'}, priori
|
||||
|
||||
|
||||
@sy.handle()
|
||||
@exception_handler()
|
||||
async def sy_handler(event: MessageEvent, msg: Message = CommandArg()):
|
||||
uid, msg, user_id, use_cache = await get_uid_in_msg(event, msg)
|
||||
if not uid:
|
||||
await sy.finish('请把正确的uid给派蒙哦,例如sy100123456!', at_sender=True)
|
||||
@ys.handle()
|
||||
@ysa.handle()
|
||||
@ysc.handle()
|
||||
async def _(event: MessageEvent, state: T_State, msg: Message = CommandArg()):
|
||||
state['use_cache'] = False if '-r' in msg.extract_plain_text() else True
|
||||
msg_text = msg.extract_plain_text().replace('-r', '').strip()
|
||||
if not msg:
|
||||
uid = await get_last_query(str(event.user_id))
|
||||
if uid:
|
||||
state['uid'] = uid
|
||||
state['user_id'] = str(event.user_id)
|
||||
else:
|
||||
uid_list = []
|
||||
check_uid = msg_text.split(' ')
|
||||
for check in check_uid:
|
||||
uid = re.search(r'(?P<uid>(1|2|5)\d{8})', check)
|
||||
if uid:
|
||||
uid_list.append(uid.group('uid'))
|
||||
msg_text = msg_text.replace(uid.group('uid'), '')
|
||||
state['user_id'] = str(event.user_id)
|
||||
if not uid_list:
|
||||
user_list = []
|
||||
for msg_seg in msg:
|
||||
if msg_seg.type == "at":
|
||||
user_list.append(msg_seg.data['qq'])
|
||||
if len(user_list) == 1:
|
||||
uid = await get_last_query(user_list[0])
|
||||
if uid:
|
||||
state['uid'] = uid
|
||||
state['user_id'] = user_list[0]
|
||||
elif user_list:
|
||||
state['uid'] = [await get_last_query(user) for user in user_list]
|
||||
state['user_id'] = user_list
|
||||
else:
|
||||
state['user_id'] = str(event.user_id)
|
||||
uid = await get_last_query(str(event.user_id))
|
||||
if uid:
|
||||
state['uid'] = uid
|
||||
else:
|
||||
state['uid'] = uid_list[0] if len(uid_list) == 1 else uid_list if uid_list else None
|
||||
if msg_text:
|
||||
state['msg'] = msg_text.strip()
|
||||
|
||||
|
||||
@sy.got('uid', prompt='请把要查询的uid给派蒙哦~')
|
||||
@exception_handler()
|
||||
async def _(event: MessageEvent, state: T_State):
|
||||
uid = transform_uid(state['uid'])
|
||||
if uid:
|
||||
state['uid'] = uid
|
||||
else:
|
||||
await ysa.finish('这个uid不正确哦~,请检查一下', at_sender=True)
|
||||
if 'msg' not in state:
|
||||
floor = []
|
||||
else:
|
||||
floor = msg.split(' ')
|
||||
true_floor = []
|
||||
for f in floor:
|
||||
if f.isdigit() and (9 <= int(f) <= 12) and len(true_floor) < 2:
|
||||
true_floor.append(int(f))
|
||||
floor = state['msg'].split(' ')
|
||||
true_floor = [int(f) for f in floor if f.isdigit() and (9 <= int(f) <= 12)]
|
||||
true_floor.sort()
|
||||
data = await get_abyss_data(user_id, uid, use_cache=use_cache)
|
||||
query_dict, total_result = uid_userId_to_dict(state['uid'], state['user_id'])
|
||||
for uid, user_id in query_dict.items():
|
||||
data = await get_abyss_data(user_id, uid, use_cache=state['use_cache'])
|
||||
if isinstance(data, str):
|
||||
await sy.finish(data, at_sender=True)
|
||||
total_result += MessageSegment.text(data + '\n')
|
||||
else:
|
||||
abyss_card = await draw_abyss_card(data, uid, true_floor)
|
||||
await sy.finish(abyss_card, at_sender=True)
|
||||
total_result += abyss_card
|
||||
await sy.finish(total_result, at_sender=True)
|
||||
|
||||
|
||||
@ssbq.handle()
|
||||
@ -151,62 +199,106 @@ async def myzj_handler(event: MessageEvent, msg: Message = CommandArg()):
|
||||
await myzj.finish(monthinfo_card, at_sender=True)
|
||||
|
||||
|
||||
@ys.handle()
|
||||
@ys.got('uid', prompt='请把要查询的uid给派蒙哦~')
|
||||
@exception_handler()
|
||||
async def ys_handler(bot: Bot, event: MessageEvent, msg: Message = CommandArg()):
|
||||
uid, msg, user_id, use_cache = await get_uid_in_msg(event, msg)
|
||||
if not uid:
|
||||
await ys.finish('请把正确的uid给派蒙哦,例如ys100123456!', at_sender=True)
|
||||
data = await get_player_card_data(user_id, uid, use_cache=use_cache)
|
||||
async def ys_handler(bot: Bot, event: MessageEvent, state: T_State):
|
||||
uid = transform_uid(state['uid'])
|
||||
if uid:
|
||||
state['uid'] = uid
|
||||
else:
|
||||
await ysa.finish('这个uid不正确哦~,请检查一下', at_sender=True)
|
||||
query_dict, total_result = uid_userId_to_dict(state['uid'], state['user_id'])
|
||||
for uid, user_id in query_dict.items():
|
||||
data = await get_player_card_data(user_id, uid, use_cache=state['use_cache'])
|
||||
if isinstance(data, str):
|
||||
await ys.finish(data, at_sender=True)
|
||||
total_result += MessageSegment.text(data + '\n')
|
||||
else:
|
||||
if event.message_type == 'group':
|
||||
user_info = await bot.get_group_member_info(group_id=event.group_id, user_id=int(user_id))
|
||||
nickname = user_info['card'] or user_info['nickname']
|
||||
else:
|
||||
nickname = event.sender.nickname
|
||||
chara_data = await get_chara_detail_data(user_id, uid, use_cache=use_cache)
|
||||
chara_data = await get_chara_detail_data(user_id, uid, use_cache=state['use_cache'])
|
||||
chara_data = None if isinstance(chara_data, str) else chara_data
|
||||
player_card = await draw_player_card(data, chara_data, uid, nickname)
|
||||
await ys.finish(player_card, at_sender=True)
|
||||
total_result += player_card
|
||||
await ys.finish(total_result, at_sender=True)
|
||||
|
||||
|
||||
@ysa.handle()
|
||||
@ysa.got('uid', prompt='请把要查询的uid给派蒙哦~')
|
||||
@exception_handler()
|
||||
async def ysa_handler(event: MessageEvent, msg: Message = CommandArg()):
|
||||
uid, msg, user_id, use_cache = await get_uid_in_msg(event, msg)
|
||||
if not uid:
|
||||
await ysa.finish('请把正确的uid给派蒙哦,例如ysa100123456!', at_sender=True)
|
||||
|
||||
chara_data = await get_chara_detail_data(user_id, uid, use_cache=use_cache)
|
||||
async def ysa_handler(event: MessageEvent, state: T_State):
|
||||
uid = transform_uid(state['uid'])
|
||||
if uid:
|
||||
state['uid'] = uid
|
||||
else:
|
||||
await ysa.finish('这个uid不正确哦~,请检查一下', at_sender=True)
|
||||
query_dict, total_result = uid_userId_to_dict(state['uid'], state['user_id'])
|
||||
for uid, user_id in query_dict.items():
|
||||
chara_data = await get_chara_detail_data(user_id, uid, use_cache=state['use_cache'])
|
||||
if isinstance(chara_data, str):
|
||||
await ysa.finish(chara_data, at_sender=True)
|
||||
total_result += MessageSegment.text(chara_data + '\n')
|
||||
else:
|
||||
player_card = await draw_all_chara_card(chara_data, uid)
|
||||
await ysa.finish(player_card, at_sender=True)
|
||||
total_result += player_card
|
||||
await ysa.finish(total_result, at_sender=True)
|
||||
|
||||
|
||||
@ysc.handle()
|
||||
@exception_handler()
|
||||
async def ysc_handler(event: MessageEvent, msg: Message = CommandArg()):
|
||||
uid, msg, user_id, use_cache = await get_uid_in_msg(event, msg)
|
||||
if not uid:
|
||||
await ysc.finish('请把正确的uid给派蒙哦,例如ysc100123456钟离', at_sender=True)
|
||||
if not msg:
|
||||
await ysc.finish(f'要把角色名给派蒙呀!例如ysc100123456钟离', at_sender=True)
|
||||
chara = msg.split(' ')[0]
|
||||
chara_name = get_id_by_alias(chara)
|
||||
if not chara_name:
|
||||
await ysc.finish(f'没有角色名叫{chara}哦!', at_sender=True)
|
||||
|
||||
chara_data = await get_chara_detail_data(user_id, uid, use_cache=use_cache)
|
||||
if isinstance(chara_data, str):
|
||||
await ysc.finish(chara_data, at_sender=True)
|
||||
@ysc.got('msg', prompt='请把要查询的角色名给派蒙哦~')
|
||||
async def _(event: MessageEvent, state: T_State):
|
||||
name = state['msg']
|
||||
if isinstance(name, Message):
|
||||
name = replace_all(name.extract_plain_text().strip().replace('ysc', ''), state['uid'])
|
||||
if name == 'q':
|
||||
await ysc.finish()
|
||||
match_alias = get_match_alias(name, 'roles', True)
|
||||
if len(match_alias) == 1:
|
||||
state['choice'] = match_alias
|
||||
else:
|
||||
skill_data = await get_chara_skill_data(uid, chara_name[0], use_cache=use_cache)
|
||||
chara_card = await draw_chara_card(chara_data, skill_data, chara_name, uid)
|
||||
await ysc.finish(chara_card, at_sender=True)
|
||||
if not match_alias:
|
||||
await ysc.finish(f'没有找到叫{name}的角色哦~', at_sender=True)
|
||||
elif 'choice' not in state:
|
||||
msg = f'你要找的角色是哪个呀:\n'
|
||||
# 将字典中每个键拼接到msg中,并添加序号
|
||||
msg += '\n'.join([f'{int(i) + 1}. {name}' for i, name in enumerate(match_alias)])
|
||||
await ysc.send(msg + '\n回答\"q\"可以取消查询', at_sender=True)
|
||||
state['match_alias'] = match_alias
|
||||
|
||||
|
||||
@ysc.got('choice')
|
||||
async def _(event: MessageEvent, state: T_State):
|
||||
choice = state['choice']
|
||||
if isinstance(choice, dict):
|
||||
# 获取字典的键
|
||||
role = list(choice.items())[0]
|
||||
else:
|
||||
match_alias = state['match_alias']
|
||||
choice = replace_all(choice.extract_plain_text().strip().replace('ysc', ''), state['uid'])
|
||||
|
||||
if choice == 'q':
|
||||
await ysc.finish()
|
||||
if choice.isdigit() and (1 <= int(choice) <= len(match_alias)):
|
||||
role = list(match_alias.items())[int(choice) - 1]
|
||||
elif choice not in match_alias.keys():
|
||||
state['times'] = state['times'] + 1 if 'times' in state else 1
|
||||
if state['times'] == 1:
|
||||
await ysc.reject(f'请旅行者从上面的角色中选一个问派蒙\n回答\"q\"可以取消查询', at_sender=True)
|
||||
elif state['times'] == 2:
|
||||
await ysc.reject(f'别调戏派蒙啦,快选一个吧,不想问了请回答\"q\"!', at_sender=True)
|
||||
elif state['times'] >= 3:
|
||||
await ysc.finish(f'看来旅行者您有点神志不清哦(,下次再问派蒙吧' + MessageSegment.face(146), at_sender=True)
|
||||
else:
|
||||
role = [m for m in list(match_alias.items()) if m[0] == choice][0]
|
||||
query_dict, total_result = uid_userId_to_dict(state['uid'], state['user_id'])
|
||||
for uid, user_id in query_dict.items():
|
||||
chara_data = await get_chara_detail_data(user_id, uid, use_cache=state['use_cache'])
|
||||
if isinstance(chara_data, str):
|
||||
total_result += MessageSegment.text(chara_data + '\n')
|
||||
else:
|
||||
skill_data = await get_chara_skill_data(uid, role[1], use_cache=state['use_cache'])
|
||||
chara_card = await draw_chara_card(chara_data, skill_data, role, uid)
|
||||
total_result += chara_card
|
||||
await ysc.finish(total_result, at_sender=True)
|
||||
|
||||
|
||||
cookie_error_msg = '这个cookie无效哦,请旅行者确认是否正确\n1.ck要登录mys帐号后获取,且不能退出登录\n2.ck中要有cookie_token和account_id两个参数\n3.建议在无痕模式下取'
|
||||
|
@ -79,14 +79,14 @@ async def draw_abyss_card(data, uid, floor_num):
|
||||
if not data:
|
||||
return '数据出错'
|
||||
if data['retcode'] == 10102:
|
||||
return '这uid没有在米游社公开信息哦'
|
||||
return f'uid{uid}没有在米游社公开信息哦'
|
||||
elif data['retcode'] == 10104:
|
||||
return 'uid有误哦,检查一下或再手动输入一次uid吧'
|
||||
return f'uid{uid}有误哦,检查一下吧'
|
||||
elif data['retcode'] != 0:
|
||||
return f'派蒙获取数据失败了,可能是以下原因:\n1.达到每日30次查询上限了\n2.绑定的cookie失效了\n3.没有在米游社公开信息\n{data["message"]},{data["retcode"]}'
|
||||
return f'派蒙获取{uid}数据失败了,可能是以下原因:\n1.达到每日30次查询上限了\n2.绑定的cookie失效了\n3.没有在米游社公开信息\n{data["message"]},{data["retcode"]}'
|
||||
data = data['data']
|
||||
if not data['defeat_rank']:
|
||||
return '没有深渊数据,请打了8-3之后的层数再来!'
|
||||
return f'uid{uid}没有深渊数据,请打了8-3之后的层数再来!'
|
||||
total_star = '['
|
||||
for d in data['floors']:
|
||||
if not d['levels']:
|
||||
|
@ -35,11 +35,11 @@ async def draw_daily_note_card(data, uid):
|
||||
if not data:
|
||||
return '数据出错'
|
||||
if data['retcode'] == 10102:
|
||||
return '这uid没有在米游社公开信息哦,请到 个人主页-管理 中打开'
|
||||
return f'uid{uid}没有在米游社公开信息哦,请到 个人主页-管理 中打开'
|
||||
elif data['retcode'] == 10104:
|
||||
return 'uid有误哦,检查一下或再手动输入一次uid吧'
|
||||
return f'uid{uid}有误哦,检查一下或再手动输入一次uid吧'
|
||||
elif data['retcode'] != 0:
|
||||
return f'派蒙获取数据失败了,获取状态:\n{data["message"]},{data["retcode"]}'
|
||||
return f'派蒙获取{uid}数据失败了,获取状态:\n{data["message"]},{data["retcode"]}'
|
||||
data = data['data']
|
||||
circle_img = load_image(os.path.join(res_path, 'daily_note', '透明圆.png'))
|
||||
finished_icon = load_image(os.path.join(res_path, 'daily_note', 'finished.png'))
|
||||
|
@ -186,11 +186,11 @@ async def draw_player_card(data, chara_data, uid, nickname="旅行者"):
|
||||
if not data:
|
||||
return '数据出错'
|
||||
if data['retcode'] == 10102:
|
||||
return '这uid没有在米游社公开信息哦,请到 个人主页-管理 中打开'
|
||||
return f'uid{uid}没有在米游社公开信息哦,请到 个人主页-管理 中打开'
|
||||
elif data['retcode'] == 10104:
|
||||
return 'uid有误哦,检查一下或再手动输入一次uid吧'
|
||||
return f'uid{uid}有误哦,检查一下吧'
|
||||
elif data['retcode'] != 0:
|
||||
return f'派蒙获取数据失败了,获取状态:\n{data["message"]},{data["retcode"]}'
|
||||
return f'派蒙获取{uid}数据失败了,获取状态:\n{data["message"]},{data["retcode"]}'
|
||||
data = data['data']
|
||||
bg_img = load_image(os.path.join(res_path, 'player_card', '背景.png'), mode='RGBA')
|
||||
bg_draw = ImageDraw.Draw(bg_img)
|
||||
@ -243,7 +243,7 @@ async def draw_player_card(data, chara_data, uid, nickname="旅行者"):
|
||||
elif i > 8:
|
||||
break
|
||||
else:
|
||||
nocha = '*这uid关闭了角色详情显示,派蒙看不到哦'
|
||||
nocha = f'*uid{uid}关闭了角色详情显示,派蒙看不到哦'
|
||||
return MessageBuild.Image(bg_img, quality=80) + MessageBuild.Text(nocha)
|
||||
|
||||
|
||||
@ -285,11 +285,11 @@ async def draw_all_chara_card(data, uid):
|
||||
if not data:
|
||||
return '数据出错'
|
||||
if data['retcode'] == 10102:
|
||||
return '这uid没有在米游社公开信息哦,请到 个人主页-管理 中打开'
|
||||
return f'uid{uid}没有在米游社公开信息哦,请到 个人主页-管理 中打开'
|
||||
elif data['retcode'] == 10104:
|
||||
return 'uid有误哦,检查一下或再手动输入一次uid吧'
|
||||
return f'uid{uid}有误哦,检查一下吧'
|
||||
elif data['retcode'] != 0:
|
||||
return f'派蒙获取数据失败了,获取状态:\n{data["message"]},{data["retcode"]}'
|
||||
return f'派蒙获取{uid}数据失败了,获取状态:\n{data["message"]},{data["retcode"]}'
|
||||
data = data['data']['avatars']
|
||||
chara_num = len(data)
|
||||
col = int(chara_num / 4)
|
||||
@ -368,22 +368,22 @@ async def draw_line(p):
|
||||
|
||||
async def draw_chara_card(data, skill_data, chara_name, uid):
|
||||
if not data:
|
||||
return '数据出错'
|
||||
return f'{uid}数据出错'
|
||||
if data['retcode'] == 10102:
|
||||
return '这uid没有在米游社公开信息哦,请到 个人主页-管理 中打开'
|
||||
return f'uid{uid}没有在米游社公开信息哦,请到 个人主页-管理 中打开'
|
||||
elif data['retcode'] == 10104:
|
||||
return 'uid有误哦,检查一下或再手动输入一次uid吧'
|
||||
return f'uid{uid}有误哦,检查一下吧'
|
||||
elif data['retcode'] != 0:
|
||||
return f'派蒙获取数据失败了,获取状态:\n{data["message"]},{data["retcode"]}'
|
||||
return f'派蒙获取{uid}数据失败了,获取状态:\n{data["message"]},{data["retcode"]}'
|
||||
data = data['data']['avatars']
|
||||
f = False
|
||||
for chara in data:
|
||||
if chara['id'] == chara_name[0] or (chara_name[1][-1] == '旅行者' and chara['name'] == '旅行者'):
|
||||
if chara['id'] == int(chara_name[1]) or (chara_name[0] in ['空', '荧'] and chara['name'] == '旅行者'):
|
||||
character = chara
|
||||
f = True
|
||||
break
|
||||
if not f:
|
||||
return f'{chara_name[1][0]}不在你公开的8个角色中或你没有这个角色哦'
|
||||
return f'{chara_name[0]}不在{uid}公开的8个角色中或没有这个角色哦'
|
||||
# 立绘
|
||||
bg_img = load_image(os.path.join(res_path, 'name_card', f'{character["id"]}.png'))
|
||||
bg_draw = ImageDraw.Draw(bg_img)
|
||||
|
@ -7,10 +7,9 @@ from nonebot.adapters.onebot.v11 import MessageEvent, Message, MessageSegment
|
||||
from nonebot.params import RegexDict
|
||||
from nonebot.typing import T_State
|
||||
|
||||
from utils.character_alias import get_id_by_alias
|
||||
from utils.decorator import exception_handler
|
||||
from utils.message_util import MessageBuild, match_alias
|
||||
from .abyss_rate_draw import draw_rate_rank, draw_teams_rate
|
||||
from utils.alias_handler import get_match_alias
|
||||
from utils.message_util import MessageBuild
|
||||
# from .abyss_rate_draw import draw_rate_rank, draw_teams_rate
|
||||
from .blue import get_blue_pic
|
||||
|
||||
__usage__ = '''
|
||||
@ -23,7 +22,7 @@ __usage__ = '''
|
||||
6.[深渊登场率]查看2.6深渊角色登场率
|
||||
7.[深渊上半/下半阵容出场率]查看2.6深渊阵容出场率
|
||||
'''
|
||||
__help_version__ = '1.0.2'
|
||||
__help_version__ = '1.0.4'
|
||||
|
||||
res_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'res')
|
||||
|
||||
@ -38,59 +37,20 @@ weapon_guide = on_endswith('武器攻略', priority=6, block=True)
|
||||
monster_map = on_endswith('原魔图鉴', priority=6, block=True)
|
||||
|
||||
|
||||
@guide.handle()
|
||||
@exception_handler()
|
||||
async def genshin_guide(event: MessageEvent):
|
||||
name: str = event.message.extract_plain_text().replace('角色攻略', '').strip()
|
||||
realname = get_id_by_alias(name)
|
||||
if name in ['风主', '岩主', '雷主'] or realname:
|
||||
name = realname[1][0] if name not in ['风主', '岩主', '雷主'] else name
|
||||
await guide.finish(await MessageBuild.StaticImage(url=f'LittlePaimon/XFGuide/{name}.jpg'))
|
||||
else:
|
||||
await guide.finish(f'没有找到{name}的攻略', at_sender=True)
|
||||
|
||||
|
||||
@material.handle()
|
||||
@exception_handler()
|
||||
async def genshin_material(event: MessageEvent):
|
||||
name: str = event.message.extract_plain_text().replace('角色材料', '').strip()
|
||||
realname = get_id_by_alias(name)
|
||||
if name in ['夜兰', '久岐忍', '鹿野院平藏'] or realname:
|
||||
name = realname[1][0] if realname else name
|
||||
await material.finish(await MessageBuild.StaticImage(f'LittlePaimon/RoleMaterials/{name}材料.jpg'))
|
||||
else:
|
||||
await material.finish(f'没有找到{name}的材料', at_sender=True)
|
||||
|
||||
|
||||
@attribute.handle()
|
||||
@exception_handler()
|
||||
async def genshinAttribute(event: MessageEvent):
|
||||
name: str = event.message.extract_plain_text().replace('参考面板', '').strip()
|
||||
realname = get_id_by_alias(name)
|
||||
if name in ['风主', '岩主', '雷主'] or realname:
|
||||
name = realname[1][0] if name not in ['风主', '岩主', '雷主'] else name
|
||||
img = await get_blue_pic(name)
|
||||
name = event.message.extract_plain_text().replace('参考面板', '').strip()
|
||||
realname = get_match_alias(name)
|
||||
if realname:
|
||||
img = await get_blue_pic(realname)
|
||||
await attribute.finish(img)
|
||||
else:
|
||||
await attribute.finish(f'没有找到{name}的参考面板', at_sender=True)
|
||||
|
||||
|
||||
@attribute2.handle()
|
||||
@exception_handler()
|
||||
async def genshinAttribute2(event: MessageEvent):
|
||||
name: str = event.message.extract_plain_text().replace('收益曲线', '').strip()
|
||||
realname = get_id_by_alias(name)
|
||||
if name in ['风主', '岩主', '雷主'] or realname:
|
||||
name = realname[1][0] if name not in ['风主', '岩主', '雷主'] else name
|
||||
await attribute2.finish(await MessageBuild.StaticImage(url=f'LittlePaimon/blue/{name}.jpg'))
|
||||
else:
|
||||
await attribute2.finish(f'没有找到{name}的收益曲线', at_sender=True)
|
||||
|
||||
|
||||
@daily_material.handle()
|
||||
@exception_handler()
|
||||
async def daily_material_handle(event: MessageEvent):
|
||||
week: str = event.message.extract_plain_text().replace('材料', '').replace('天赋材料', '').replace('突破材料', '').strip()
|
||||
week = event.message.extract_plain_text().replace('材料', '').replace('天赋材料', '').replace('突破材料', '').strip()
|
||||
if week:
|
||||
find_week = re.search(r'(?P<week>今日|今天|现在|明天|明日|后天|后日|周一|周二|周三|周四|周五|周六|周日)', week)
|
||||
if find_week:
|
||||
@ -119,22 +79,20 @@ async def daily_material_handle(event: MessageEvent):
|
||||
await daily_material.finish(await MessageBuild.StaticImage(url=url))
|
||||
|
||||
|
||||
@abyss_rate.handle()
|
||||
@exception_handler()
|
||||
async def abyss_rate_handler(event: MessageEvent):
|
||||
abyss_img = await draw_rate_rank()
|
||||
await abyss_rate.finish(abyss_img)
|
||||
# @abyss_rate.handle()
|
||||
# async def abyss_rate_handler(event: MessageEvent):
|
||||
# abyss_img = await draw_rate_rank()
|
||||
# await abyss_rate.finish(abyss_img)
|
||||
#
|
||||
#
|
||||
# @abyss_team.handle()
|
||||
# async def abyss_team_handler(event: MessageEvent, reGroup=RegexDict()):
|
||||
# abyss_img = await draw_teams_rate(reGroup['floor'])
|
||||
# await abyss_team.finish(abyss_img)
|
||||
|
||||
|
||||
@abyss_team.handle()
|
||||
@exception_handler()
|
||||
async def abyss_team_handler(event: MessageEvent, reGroup=RegexDict()):
|
||||
abyss_img = await draw_teams_rate(reGroup['floor'])
|
||||
await abyss_team.finish(abyss_img)
|
||||
|
||||
|
||||
def create_choice_command(endswith: str, type_: str, url: str, file_type: str = 'jpg'):
|
||||
command = on_endswith(endswith, priority=6, block=False)
|
||||
def create_choice_command(endswith: str, type_: str, url: str, exclude: list = []):
|
||||
command = on_endswith(endswith, priority=6, block=True)
|
||||
|
||||
@command.handle()
|
||||
async def _(event: MessageEvent, state: T_State):
|
||||
@ -149,39 +107,45 @@ def create_choice_command(endswith: str, type_: str, url: str, file_type: str =
|
||||
name = name.extract_plain_text().strip()
|
||||
if name == 'q':
|
||||
await command.finish()
|
||||
finally_name = await match_alias(name, type_)
|
||||
if isinstance(finally_name, str):
|
||||
await command.finish(await MessageBuild.StaticImage(url=url + finally_name + '.' + file_type))
|
||||
elif isinstance(finally_name, list):
|
||||
if not finally_name:
|
||||
await command.finish(f'没有该{endswith[0:2]}的信息哦,问一个别的吧~')
|
||||
match_alias = get_match_alias(name, type_)
|
||||
if isinstance(match_alias, str) and match_alias not in exclude:
|
||||
await command.finish(await MessageBuild.StaticImage(url=url.format(match_alias)))
|
||||
else:
|
||||
if not match_alias or match_alias in exclude:
|
||||
await command.finish(f'没有{state["name"]}的{endswith}哦~', at_sender=True)
|
||||
else:
|
||||
if isinstance(match_alias, dict):
|
||||
match_alias = list(match_alias.keys())
|
||||
if 'choice' not in state:
|
||||
msg = f'你要找的{endswith[0:2]}是哪个呀:\n'
|
||||
msg += '\n'.join([f'{int(i) + 1}. {name}' for i, name in enumerate(finally_name)])
|
||||
await command.send(msg + '\n回答\"q\"可以取消查询')
|
||||
state['match_alias'] = finally_name
|
||||
msg += '\n'.join([f'{int(i) + 1}. {name}' for i, name in enumerate(match_alias)])
|
||||
await command.send(msg + '\n回答\"q\"可以取消查询', at_sender=True)
|
||||
state['match_alias'] = match_alias
|
||||
|
||||
@command.got('choice')
|
||||
async def _(event: MessageEvent, state: T_State):
|
||||
match_alias = state['match_alias']
|
||||
choice = state['choice']
|
||||
choice = choice.extract_plain_text().strip()
|
||||
choice = choice.extract_plain_text().strip().replace(endswith, '')
|
||||
if choice == 'q':
|
||||
await command.finish()
|
||||
if choice.isdigit() and (1 <= int(choice) <= len(match_alias)):
|
||||
await command.finish(
|
||||
await MessageBuild.StaticImage(url=url + match_alias[int(choice) - 1] + '.' + file_type))
|
||||
await MessageBuild.StaticImage(url=url.format(match_alias[int(choice) - 1])))
|
||||
if choice not in match_alias:
|
||||
state['times'] = state['times'] + 1 if 'times' in state else 1
|
||||
if state['times'] >= 3:
|
||||
await command.finish(f'看来旅行者您有点神志不清哦(,下次再问派蒙吧' + MessageSegment.face(146))
|
||||
elif state['times'] == 1:
|
||||
await command.reject(f'请旅行者从上面的{endswith[0:2]}中选一个问派蒙\n回答\"q\"可以取消查询')
|
||||
if state['times'] == 1:
|
||||
await command.reject(f'请旅行者从上面的{endswith[0:2]}中选一个问派蒙\n回答\"q\"可以取消查询', at_sender=True)
|
||||
elif state['times'] == 2:
|
||||
await command.reject(f'别调戏派蒙啦,快选一个吧,不想问了麻烦回答\"q\"!')
|
||||
await command.finish(await MessageBuild.StaticImage(url=url + choice + '.' + file_type))
|
||||
await command.reject(f'别调戏派蒙啦,快选一个吧,不想问了请回答\"q\"!', at_sender=True)
|
||||
elif state['times'] >= 3:
|
||||
await command.finish(f'看来旅行者您有点神志不清哦(,下次再问派蒙吧' + MessageSegment.face(146), at_sender=True)
|
||||
await command.finish(await MessageBuild.StaticImage(url=url.format(choice)))
|
||||
|
||||
|
||||
create_choice_command('原魔图鉴', 'monsters', 'LittlePaimon/MonsterMaps/', 'jpg')
|
||||
create_choice_command('武器攻略', 'weapons', 'LittlePaimon/WeaponGuild/', 'png')
|
||||
create_choice_command('原魔图鉴', 'monsters', 'LittlePaimon/MonsterMaps/{}.jpg')
|
||||
create_choice_command('武器攻略', 'weapons', 'LittlePaimon/WeaponGuild/{}.png')
|
||||
create_choice_command('角色攻略', 'roles', 'LittlePaimon/XFGuide/{}.jpg', ['夜兰', '久岐忍', '鹿野院平藏'])
|
||||
create_choice_command('角色材料', 'roles', 'LittlePaimon/RoleMaterials/{}材料.jpg')
|
||||
create_choice_command('收益曲线', 'roles', 'LittlePaimon/blue/{}.jpg', ['神里绫人', '夜兰', '久岐忍', '鹿野院平藏'])
|
||||
|
||||
|
@ -2,7 +2,7 @@ import os
|
||||
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
|
||||
from utils.character_alias import get_id_by_alias
|
||||
from utils.alias_handler import get_id_by_alias
|
||||
from utils.message_util import MessageBuild
|
||||
from .abyss_rate_data import get_rate, get_formation_rate
|
||||
|
||||
|
@ -57,7 +57,7 @@ blue = {
|
||||
|
||||
|
||||
async def get_blue_pic(name):
|
||||
for c in blue.items():
|
||||
if c[0] == name:
|
||||
return await MessageBuild.StaticImage(url=f'LittlePaimon/blue/{c[1][0]}.jpg', crop=(0, int(c[1][1][0]), 1080, int(c[1][1][1])))
|
||||
if name in blue.keys():
|
||||
return await MessageBuild.StaticImage(url=f'LittlePaimon/blue/{blue[name][0]}.jpg',
|
||||
crop=(0, int(blue[name][1][0]), 1080, int(blue[name][1][1])))
|
||||
return None
|
||||
|
717
utils/alias.json
Normal file
717
utils/alias.json
Normal file
@ -0,0 +1,717 @@
|
||||
{
|
||||
"roles":{
|
||||
"10000002": ["神里绫华", "绫华", "大小姐", "小乌龟", "白鹭公主", "0华", "神里妹", "凌华", "神里凌华"],
|
||||
"10000003": ["琴", "团长", "琴团长", "蒲公英骑士"],
|
||||
"10000005": ["空", "空哥", "龙哥", "哥哥", "旅行者", "主角"],
|
||||
"10000006": ["丽莎", "蔷薇魔女"],
|
||||
"10000007": ["荧", "荧妹", "爷", "妹妹", "旅行者", "主角"],
|
||||
"10000014": ["芭芭拉", "偶像", "内鬼", "牧师"],
|
||||
"10000015": ["凯亚", "凝冰渡海真君", "矿工"],
|
||||
"10000016": ["迪卢克", "卢姥爷", "姥爷", "老爷", "卢锅巴", "正义人", "正e人", "落魄人"],
|
||||
"10000020": ["雷泽", "物泽", "小狼", "狼崽", "卢皮卡"],
|
||||
"10000021": ["安柏", "蒙德第一火弓", "打火机", "侦查骑士"],
|
||||
"10000022": ["温迪", "巴巴托斯", "风神", "芭芭脱丝", "卖唱的", "苹果酒", "不干正事真君", "吟游诗人"],
|
||||
"10000023": ["香菱", "卯师傅", "锅巴", "灶神", "香师傅"],
|
||||
"10000024": ["北斗", "大姐头", "船长", "龙王"],
|
||||
"10000025": ["行秋", "水神", "秋秋人", "少爷"],
|
||||
"10000026": ["魈", "金鹏", "夜叉", "三眼五显仙人", "降魔大圣", "靖妖傩舞", "打桩机"],
|
||||
"10000027": ["凝光", "富婆", "天权星"],
|
||||
"10000029": ["可莉", "哒哒哒", "炸弹人", "火花骑士", "嘟嘟可"],
|
||||
"10000030": ["钟离", "帝君", "先生", "老爷子", "岩神", "摩拉克斯", "岩王爷", "岩王帝君"],
|
||||
"10000031": ["菲谢尔", "皇女", "奥兹", "乌鸦", "中二少女", "小艾咪"],
|
||||
"10000032": ["班尼特", "班爷", "班神", "点赞哥", "火神"],
|
||||
"10000033": ["达达利亚", "公子", "愚人众", "阿贾克斯", "鸭鸭", "达达鸭", "玩具销售员"],
|
||||
"10000034": ["诺艾尔", "女仆", "高达", "岩王帝姬"],
|
||||
"10000035": ["七七", "77", "僵尸", "肚饿真君"],
|
||||
"10000036": ["重云", "冰棍"],
|
||||
"10000037": ["甘雨", "秘书", "王小美", "RPG", "椰羊", "椰奶"],
|
||||
"10000038": ["阿贝多", "炼金术士", "花呗多"],
|
||||
"10000039": ["迪奥娜", "dio娜", "猫猫", "冰猫"],
|
||||
"10000041": ["莫娜", "穷b", "占星术士", "半部讨龙真君"],
|
||||
"10000042": ["刻晴", "刻师傅", "阿晴", "刻猫猫", "牛杂师傅", "玉衡星"],
|
||||
"10000043": ["砂糖", "眼镜娘", "雷莹", "风荧"],
|
||||
"10000044": ["辛焱", "黑妹", "摇滚"],
|
||||
"10000045": ["罗莎莉亚", "修女", "罗莎"],
|
||||
"10000046": ["胡桃", "whotao", "堂主"],
|
||||
"10000047": ["枫原万叶", "万叶", "叶天帝"],
|
||||
"10000048": ["烟绯", "罗翔", "律师"],
|
||||
"10000049": ["宵宫", "烟花", "霄宫", "稻妻第一火弓"],
|
||||
"10000050": ["托马", "保姆", "家政"],
|
||||
"10000051": ["优菈", "优拉", "浪花骑士", "记仇的", "尤拉"],
|
||||
"10000052": ["雷电将军", "雷神", "巴尔", "雷军", "雷电影", "影", "煮饭婆", "奶香一刀"],
|
||||
"10000053": ["早柚", "忍者", "终末番"],
|
||||
"10000054": ["珊瑚宫心海", "心海", "军师", "美人鱼", "观赏鱼", "龙王"],
|
||||
"10000055": ["五郎", "狗狗", "修狗", "希娜小姐"],
|
||||
"10000056": ["九条裟罗", "九条"],
|
||||
"10000057": ["荒泷一斗", "一斗", "哈哈哈", "斗子哥"],
|
||||
"10000058": ["八重神子", "神子", "八重", "狐狸", "屑狐狸"],
|
||||
"10000062": ["埃洛伊"],
|
||||
"10000063": ["申鹤", "小姨", "小姨妈"],
|
||||
"10000064": ["云堇", "云先生"],
|
||||
"10000066": ["神里绫人", "0人", "大舅子", "小舅子", "绫人", "神里哥", "凌人", "神里凌人"],
|
||||
"11111111": ["夜兰", "夜阑"],
|
||||
"11111112": ["久岐忍", "忍者", "阿卡丽"],
|
||||
"11111113": ["鹿野院平藏", "近战法师"]
|
||||
},
|
||||
"weapons": {
|
||||
"磐岩结绿": [
|
||||
"磐岩结绿",
|
||||
"绿箭",
|
||||
"绿剑"
|
||||
],
|
||||
"斫峰之刃": [
|
||||
"斫峰之刃",
|
||||
"斫峰",
|
||||
"盾剑"
|
||||
],
|
||||
"无工之剑": [
|
||||
"无工之剑",
|
||||
"蜈蚣",
|
||||
"蜈蚣大剑",
|
||||
"无工大剑",
|
||||
"盾大剑",
|
||||
"无工"
|
||||
],
|
||||
"贯虹之槊": [
|
||||
"贯虹之槊",
|
||||
"贯虹",
|
||||
"岩枪",
|
||||
"盾枪"
|
||||
],
|
||||
"赤角石溃杵": [
|
||||
"赤角石溃杵",
|
||||
"赤角",
|
||||
"石溃杵"
|
||||
],
|
||||
"尘世之锁": [
|
||||
"尘世之锁",
|
||||
"尘世锁",
|
||||
"尘世",
|
||||
"盾书",
|
||||
"锁"
|
||||
],
|
||||
"终末嗟叹之诗": [
|
||||
"终末嗟叹之诗",
|
||||
"终末",
|
||||
"终末弓",
|
||||
"叹气弓",
|
||||
"乐团弓"
|
||||
],
|
||||
"松籁响起之时": [
|
||||
"松籁响起之时",
|
||||
"松籁",
|
||||
"乐团大剑",
|
||||
"松剑"
|
||||
],
|
||||
"苍古自由之誓": [
|
||||
"苍古自由之誓",
|
||||
"苍古",
|
||||
"乐团剑"
|
||||
],
|
||||
"渔获": [
|
||||
"鱼叉"
|
||||
],
|
||||
"衔珠海皇": [
|
||||
"衔珠海皇",
|
||||
"海皇",
|
||||
"咸鱼剑",
|
||||
"咸鱼大剑"
|
||||
],
|
||||
"匣里日月": [
|
||||
"匣里日月",
|
||||
"日月"
|
||||
],
|
||||
"匣里灭辰": [
|
||||
"匣里灭辰",
|
||||
"灭辰"
|
||||
],
|
||||
"匣里龙吟": [
|
||||
"匣里龙吟",
|
||||
"龙吟"
|
||||
],
|
||||
"天空之翼": [
|
||||
"天空之翼",
|
||||
"天空弓"
|
||||
],
|
||||
"天空之刃": [
|
||||
"天空之刃",
|
||||
"天空剑"
|
||||
],
|
||||
"天空之卷": [
|
||||
"天空之卷",
|
||||
"天空书",
|
||||
"厕纸"
|
||||
],
|
||||
"天空之脊": [
|
||||
"天空之脊",
|
||||
"天空枪",
|
||||
"薄荷枪"
|
||||
],
|
||||
"天空之傲": [
|
||||
"天空之傲",
|
||||
"天空大剑"
|
||||
],
|
||||
"四风原典": [
|
||||
"四风原典",
|
||||
"四风"
|
||||
],
|
||||
"试作斩岩": [
|
||||
"试作斩岩",
|
||||
"斩岩"
|
||||
],
|
||||
"试作星镰": [
|
||||
"试作星镰",
|
||||
"星镰"
|
||||
],
|
||||
"试作金珀": [
|
||||
"试作金珀",
|
||||
"金珀"
|
||||
],
|
||||
"试作古华": [
|
||||
"试作古华",
|
||||
"古华"
|
||||
],
|
||||
"试作澹月": [
|
||||
"试作澹月",
|
||||
"澹月"
|
||||
],
|
||||
"千岩长枪": [
|
||||
"千岩长枪",
|
||||
"千岩枪"
|
||||
],
|
||||
"千岩古剑": [
|
||||
"千岩古剑",
|
||||
"千岩剑",
|
||||
"千岩大剑"
|
||||
],
|
||||
"暗巷闪光": [
|
||||
"暗巷闪光",
|
||||
"暗巷剑"
|
||||
],
|
||||
"暗巷猎手": [
|
||||
"暗巷猎手",
|
||||
"暗巷弓"
|
||||
],
|
||||
"阿莫斯之弓": [
|
||||
"阿莫斯之弓",
|
||||
"阿莫斯",
|
||||
"ams",
|
||||
"痛苦弓"
|
||||
],
|
||||
"雾切之回光": [
|
||||
"雾切之回光",
|
||||
"雾切"
|
||||
],
|
||||
"飞雷之弦振": [
|
||||
"飞雷之弦振",
|
||||
"飞雷",
|
||||
"飞雷弓"
|
||||
],
|
||||
"薙草之稻光": [
|
||||
"薙草之稻光",
|
||||
"薙草",
|
||||
"稻光",
|
||||
"薙草稻光",
|
||||
"马尾枪",
|
||||
"马尾",
|
||||
"薙刀"
|
||||
],
|
||||
"神乐之真意": [
|
||||
"神乐之真意",
|
||||
"神乐",
|
||||
"真意"
|
||||
],
|
||||
"狼的末路": [
|
||||
"狼的末路",
|
||||
"狼末"
|
||||
],
|
||||
"护摩之杖": [
|
||||
"护摩之杖",
|
||||
"护摩",
|
||||
"护摩枪",
|
||||
"护膜"
|
||||
],
|
||||
"和璞鸢": [
|
||||
"和璞鸢",
|
||||
"鸟枪",
|
||||
"绿枪"
|
||||
],
|
||||
"风鹰剑": [
|
||||
"风鹰剑",
|
||||
"风鹰"
|
||||
],
|
||||
"冬极白星": [
|
||||
"冬极白星",
|
||||
"冬极"
|
||||
],
|
||||
"不灭月华": [
|
||||
"不灭月华",
|
||||
"月华"
|
||||
],
|
||||
"波乱月白经津": [
|
||||
"波乱月白经津",
|
||||
"波乱",
|
||||
"月白",
|
||||
"波乱月白",
|
||||
"经津",
|
||||
"波波津"
|
||||
],
|
||||
"若水": [
|
||||
"若水",
|
||||
"麒麟弓",
|
||||
"Aqua",
|
||||
"aqua"
|
||||
],
|
||||
"昭心": [
|
||||
"昭心",
|
||||
"糟心"
|
||||
],
|
||||
"幽夜华尔兹": [
|
||||
"幽夜华尔兹",
|
||||
"幽夜",
|
||||
"幽夜弓",
|
||||
"华尔兹",
|
||||
"皇女弓"
|
||||
],
|
||||
"雪葬的星银": [
|
||||
"雪葬的星银",
|
||||
"雪葬",
|
||||
"星银",
|
||||
"雪葬星银",
|
||||
"雪山大剑"
|
||||
],
|
||||
"喜多院十文字": [
|
||||
"喜多院十文字",
|
||||
"喜多院",
|
||||
"十文字"
|
||||
],
|
||||
"万国诸海图谱": [
|
||||
"万国诸海图谱",
|
||||
"万国",
|
||||
"万国诸海"
|
||||
],
|
||||
"天目影打刀": [
|
||||
"天目影打刀",
|
||||
"天目刀",
|
||||
"天目"
|
||||
],
|
||||
"破魔之弓": [
|
||||
"破魔之弓",
|
||||
"破魔弓"
|
||||
],
|
||||
"曚云之月": [
|
||||
"曚云之月",
|
||||
"曚云弓"
|
||||
],
|
||||
"流月针": [
|
||||
"流月针",
|
||||
"针"
|
||||
],
|
||||
"流浪乐章": [
|
||||
"流浪乐章",
|
||||
"赌狗书",
|
||||
"赌狗乐章",
|
||||
"赌狗"
|
||||
],
|
||||
"桂木斩长正": [
|
||||
"桂木斩长正",
|
||||
"桂木",
|
||||
"斩长正"
|
||||
],
|
||||
"腐殖之剑": [
|
||||
"腐殖之剑",
|
||||
"腐殖",
|
||||
"腐殖剑"
|
||||
],
|
||||
"风花之颂": [
|
||||
"风花之颂",
|
||||
"风花弓"
|
||||
],
|
||||
"证誓之明瞳": [
|
||||
"证誓之明瞳",
|
||||
"证誓",
|
||||
"明瞳",
|
||||
"证誓明瞳"
|
||||
],
|
||||
"嘟嘟可故事集": [
|
||||
"嘟嘟可故事集",
|
||||
"嘟嘟可"
|
||||
],
|
||||
"辰砂之纺锤": [
|
||||
"辰砂之纺锤",
|
||||
"辰砂",
|
||||
"辰砂纺锤",
|
||||
"纺锤"
|
||||
],
|
||||
"白辰之环": [
|
||||
"白辰之环",
|
||||
"白辰",
|
||||
"白辰环"
|
||||
],
|
||||
"决斗之枪": [
|
||||
"决斗之枪",
|
||||
"决斗枪",
|
||||
"决斗",
|
||||
"月卡枪"
|
||||
],
|
||||
"螭骨剑": [
|
||||
"螭骨剑",
|
||||
"螭骨",
|
||||
"丈育剑",
|
||||
"离骨剑",
|
||||
"月卡大剑"
|
||||
],
|
||||
"黑剑": [
|
||||
"黑剑",
|
||||
"月卡剑"
|
||||
],
|
||||
"苍翠猎弓": [
|
||||
"苍翠猎弓",
|
||||
"绿弓",
|
||||
"月卡弓"
|
||||
],
|
||||
"讨龙英杰谭": [
|
||||
"讨龙英杰谭",
|
||||
"讨龙"
|
||||
],
|
||||
"神射手之誓": [
|
||||
"神射手之誓",
|
||||
"脚气弓",
|
||||
"神射手"
|
||||
],
|
||||
"黑缨枪": [
|
||||
"黑缨枪",
|
||||
"史莱姆枪"
|
||||
],
|
||||
"「渔获」": [
|
||||
"「渔获」"
|
||||
],
|
||||
"以理服人": [
|
||||
"以理服人"
|
||||
],
|
||||
"佣兵重剑": [
|
||||
"佣兵重剑"
|
||||
],
|
||||
"信使": [
|
||||
"信使"
|
||||
],
|
||||
"冷刃": [
|
||||
"冷刃"
|
||||
],
|
||||
"历练的猎弓": [
|
||||
"历练的猎弓"
|
||||
],
|
||||
"反曲弓": [
|
||||
"反曲弓"
|
||||
],
|
||||
"口袋魔导书": [
|
||||
"口袋魔导书"
|
||||
],
|
||||
"吃虎鱼刀": [
|
||||
"吃虎鱼刀"
|
||||
],
|
||||
"学徒笔记": [
|
||||
"学徒笔记"
|
||||
],
|
||||
"宗室大剑": [
|
||||
"宗室大剑"
|
||||
],
|
||||
"宗室猎枪": [
|
||||
"宗室猎枪"
|
||||
],
|
||||
"宗室秘法录": [
|
||||
"宗室秘法录"
|
||||
],
|
||||
"宗室长剑": [
|
||||
"宗室长剑"
|
||||
],
|
||||
"宗室长弓": [
|
||||
"宗室长弓"
|
||||
],
|
||||
"异世界行记": [
|
||||
"异世界行记"
|
||||
],
|
||||
"弓藏": [
|
||||
"弓藏"
|
||||
],
|
||||
"弹弓": [
|
||||
"弹弓"
|
||||
],
|
||||
"忍冬之果": [
|
||||
"忍冬之果"
|
||||
],
|
||||
"息灾": [
|
||||
"息灾"
|
||||
],
|
||||
"恶王丸": [
|
||||
"恶王丸"
|
||||
],
|
||||
"掠食者": [
|
||||
"掠食者"
|
||||
],
|
||||
"断浪长鳍": [
|
||||
"断浪长鳍"
|
||||
],
|
||||
"新手长枪": [
|
||||
"新手长枪"
|
||||
],
|
||||
"旅行剑": [
|
||||
"旅行剑"
|
||||
],
|
||||
"无锋剑": [
|
||||
"无锋剑"
|
||||
],
|
||||
"暗巷的酒与诗": [
|
||||
"暗巷的酒与诗"
|
||||
],
|
||||
"暗铁剑": [
|
||||
"暗铁剑"
|
||||
],
|
||||
"沐浴龙血的剑": [
|
||||
"沐浴龙血的剑"
|
||||
],
|
||||
"猎弓": [
|
||||
"猎弓"
|
||||
],
|
||||
"甲级宝珏": [
|
||||
"甲级宝珏"
|
||||
],
|
||||
"白影剑": [
|
||||
"白影剑"
|
||||
],
|
||||
"白缨枪": [
|
||||
"白缨枪"
|
||||
],
|
||||
"白铁大剑": [
|
||||
"白铁大剑"
|
||||
],
|
||||
"祭礼剑": [
|
||||
"祭礼剑"
|
||||
],
|
||||
"祭礼大剑": [
|
||||
"祭礼大剑"
|
||||
],
|
||||
"祭礼弓": [
|
||||
"祭礼弓"
|
||||
],
|
||||
"祭礼残章": [
|
||||
"祭礼残章"
|
||||
],
|
||||
"笛剑": [
|
||||
"笛剑"
|
||||
],
|
||||
"绝弦": [
|
||||
"绝弦"
|
||||
],
|
||||
"翡玉法球": [
|
||||
"翡玉法球"
|
||||
],
|
||||
"落霞": [
|
||||
"落霞"
|
||||
],
|
||||
"西风剑": [
|
||||
"西风剑"
|
||||
],
|
||||
"西风大剑": [
|
||||
"西风大剑"
|
||||
],
|
||||
"西风猎弓": [
|
||||
"西风猎弓"
|
||||
],
|
||||
"西风秘典": [
|
||||
"西风秘典"
|
||||
],
|
||||
"西风长枪": [
|
||||
"西风长枪"
|
||||
],
|
||||
"训练大剑": [
|
||||
"训练大剑"
|
||||
],
|
||||
"钟剑": [
|
||||
"钟剑"
|
||||
],
|
||||
"钢轮弓": [
|
||||
"钢轮弓"
|
||||
],
|
||||
"钺矛": [
|
||||
"钺矛"
|
||||
],
|
||||
"铁尖枪": [
|
||||
"铁尖枪"
|
||||
],
|
||||
"铁影阔剑": [
|
||||
"铁影阔剑"
|
||||
],
|
||||
"铁蜂刺": [
|
||||
"铁蜂刺"
|
||||
],
|
||||
"银剑": [
|
||||
"银剑"
|
||||
],
|
||||
"降临之剑": [
|
||||
"降临之剑"
|
||||
],
|
||||
"雨裁": [
|
||||
"雨裁"
|
||||
],
|
||||
"飞天大御剑": [
|
||||
"飞天大御剑"
|
||||
],
|
||||
"飞天御剑": [
|
||||
"飞天御剑"
|
||||
],
|
||||
"魔导绪论": [
|
||||
"魔导绪论"
|
||||
],
|
||||
"鸦羽弓": [
|
||||
"鸦羽弓"
|
||||
],
|
||||
"黎明神剑": [
|
||||
"黎明神剑"
|
||||
],
|
||||
"黑岩刺枪": [
|
||||
"黑岩刺枪"
|
||||
],
|
||||
"黑岩战弓": [
|
||||
"黑岩战弓"
|
||||
],
|
||||
"黑岩斩刀": [
|
||||
"黑岩斩刀"
|
||||
],
|
||||
"黑岩绯玉": [
|
||||
"黑岩绯玉"
|
||||
],
|
||||
"黑岩长剑": [
|
||||
"黑岩长剑"
|
||||
],
|
||||
"龙脊长枪": [
|
||||
"龙脊长枪"
|
||||
]
|
||||
},
|
||||
"monsters": [
|
||||
"「公子」",
|
||||
"「女士」",
|
||||
"丘丘人",
|
||||
"丘丘岩盔王",
|
||||
"丘丘雷兜王",
|
||||
"丘丘霜铠王",
|
||||
"冰丘丘萨满",
|
||||
"冰史莱姆",
|
||||
"冰弹丘丘人",
|
||||
"冰深渊法师",
|
||||
"冰盾丘丘人",
|
||||
"冰盾丘丘暴徒",
|
||||
"冰箭丘丘人",
|
||||
"冰萤",
|
||||
"冰霜骗骗花",
|
||||
"冰飘浮灵",
|
||||
"冲锋丘丘人",
|
||||
"古岩龙蜥",
|
||||
"嗜岩·兽境幼兽",
|
||||
"嗜岩·兽境猎犬",
|
||||
"嗜雷·兽境幼兽",
|
||||
"嗜雷·兽境猎犬",
|
||||
"奇怪的丘丘人",
|
||||
"奔狼的领主",
|
||||
"射手丘丘人",
|
||||
"岩丘丘萨满",
|
||||
"岩史莱姆",
|
||||
"岩盾丘丘人",
|
||||
"岩盾丘丘暴徒",
|
||||
"岩飘浮灵",
|
||||
"岩龙蜥",
|
||||
"幼岩龙蜥",
|
||||
"急冻树",
|
||||
"恒常机关阵列",
|
||||
"愚人众·冰萤术士",
|
||||
"愚人众·火之债务处理人",
|
||||
"愚人众·藏镜仕女",
|
||||
"愚人众·雷萤术士",
|
||||
"愚人众先遣队·冰铳重卫士",
|
||||
"愚人众先遣队·岩使游击兵",
|
||||
"愚人众先遣队·水铳重卫士",
|
||||
"愚人众先遣队·火铳游击兵",
|
||||
"愚人众先遣队·雷锤前锋军",
|
||||
"愚人众先遣队·风拳前锋军",
|
||||
"打手丘丘人",
|
||||
"无相之冰",
|
||||
"无相之岩",
|
||||
"无相之水",
|
||||
"无相之火",
|
||||
"无相之雷",
|
||||
"无相之风",
|
||||
"木盾丘丘人",
|
||||
"木盾丘丘暴徒",
|
||||
"水丘丘萨满",
|
||||
"水史莱姆",
|
||||
"水深渊法师",
|
||||
"水萤",
|
||||
"水飘浮灵",
|
||||
"浮游水蕈兽",
|
||||
"海乱鬼·炎威",
|
||||
"海乱鬼·雷腾",
|
||||
"深海龙蜥·原种",
|
||||
"深海龙蜥·吞雷",
|
||||
"深海龙蜥·啮冰",
|
||||
"深海龙蜥之群",
|
||||
"深渊使徒·激流",
|
||||
"深渊咏者·渊火",
|
||||
"深渊咏者·紫电",
|
||||
"火史莱姆",
|
||||
"火斧丘丘暴徒",
|
||||
"火深渊法师",
|
||||
"火箭丘丘人",
|
||||
"火飘浮灵",
|
||||
"炽热骗骗花",
|
||||
"爆弹丘丘人",
|
||||
"爆炎树",
|
||||
"狂风之核",
|
||||
"电气骗骗花",
|
||||
"盗宝团·冰之药剂师",
|
||||
"盗宝团·拳术家",
|
||||
"盗宝团·掘墓者",
|
||||
"盗宝团·斥候",
|
||||
"盗宝团·杂工",
|
||||
"盗宝团·水之药剂师",
|
||||
"盗宝团·海上男儿",
|
||||
"盗宝团·火之药剂师",
|
||||
"盗宝团·神射手",
|
||||
"盗宝团·粉碎者",
|
||||
"盗宝团·雷之药剂师",
|
||||
"祸津御建鸣神命",
|
||||
"纯水精灵",
|
||||
"若陀龙王",
|
||||
"草丘丘萨满",
|
||||
"草史莱姆",
|
||||
"遗迹侦察者",
|
||||
"遗迹守卫",
|
||||
"遗迹巡弋者",
|
||||
"遗迹巨蛇",
|
||||
"遗迹歼击者",
|
||||
"遗迹猎者",
|
||||
"遗迹重机",
|
||||
"遗迹防卫者",
|
||||
"野伏·机巧番",
|
||||
"野伏·火付番",
|
||||
"野伏·阵刀番",
|
||||
"雷丘丘萨满",
|
||||
"雷史莱姆",
|
||||
"雷弹丘丘人",
|
||||
"雷斧丘丘暴徒",
|
||||
"雷深渊法师",
|
||||
"雷箭丘丘人",
|
||||
"雷萤",
|
||||
"雷音权现",
|
||||
"雷飘浮灵",
|
||||
"风丘丘萨满",
|
||||
"风史莱姆",
|
||||
"风飘浮灵",
|
||||
"风魔龙",
|
||||
"魔偶剑鬼",
|
||||
"黄金王兽",
|
||||
"黑蛇骑士·斩风之剑",
|
||||
"黯色空壳·旗令",
|
||||
"黯色空壳·破阵",
|
||||
"黯色空壳·近卫"
|
||||
]
|
||||
}
|
48
utils/alias_handler.py
Normal file
48
utils/alias_handler.py
Normal file
@ -0,0 +1,48 @@
|
||||
import difflib
|
||||
from typing import Union
|
||||
from .file_handler import load_json
|
||||
import os
|
||||
|
||||
|
||||
# def get_id_by_alias(name):
|
||||
#
|
||||
# for c in character_alias.items():
|
||||
# if name in c[1]:
|
||||
# return c
|
||||
# return None
|
||||
|
||||
|
||||
def get_short_name(name):
|
||||
short_name = load_json(path=os.path.join(os.path.dirname(__file__),'short_name.json'))
|
||||
return name if name not in short_name.keys() else short_name[name]
|
||||
|
||||
|
||||
def get_match_alias(msg: str, type: str = 'roles', single_to_dict: bool = False) -> Union[str, list, dict]:
|
||||
alias_file = load_json(path=os.path.join(os.path.dirname(__file__), 'alias.json'))
|
||||
alias_list = alias_file[type]
|
||||
if msg in ['风主', '岩主', '雷主']:
|
||||
return msg
|
||||
elif type == 'roles':
|
||||
possible = {}
|
||||
for role_id, alias in alias_list.items():
|
||||
match_list = difflib.get_close_matches(msg, alias, cutoff=0.6, n=3)
|
||||
if msg in match_list:
|
||||
if single_to_dict:
|
||||
return {alias[0]: role_id}
|
||||
else:
|
||||
return alias[0]
|
||||
elif match_list:
|
||||
possible[alias[0]] = role_id
|
||||
return possible
|
||||
elif type == 'weapons':
|
||||
possible = []
|
||||
for name, alias in alias_list.items():
|
||||
match_list = difflib.get_close_matches(msg, alias, cutoff=0.4, n=3)
|
||||
if msg in match_list:
|
||||
return name
|
||||
elif match_list:
|
||||
possible.append(name)
|
||||
return possible
|
||||
elif type == 'monsters':
|
||||
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
|
@ -1,144 +0,0 @@
|
||||
character_alias = {
|
||||
10000002: ['神里绫华', '绫华', '大小姐', '小乌龟', '白鹭公主', '0华', '神里', '神里妹', '凌华', '神里凌华'],
|
||||
10000003: ['琴', '团长', '琴团长', '蒲公英骑士'],
|
||||
10000005: ['空', '空哥', '龙哥', '哥哥', '旅行者', '主角'],
|
||||
10000006: ['丽莎', '蔷薇魔女'],
|
||||
10000007: ['荧', '荧妹', '爷', '妹妹', '旅行者', '主角'],
|
||||
10000014: ['芭芭拉', '偶像', '内鬼', '牧师'],
|
||||
10000015: ['凯亚', '凝冰渡海真君', '矿工'],
|
||||
10000016: ['迪卢克', '卢姥爷', '姥爷', '老爷', '卢锅巴', '正义人', '正e人', '落魄人'],
|
||||
10000020: ['雷泽', '物泽', '小狼', '狼崽', '卢皮卡'],
|
||||
10000021: ['安柏', '蒙德第一火弓', '打火机', '侦查骑士'],
|
||||
10000022: ['温迪', '巴巴托斯', '风神', '芭芭脱丝', '卖唱的', '苹果酒', '不干正事真君', '吟游诗人'],
|
||||
10000023: ['香菱', '卯师傅', '锅巴', '灶神', '香师傅'],
|
||||
10000024: ['北斗', '大姐头', '船长', '龙王'],
|
||||
10000025: ['行秋', '水神', '秋秋人', '少爷'],
|
||||
10000026: ['魈', '金鹏', '夜叉', '三眼五显仙人', '降魔大圣', '靖妖傩舞', '打桩机'],
|
||||
10000027: ['凝光', '富婆', '天权星'],
|
||||
10000029: ['可莉', '哒哒哒', '炸弹人', '火花骑士', '嘟嘟可'],
|
||||
10000030: ['钟离', '帝君', '先生', '老爷子', '岩神', '摩拉克斯', '岩王爷', '岩王帝君'],
|
||||
10000031: ['菲谢尔', '皇女', '奥兹', '乌鸦', '中二少女', '小艾咪'],
|
||||
10000032: ['班尼特', '班爷', '班神', '点赞哥', '火神'],
|
||||
10000033: ['达达利亚', '公子', '愚人众', '阿贾克斯', '鸭鸭', '达达鸭', '玩具销售员'],
|
||||
10000034: ['诺艾尔', '女仆', '高达', '岩王帝姬'],
|
||||
10000035: ['七七', '77', '僵尸', '肚饿真君'],
|
||||
10000036: ['重云', '冰棍'],
|
||||
10000037: ['甘雨', '秘书', '王小美', 'RPG', '椰羊', '椰奶'],
|
||||
10000038: ['阿贝多', '炼金术士', '花呗多'],
|
||||
10000039: ['迪奥娜', 'dio娜', '猫猫', '冰猫'],
|
||||
10000041: ['莫娜', '穷b', '占星术士', '半部讨龙真君'],
|
||||
10000042: ['刻晴', '刻师傅', '阿晴', '刻猫猫', '牛杂师傅', '玉衡星'],
|
||||
10000043: ['砂糖', '眼镜娘', '雷莹', '风荧'],
|
||||
10000044: ['辛焱', '黑妹', '摇滚'],
|
||||
10000045: ['罗莎莉亚', '修女', '罗莎'],
|
||||
10000046: ['胡桃', 'whotao', '堂主'],
|
||||
10000047: ['枫原万叶', '万叶', '叶天帝'],
|
||||
10000048: ['烟绯', '罗翔', '律师'],
|
||||
10000049: ['宵宫', '烟花', '霄宫', '稻妻第一火弓'],
|
||||
10000050: ['托马', '保姆', '家政'],
|
||||
10000051: ['优菈', '优拉', '浪花骑士', '记仇的'],
|
||||
10000052: ['雷电将军', '雷神', '巴尔', '雷军', '雷电影', '影', '煮饭婆', '奶香一刀'],
|
||||
10000053: ['早柚', '忍者', '终末番'],
|
||||
10000054: ['珊瑚宫心海', '心海', '军师', '美人鱼', '观赏鱼', '龙王'],
|
||||
10000055: ['五郎', '狗狗', '修狗', '希娜小姐'],
|
||||
10000056: ['九条裟罗', '九条'],
|
||||
10000057: ['荒泷一斗', '一斗', '哈哈哈', '斗子哥'],
|
||||
10000058: ['八重神子', '神子', '八重', '狐狸', '屑狐狸'],
|
||||
10000062: ['埃洛伊'],
|
||||
10000063: ['申鹤', '小姨', '小姨妈'],
|
||||
10000064: ['云堇', '云先生'],
|
||||
10000066: ['神里绫人', '0人', '大舅子', '小舅子', '绫人', '神里哥', '凌人', '神里凌人']
|
||||
}
|
||||
short_name = {
|
||||
'胡桃': '胡桃',
|
||||
'托马': '托马',
|
||||
'宵宫': '宵宫',
|
||||
'烟绯': '烟绯',
|
||||
'可莉': '可莉',
|
||||
'迪卢克': '姥爷',
|
||||
'辛焱': '辛焱',
|
||||
'安柏': '安柏',
|
||||
'香菱': '香菱',
|
||||
'班尼特': '点赞',
|
||||
'珊瑚宫心海': '心海',
|
||||
'达达利亚': '公子',
|
||||
'行秋': '行秋',
|
||||
'莫娜': '莫娜',
|
||||
'芭芭拉': '牧师',
|
||||
'申鹤': '申鹤',
|
||||
'神里绫华': '绫华',
|
||||
'优菈': '优菈',
|
||||
'甘雨': '甘雨',
|
||||
'凯亚': '凯亚',
|
||||
'重云': '重云',
|
||||
'七七': '七七',
|
||||
'迪奥娜': '冰猫',
|
||||
'罗莎莉亚': '修女',
|
||||
'埃洛伊': '异界',
|
||||
'八重神子': '神子',
|
||||
'雷电将军': '雷神',
|
||||
'九条裟罗': '九条',
|
||||
'刻晴': '刻晴',
|
||||
'雷泽': '雷泽',
|
||||
'菲谢尔': '皇女',
|
||||
'丽莎': '丽莎',
|
||||
'北斗': '北斗',
|
||||
'雷主': '雷主',
|
||||
'早柚': '早柚',
|
||||
'枫原万叶': '万叶',
|
||||
'魈': '魈君',
|
||||
'温迪': '温迪',
|
||||
'琴': '团长',
|
||||
'砂糖': '砂糖',
|
||||
'风主': '风主',
|
||||
'荒泷一斗': '一斗',
|
||||
'五郎': '五郎',
|
||||
'阿贝多': '白垩',
|
||||
'钟离': '钟离',
|
||||
'诺艾尔': '女仆',
|
||||
'凝光': '凝光',
|
||||
'岩主': '岩主',
|
||||
'云堇': '云堇',
|
||||
'神里绫人': '绫人',
|
||||
'神乐之真意': '神乐',
|
||||
'息灾': '息灾',
|
||||
'赤角石溃杵': '赤角',
|
||||
'松籁响起之时': '松籁',
|
||||
'苍古自由之誓': '苍古',
|
||||
'终末嗟叹之诗': '终末',
|
||||
'冬极白星': '冬极',
|
||||
'不灭月华': '月华',
|
||||
'薙草之稻光': '薙刀',
|
||||
'飞雷之弦振': '飞雷',
|
||||
'雾切之回光': '雾切',
|
||||
'天空之刃': '空刃',
|
||||
'狼的末路': '狼末',
|
||||
'阿莫斯之弓': '痛苦',
|
||||
'天空之卷': '空卷',
|
||||
'天空之傲': '空傲',
|
||||
'和璞鸢': '鸟枪',
|
||||
'四风原典': '四风',
|
||||
'天空之翼': '空翼',
|
||||
'天空之脊': '空脊',
|
||||
'尘世之锁': '尘锁',
|
||||
'无工之剑': '无工',
|
||||
'贯虹之槊': '贯虹',
|
||||
'斫峰之刃': '斫峰',
|
||||
'磐岩结绿': '绿剑',
|
||||
'护摩之杖': '护摩',
|
||||
'波乱月白经津': '波乱'
|
||||
}
|
||||
|
||||
|
||||
def get_id_by_alias(name):
|
||||
for c in character_alias.items():
|
||||
if name in c[1]:
|
||||
return c
|
||||
return None
|
||||
|
||||
|
||||
def get_short_name(name):
|
||||
for n in short_name.items():
|
||||
if name == n[0]:
|
||||
return n[1]
|
||||
return name
|
@ -1,6 +1,5 @@
|
||||
import re
|
||||
import base64
|
||||
import difflib
|
||||
|
||||
from PIL import Image
|
||||
from pathlib import Path
|
||||
@ -11,7 +10,7 @@ from nonebot import get_bot, logger
|
||||
from nonebot.adapters.onebot.v11 import MessageEvent, Message, MessageSegment
|
||||
|
||||
from .db_util import get_last_query, update_last_query
|
||||
from .file_handler import load_image, load_json_from_url
|
||||
from .file_handler import load_image
|
||||
from . import aiorequests
|
||||
|
||||
|
||||
@ -135,19 +134,41 @@ def get_message_id(event):
|
||||
return event.channel_id
|
||||
|
||||
|
||||
async def match_alias(msg: str, type: str = 'weapons') -> Union[str, list]:
|
||||
alias_file = await load_json_from_url(url='https://static.cherishmoon.fun/LittlePaimon/alias.json')
|
||||
alias_list = alias_file[type]
|
||||
if type == 'weapons':
|
||||
possible = []
|
||||
for name, alias in alias_list.items():
|
||||
match_list = difflib.get_close_matches(msg, alias, cutoff=0.4, n=5)
|
||||
if msg in match_list:
|
||||
return name
|
||||
elif match_list:
|
||||
possible.append(name)
|
||||
return possible
|
||||
elif type == 'monsters':
|
||||
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
|
||||
def uid_userId_to_dict(uid, user_id) -> Tuple[dict, Message]:
|
||||
total_result = Message()
|
||||
query_dict = {}
|
||||
if isinstance(uid, str) and isinstance(user_id, str):
|
||||
query_dict[uid] = user_id
|
||||
elif isinstance(uid, list) and isinstance(user_id, str):
|
||||
for u in uid:
|
||||
query_dict[u] = user_id
|
||||
elif isinstance(uid, list) and isinstance(user_id, list):
|
||||
for u, us in zip(uid, user_id):
|
||||
if u is not None:
|
||||
query_dict[u] = us
|
||||
else:
|
||||
total_result += MessageSegment.text(f'派蒙没有{us}的{u}信息哦,请把uid给派蒙吧~')
|
||||
return query_dict, total_result
|
||||
|
||||
|
||||
def replace_all(raw_text: str, text_list: Union[str, list]):
|
||||
if not text_list:
|
||||
return raw_text
|
||||
else:
|
||||
if isinstance(text_list, str):
|
||||
text_list = [text_list]
|
||||
for text in text_list:
|
||||
raw_text = raw_text.replace(text, '')
|
||||
return raw_text
|
||||
|
||||
|
||||
def transform_uid(msg):
|
||||
if isinstance(msg, Message):
|
||||
msg = msg.extract_plain_text().strip()
|
||||
check_uid = msg.split(' ')
|
||||
uid_list = []
|
||||
for check in check_uid:
|
||||
uid = re.search(r'(?P<uid>(1|2|5)\d{8})', check)
|
||||
if uid:
|
||||
uid_list.append(uid.group('uid'))
|
||||
return uid_list if len(uid_list) > 1 else uid_list[0] if uid_list else None
|
||||
|
79
utils/short_name.json
Normal file
79
utils/short_name.json
Normal file
@ -0,0 +1,79 @@
|
||||
{
|
||||
"胡桃": "胡桃",
|
||||
"托马": "托马",
|
||||
"宵宫": "宵宫",
|
||||
"烟绯": "烟绯",
|
||||
"可莉": "可莉",
|
||||
"迪卢克": "姥爷",
|
||||
"辛焱": "辛焱",
|
||||
"安柏": "安柏",
|
||||
"香菱": "香菱",
|
||||
"班尼特": "点赞",
|
||||
"珊瑚宫心海": "心海",
|
||||
"达达利亚": "公子",
|
||||
"行秋": "行秋",
|
||||
"莫娜": "莫娜",
|
||||
"芭芭拉": "牧师",
|
||||
"申鹤": "申鹤",
|
||||
"神里绫华": "绫华",
|
||||
"优菈": "优菈",
|
||||
"甘雨": "甘雨",
|
||||
"凯亚": "凯亚",
|
||||
"重云": "重云",
|
||||
"七七": "七七",
|
||||
"迪奥娜": "冰猫",
|
||||
"罗莎莉亚": "修女",
|
||||
"埃洛伊": "异界",
|
||||
"八重神子": "神子",
|
||||
"雷电将军": "雷神",
|
||||
"九条裟罗": "九条",
|
||||
"刻晴": "刻晴",
|
||||
"雷泽": "雷泽",
|
||||
"菲谢尔": "皇女",
|
||||
"丽莎": "丽莎",
|
||||
"北斗": "北斗",
|
||||
"雷主": "雷主",
|
||||
"早柚": "早柚",
|
||||
"枫原万叶": "万叶",
|
||||
"魈": "魈君",
|
||||
"温迪": "温迪",
|
||||
"琴": "团长",
|
||||
"砂糖": "砂糖",
|
||||
"风主": "风主",
|
||||
"荒泷一斗": "一斗",
|
||||
"五郎": "五郎",
|
||||
"阿贝多": "白垩",
|
||||
"钟离": "钟离",
|
||||
"诺艾尔": "女仆",
|
||||
"凝光": "凝光",
|
||||
"岩主": "岩主",
|
||||
"云堇": "云堇",
|
||||
"神里绫人": "绫人",
|
||||
"神乐之真意": "神乐",
|
||||
"息灾": "息灾",
|
||||
"赤角石溃杵": "赤角",
|
||||
"松籁响起之时": "松籁",
|
||||
"苍古自由之誓": "苍古",
|
||||
"终末嗟叹之诗": "终末",
|
||||
"冬极白星": "冬极",
|
||||
"不灭月华": "月华",
|
||||
"薙草之稻光": "薙刀",
|
||||
"飞雷之弦振": "飞雷",
|
||||
"雾切之回光": "雾切",
|
||||
"天空之刃": "空刃",
|
||||
"狼的末路": "狼末",
|
||||
"阿莫斯之弓": "痛苦",
|
||||
"天空之卷": "空卷",
|
||||
"天空之傲": "空傲",
|
||||
"和璞鸢": "鸟枪",
|
||||
"四风原典": "四风",
|
||||
"天空之翼": "空翼",
|
||||
"天空之脊": "空脊",
|
||||
"尘世之锁": "尘锁",
|
||||
"无工之剑": "无工",
|
||||
"贯虹之槊": "贯虹",
|
||||
"斫峰之刃": "斫峰",
|
||||
"磐岩结绿": "绿剑",
|
||||
"护摩之杖": "护摩",
|
||||
"波乱月白经津": "波乱"
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user