Add maimai title search
This commit is contained in:
parent
301f32c96d
commit
9e4393a7ef
4 changed files with 34 additions and 22 deletions
|
@ -1,6 +1,6 @@
|
||||||
from core.builtins import command_prefix
|
from core.builtins import command_prefix
|
||||||
from modules.maimai.libraries.maimai_best_50 import generate
|
from modules.maimai.libraries.maimai_best_50 import generate
|
||||||
from modules.maimai.libraries.maimaidx_api_data import update_assets, get_alias, get_cover
|
from modules.maimai.libraries.maimaidx_api_data import get_alias, get_cover, search_by_alias, update_assets
|
||||||
from modules.maimai.libraries.maimaidx_music import Music, TotalList
|
from modules.maimai.libraries.maimaidx_music import Music, TotalList
|
||||||
from modules.maimai.libraries.maimaidx_project import get_level_process, get_plate_process, get_player_score, get_rank, \
|
from modules.maimai.libraries.maimaidx_project import get_level_process, get_plate_process, get_player_score, get_rank, \
|
||||||
get_score_list
|
get_score_list
|
||||||
|
@ -171,8 +171,8 @@ async def _(msg: Bot.MessageSession, id_or_alias: str, username: str = None):
|
||||||
if id_or_alias[:2].lower() == "id":
|
if id_or_alias[:2].lower() == "id":
|
||||||
sid = id_or_alias[2:]
|
sid = id_or_alias[2:]
|
||||||
else:
|
else:
|
||||||
sid_list = (await total_list.get()).filter(full_search=id_or_alias)
|
sid_list = search_by_alias(msg, id_or_alias)
|
||||||
sid_list += await get_alias(msg, id_or_alias, get_music=True)
|
|
||||||
if len(sid_list) == 0:
|
if len(sid_list) == 0:
|
||||||
await msg.finish(msg.locale.t("maimai.message.music_not_found"))
|
await msg.finish(msg.locale.t("maimai.message.music_not_found"))
|
||||||
elif len(sid_list) > 1:
|
elif len(sid_list) > 1:
|
||||||
|
@ -353,8 +353,7 @@ async def _(msg: Bot.MessageSession, id_or_alias: str, diff: str = None):
|
||||||
if id_or_alias[:2].lower() == "id":
|
if id_or_alias[:2].lower() == "id":
|
||||||
sid = id_or_alias[2:]
|
sid = id_or_alias[2:]
|
||||||
else:
|
else:
|
||||||
sid_list = (await total_list.get()).filter(full_search=id_or_alias)
|
sid_list = search_by_alias(msg, id_or_alias)
|
||||||
sid_list += await get_alias(msg, id_or_alias, get_music=True)
|
|
||||||
if len(sid_list) == 0:
|
if len(sid_list) == 0:
|
||||||
await msg.finish(msg.locale.t("maimai.message.music_not_found"))
|
await msg.finish(msg.locale.t("maimai.message.music_not_found"))
|
||||||
elif len(sid_list) > 1:
|
elif len(sid_list) > 1:
|
||||||
|
|
|
@ -61,7 +61,7 @@ async def update_assets():
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
async def get_alias(msg, input, get_music=False):
|
async def get_alias(msg, input):
|
||||||
file_path = os.path.join(assets_path, "mai_alias.json")
|
file_path = os.path.join(assets_path, "mai_alias.json")
|
||||||
|
|
||||||
if not os.path.exists(file_path):
|
if not os.path.exists(file_path):
|
||||||
|
@ -70,14 +70,32 @@ async def get_alias(msg, input, get_music=False):
|
||||||
data = json.load(file)
|
data = json.load(file)
|
||||||
|
|
||||||
result = []
|
result = []
|
||||||
if get_music:
|
input = input.replace("_", " ")
|
||||||
for alias, ids in data.items():
|
if input in data:
|
||||||
if input in ids:
|
result = data[input]
|
||||||
result.append(alias)
|
|
||||||
else:
|
return result
|
||||||
input = input.replace("_", " ")
|
|
||||||
if input in data:
|
|
||||||
result = data[input]
|
async def search_by_alias(msg, input):
|
||||||
|
result = []
|
||||||
|
s = (await total_list.get()).by_title(input)
|
||||||
|
if s:
|
||||||
|
result.append(s['title'])
|
||||||
|
|
||||||
|
file_path = os.path.join(assets_path, "mai_alias.json")
|
||||||
|
|
||||||
|
if not os.path.exists(file_path):
|
||||||
|
return result
|
||||||
|
|
||||||
|
with open(file_path, 'r') as file:
|
||||||
|
data = json.load(file)
|
||||||
|
|
||||||
|
for alias, ids in data.items():
|
||||||
|
if input in ids:
|
||||||
|
if alias in result:
|
||||||
|
result.remove(alias)
|
||||||
|
result.append(alias)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
|
@ -124,7 +124,6 @@ class MusicList(List[Music]):
|
||||||
level: Optional[Union[str, List[str]]] = ...,
|
level: Optional[Union[str, List[str]]] = ...,
|
||||||
ds: Optional[Union[float, List[float], Tuple[float, float]]] = ...,
|
ds: Optional[Union[float, List[float], Tuple[float, float]]] = ...,
|
||||||
title_search: Optional[str] = ...,
|
title_search: Optional[str] = ...,
|
||||||
full_search: Optional[str] = ...,
|
|
||||||
genre: Optional[Union[str, List[str]]] = ...,
|
genre: Optional[Union[str, List[str]]] = ...,
|
||||||
bpm: Optional[Union[float, List[float], Tuple[float, float]]] = ...,
|
bpm: Optional[Union[float, List[float], Tuple[float, float]]] = ...,
|
||||||
type: Optional[Union[str, List[str]]] = ...,
|
type: Optional[Union[str, List[str]]] = ...,
|
||||||
|
@ -146,8 +145,6 @@ class MusicList(List[Music]):
|
||||||
continue
|
continue
|
||||||
if not in_or_equal(music.bpm, bpm):
|
if not in_or_equal(music.bpm, bpm):
|
||||||
continue
|
continue
|
||||||
if not in_or_equal(music.title, full_search):
|
|
||||||
continue
|
|
||||||
if title_search is not Ellipsis and title_search.lower() not in music.title.lower():
|
if title_search is not Ellipsis and title_search.lower() not in music.title.lower():
|
||||||
continue
|
continue
|
||||||
music.diff = diff2
|
music.diff = diff2
|
||||||
|
|
|
@ -4,7 +4,7 @@ from core.builtins import Bot, Plain, Image as BImage
|
||||||
from core.component import module
|
from core.component import module
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils.image import msgchain2image
|
from core.utils.image import msgchain2image
|
||||||
from modules.maimai.libraries.maimaidx_api_data import get_alias, get_cover
|
from modules.maimai.libraries.maimaidx_api_data import get_alias, get_cover, search_by_alias
|
||||||
from modules.maimai.libraries.maimaidx_music import Music, TotalList
|
from modules.maimai.libraries.maimaidx_music import Music, TotalList
|
||||||
from modules.maimai.libraries.maimaidx_project import get_level_process, get_plate_process, get_player_score
|
from modules.maimai.libraries.maimaidx_project import get_level_process, get_plate_process, get_player_score
|
||||||
|
|
||||||
|
@ -56,8 +56,7 @@ async def _(msg: Bot.MessageSession):
|
||||||
if not music:
|
if not music:
|
||||||
await msg.finish(msg.locale.t("maimai.message.music_not_found"))
|
await msg.finish(msg.locale.t("maimai.message.music_not_found"))
|
||||||
else:
|
else:
|
||||||
sid_list = (await total_list.get()).filter(full_search=name)
|
sid_list = search_by_alias(msg, name)
|
||||||
sid_list += await get_alias(msg, name, get_music=True)
|
|
||||||
if len(sid_list) == 0:
|
if len(sid_list) == 0:
|
||||||
await msg.finish(msg.locale.t("maimai.message.music_not_found"))
|
await msg.finish(msg.locale.t("maimai.message.music_not_found"))
|
||||||
elif len(sid_list) > 1:
|
elif len(sid_list) > 1:
|
||||||
|
@ -88,8 +87,7 @@ async def _(msg: Bot.MessageSession):
|
||||||
if name[:2].lower() == "id":
|
if name[:2].lower() == "id":
|
||||||
sid = name[2:]
|
sid = name[2:]
|
||||||
else:
|
else:
|
||||||
sid_list = (await total_list.get()).filter(full_search=name)
|
sid_list = search_by_alias(msg, name)
|
||||||
sid_list += await get_alias(msg, name, get_music=True)
|
|
||||||
if len(sid_list) == 0:
|
if len(sid_list) == 0:
|
||||||
await msg.finish(msg.locale.t("maimai.message.music_not_found"))
|
await msg.finish(msg.locale.t("maimai.message.music_not_found"))
|
||||||
elif len(sid_list) > 1:
|
elif len(sid_list) > 1:
|
||||||
|
|
Reference in a new issue