ys、ysc、ysa、ys、攻略、材料等指令可以对话式查询

This commit is contained in:
CMHopeSunshine 2022-05-25 13:04:34 +08:00
parent c04406ceb0
commit 972e39ff7c
13 changed files with 1111 additions and 334 deletions

View File

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

View File

@ -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)
if isinstance(data, str):
await sy.finish(data, at_sender=True)
else:
abyss_card = await draw_abyss_card(data, uid, true_floor)
await sy.finish(abyss_card, 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_abyss_data(user_id, uid, use_cache=state['use_cache'])
if isinstance(data, str):
total_result += MessageSegment.text(data + '\n')
else:
abyss_card = await draw_abyss_card(data, uid, true_floor)
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)
if isinstance(data, str):
await ys.finish(data, at_sender=True)
async def ys_handler(bot: Bot, event: MessageEvent, state: T_State):
uid = transform_uid(state['uid'])
if uid:
state['uid'] = uid
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']
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):
total_result += MessageSegment.text(data + '\n')
else:
nickname = event.sender.nickname
chara_data = await get_chara_detail_data(user_id, uid, use_cache=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)
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=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)
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)
if isinstance(chara_data, str):
await ysa.finish(chara_data, at_sender=True)
async def ysa_handler(event: MessageEvent, state: T_State):
uid = transform_uid(state['uid'])
if uid:
state['uid'] = uid
else:
player_card = await draw_all_chara_card(chara_data, uid)
await ysa.finish(player_card, at_sender=True)
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):
total_result += MessageSegment.text(chara_data + '\n')
else:
player_card = await draw_all_chara_card(chara_data, uid)
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.建议在无痕模式下取'

View File

@ -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']:

View File

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

View File

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

View File

@ -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', ['神里绫人', '夜兰', '久岐忍', '鹿野院平藏'])

View File

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

View File

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

View File

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

View File

@ -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
View File

@ -0,0 +1,79 @@
{
"胡桃": "胡桃",
"托马": "托马",
"宵宫": "宵宫",
"烟绯": "烟绯",
"可莉": "可莉",
"迪卢克": "姥爷",
"辛焱": "辛焱",
"安柏": "安柏",
"香菱": "香菱",
"班尼特": "点赞",
"珊瑚宫心海": "心海",
"达达利亚": "公子",
"行秋": "行秋",
"莫娜": "莫娜",
"芭芭拉": "牧师",
"申鹤": "申鹤",
"神里绫华": "绫华",
"优菈": "优菈",
"甘雨": "甘雨",
"凯亚": "凯亚",
"重云": "重云",
"七七": "七七",
"迪奥娜": "冰猫",
"罗莎莉亚": "修女",
"埃洛伊": "异界",
"八重神子": "神子",
"雷电将军": "雷神",
"九条裟罗": "九条",
"刻晴": "刻晴",
"雷泽": "雷泽",
"菲谢尔": "皇女",
"丽莎": "丽莎",
"北斗": "北斗",
"雷主": "雷主",
"早柚": "早柚",
"枫原万叶": "万叶",
"魈": "魈君",
"温迪": "温迪",
"琴": "团长",
"砂糖": "砂糖",
"风主": "风主",
"荒泷一斗": "一斗",
"五郎": "五郎",
"阿贝多": "白垩",
"钟离": "钟离",
"诺艾尔": "女仆",
"凝光": "凝光",
"岩主": "岩主",
"云堇": "云堇",
"神里绫人": "绫人",
"神乐之真意": "神乐",
"息灾": "息灾",
"赤角石溃杵": "赤角",
"松籁响起之时": "松籁",
"苍古自由之誓": "苍古",
"终末嗟叹之诗": "终末",
"冬极白星": "冬极",
"不灭月华": "月华",
"薙草之稻光": "薙刀",
"飞雷之弦振": "飞雷",
"雾切之回光": "雾切",
"天空之刃": "空刃",
"狼的末路": "狼末",
"阿莫斯之弓": "痛苦",
"天空之卷": "空卷",
"天空之傲": "空傲",
"和璞鸢": "鸟枪",
"四风原典": "四风",
"天空之翼": "空翼",
"天空之脊": "空脊",
"尘世之锁": "尘锁",
"无工之剑": "无工",
"贯虹之槊": "贯虹",
"斫峰之刃": "斫峰",
"磐岩结绿": "绿剑",
"护摩之杖": "护摩",
"波乱月白经津": "波乱"
}