LittlePaimon/utils/alias_handler.py

82 lines
2.8 KiB
Python
Raw Normal View History

import difflib
from typing import Union
from .file_handler import load_json
import os
2022-06-03 14:33:31 +08:00
def get_short_name(name: str):
"""
获取角色或武器的短名2个字
:param name: 角色或武器名
:return: 短名字符串
"""
2022-06-21 16:26:13 +08:00
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]
2022-06-03 14:33:31 +08:00
def get_id_by_name(name: str):
"""
根据角色名字获取角色的id
:param name: 角色名
:return: id字符串
"""
2022-05-29 21:45:14 +08:00
alias_file = load_json(path=os.path.join(os.path.dirname(__file__), 'alias.json'))
name_list = alias_file['roles']
for role_id, alias in name_list.items():
if name in alias:
return role_id
2022-06-03 14:33:31 +08:00
def get_name_by_id(role_id: str):
"""
根据角色id获取角色名
:param role_id: 角色id
:return: 角色名字符串
"""
2022-06-03 14:33:31 +08:00
alias_file = load_json(path=os.path.join(os.path.dirname(__file__), 'alias.json'))
name_list = alias_file['roles']
if role_id in name_list:
return name_list[role_id][0]
else:
return None
def get_match_alias(msg: str, type: str = 'roles', single_to_dict: bool = False) -> Union[str, list, dict]:
"""
根据字符串消息获取与之相似或匹配的角色武器原魔名
:param msg: 消息
:param type: 匹配类型有rolesweaponsmonsters
:param single_to_dict: 是否将角色单结果也转换成{角色:id}字典
:return: 匹配的字符串列表或字典
"""
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:
2022-06-21 16:26:13 +08:00
if len(match_list) == 1:
return alias[0]
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