Archived
1
0
Fork 0
This commit is contained in:
多羅狼 2024-03-18 20:11:20 +08:00 committed by GitHub
parent f23f6bfdc1
commit 9a8ee2d6ef
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 223 additions and 240 deletions

View file

@ -22,12 +22,7 @@ async def _(msg: Bot.MessageSession, language: str, content: str):
if language not in ('zh-cn', 'zh-hk', 'zh-tw'): if language not in ('zh-cn', 'zh-hk', 'zh-tw'):
await msg.finish(msg.locale.t('langconv.message.unsupported_language')) await msg.finish(msg.locale.t('langconv.message.unsupported_language'))
lc = {'zh-cn': lc_zh_cn, 'zh-hk': lc_zh_hk, 'zh-tw': lc_zh_tw}[language] lc = {'zh-cn': lc_zh_cn, 'zh-hk': lc_zh_hk, 'zh-tw': lc_zh_tw}[language]
start = time.perf_counter_ns()
res = lc.convert(content) res = lc.convert(content)
stop = time.perf_counter_ns()
delta = (stop - start) / 1000000
if msg.check_super_user():
res += '\n' + msg.locale.t("langconv.message.running_time", time=delta)
if await check_bool(res): if await check_bool(res):
await msg.finish(rickroll(msg)) await msg.finish(rickroll(msg))
await msg.finish(res) await msg.finish(res)

View file

@ -1,5 +1,4 @@
{ {
"langconv.help": "简繁转换。", "langconv.help": "简繁转换。",
"langconv.message.unsupported_language": "不支持此语言。支持的语言zh_cn、zh_tw、zh_hk", "langconv.message.unsupported_language": "不支持此语言。支持的语言zh_cn、zh_tw、zh_hk"
"langconv.message.running_time": "花费时间:${time} ms。"
} }

View file

@ -1,5 +1,4 @@
{ {
"langconv.help": "简繁转换。", "langconv.help": "简繁转换。",
"langconv.message.unsupported_language": "不支持此语言。支持的语言zh_cn、zh_tw、zh_hk", "langconv.message.unsupported_language": "不支持此语言。支持的语言zh_cn、zh_tw、zh_hk"
"langconv.message.running_time": "花费时间:${time}ms。"
} }

View file

@ -1,5 +1,4 @@
{ {
"langconv.help": "繁簡轉換。", "langconv.help": "繁簡轉換。",
"langconv.message.unsupported_language": "不支援此語言。已支援的語言zh_cn、zh_tw、zh_hk", "langconv.message.unsupported_language": "不支援此語言。已支援的語言zh_cn、zh_tw、zh_hk"
"langconv.message.running_time": "花費時間:${time}ms。"
} }

View file

@ -1,210 +0,0 @@
import re
from core.builtins import Bot, Plain, Image as BImage
from core.utils.image import msgchain2image
from .chunithm import chu
from .dbutils import DivingProberBindInfoManager
from .libraries.maimaidx_apidata import get_alias, get_info, search_by_alias
from .libraries.maimaidx_best50 import generate
from .libraries.maimaidx_music import TotalList
from .libraries.maimaidx_utils import *
from .maimai import mai
from .regex import mai_regex
mai_total_list = TotalList()
@chu.handle('bind <username> {{maimai.help.bind}}', exclude_from=['QQ', 'QQ|Group'])
async def _(msg: Bot.MessageSession, username: str):
bind = DivingProberBindInfoManager(msg).set_bind_info(username=username)
if bind:
await msg.finish(msg.locale.t('maimai.message.bind.success') + username)
@chu.handle('unbind {{maimai.help.unbind}}', exclude_from=['QQ', 'QQ|Group'])
async def _(msg: Bot.MessageSession):
unbind = DivingProberBindInfoManager(msg).remove_bind_info()
if unbind:
await msg.finish(msg.locale.t('maimai.message.unbind.success'))
@mai.handle('bind <username> {{maimai.help.bind}}', exclude_from=['QQ', 'QQ|Group'])
async def _(msg: Bot.MessageSession, username: str):
bind = DivingProberBindInfoManager(msg).set_bind_info(username=username)
if bind:
await msg.finish(msg.locale.t('maimai.message.bind.success') + username)
@mai.handle('unbind {{maimai.help.unbind}}', exclude_from=['QQ', 'QQ|Group'])
async def _(msg: Bot.MessageSession):
unbind = DivingProberBindInfoManager(msg).remove_bind_info()
if unbind:
await msg.finish(msg.locale.t('maimai.message.unbind.success'))
@mai.command('info <id_or_alias> [<username>] {{maimai.help.info}}')
async def _(msg: Bot.MessageSession, id_or_alias: str, username: str = None):
await query_song_info(msg, id_or_alias, username)
@mai_regex.regex(re.compile(r"(.+)\s?有什[么麼]分\s?(.+)?"), desc='{maimai.help.maimai_regex.info}')
async def _(msg: Bot.MessageSession):
songname = msg.matched_msg.groups()[0]
username = msg.matched_msg.groups()[1]
await query_song_info(msg, songname, username)
async def query_song_info(msg, query, username):
if query[:2].lower() == "id":
sid = query[2:]
else:
sid_list = await search_by_alias(msg, query)
if len(sid_list) == 0:
await msg.finish(msg.locale.t("maimai.message.music_not_found"))
elif len(sid_list) > 1:
res = msg.locale.t("maimai.message.song.prompt") + "\n"
for sid in sorted(sid_list, key=int):
s = (await mai_total_list.get()).by_id(sid)
res += f"{s['id']}\u200B. {s['title']}{' (DX)' if s['type'] == 'DX' else ''}\n"
await msg.finish(res.strip())
else:
sid = str(sid_list[0])
music = (await mai_total_list.get()).by_id(sid)
if not music:
await msg.finish(msg.locale.t("maimai.message.music_not_found"))
if not username:
if msg.target.sender_from == "QQ":
payload = {'qq': msg.session.sender}
else:
username = DivingProberBindInfoManager(msg).get_bind_username()
if not username:
await msg.finish(msg.locale.t("maimai.message.user_unbound", prefix=msg.prefixes[0]))
payload = {'username': username}
else:
payload = {'username': username}
output = await get_player_score(msg, payload, sid)
await msg.finish(await get_info(msg, music, Plain(output)))
@mai.command('plate <plate> [<username>] {{maimai.help.plate}}')
async def _(msg: Bot.MessageSession, plate: str, username: str = None):
await query_plate(msg, plate, username)
@mai_regex.regex(re.compile(r"(.?)([極极将將舞神者]舞?)[进進]度\s?(.+)?"), desc='{maimai.help.maimai_regex.plate}')
async def _(msg: Bot.MessageSession):
plate = msg.matched_msg.groups()[0] + msg.matched_msg.groups()[1]
username = msg.matched_msg.groups()[2]
await query_plate(msg, plate, username)
async def query_plate(msg, plate, username):
if not username:
if msg.target.sender_from == "QQ":
payload = {'qq': msg.session.sender}
else:
username = DivingProberBindInfoManager(msg).get_bind_username()
if not username:
await msg.finish(msg.locale.t("maimai.message.user_unbound", prefix=msg.prefixes[0]))
payload = {'username': username}
else:
payload = {'username': username}
if plate in ['真将', '真將'] or (plate[1] == '' and plate[0] != ''):
await msg.finish(msg.locale.t('maimai.message.plate.plate_not_found'))
output, get_img = await get_plate_process(msg, payload, plate)
if get_img:
img = await msgchain2image([Plain(output)], msg)
if img:
await msg.finish([BImage(img)])
else:
await msg.finish(output.strip())
else:
await msg.finish(output.strip())
@mai.command('process <level> <goal> [<username>] {{maimai.help.process}}')
async def _(msg: Bot.MessageSession, level: str, goal: str, username: str = None):
goal_list = ["A", "AA", "AAA", "S", "S+", "SS", "SS+", "SSS", "SSS+",
"FC", "FC+", "AP", "AP+", "FS", "FS+", "FDX", "FDX+"]
level_list = ['1', '2', '3', '4', '5', '6', '7', '7+', '8', '8+', '9', '9+',
'10', '10+', '11', '11+', '12', '12+', '13', '13+', '14', '14+', '15']
if not username:
if msg.target.sender_from == "QQ":
payload = {'qq': msg.session.sender}
else:
username = DivingProberBindInfoManager(msg).get_bind_username()
if not username:
await msg.finish(msg.locale.t("maimai.message.user_unbound", prefix=msg.prefixes[0]))
payload = {'username': username}
else:
payload = {'username': username}
if level in level_list:
level_num = int(level.split('+')[0])
if level_num < 8:
await msg.finish(msg.locale.t("maimai.message.process.less_than_8"))
else:
await msg.finish(msg.locale.t("maimai.message.level_invalid"))
if goal.upper() not in goal_list:
await msg.finish(msg.locale.t("maimai.message.goal_invalid"))
output, get_img = await get_level_process(msg, payload, level, goal)
if get_img:
img = await msgchain2image([Plain(output)])
if img:
await msg.finish([BImage(img)])
else:
await msg.finish(output.strip())
else:
await msg.finish(output.strip())
@mai.command('rank [<username>] {{maimai.help.rank}}')
async def _(msg: Bot.MessageSession, username: str = None):
if not username:
if msg.target.sender_from == "QQ":
payload = {'qq': msg.session.sender}
else:
username = DivingProberBindInfoManager(msg).get_bind_username()
if not username:
await msg.finish(msg.locale.t("maimai.message.user_unbound", prefix=msg.prefixes[0]))
payload = {'username': username}
else:
payload = {'username': username}
await get_rank(msg, payload)
@mai.command('scorelist <level> <page> [<username>] {{maimai.help.scorelist}}')
async def _(msg: Bot.MessageSession, level: str, page: str, username: str = None):
if not username:
if msg.target.sender_from == "QQ":
payload = {'qq': msg.session.sender}
else:
username = DivingProberBindInfoManager(msg).get_bind_username()
if not username:
await msg.finish(msg.locale.t("maimai.message.user_unbound", prefix=msg.prefixes[0]))
payload = {'username': username}
else:
payload = {'username': username}
output, get_img = await get_score_list(msg, payload, level, page)
if get_img:
img = await msgchain2image([Plain(output)])
if img:
await msg.finish([BImage(img)])
else:
await msg.finish(output.strip())
else:
await msg.finish([Plain(output.strip())])

View file

@ -166,7 +166,7 @@ async def _(msg: Bot.MessageSession, song: str, diff: str = None):
ds=ds, ds=ds,
combo=chart['combo'], combo=chart['combo'],
charter=chart['charter']) charter=chart['charter'])
await msg.finish(await get_info(msg, music, Plain(res))) await msg.finish(await get_info(music, Plain(res)))
else: else:
res = msg.locale.t( res = msg.locale.t(
"chunithm.message.song", "chunithm.message.song",
@ -175,7 +175,7 @@ async def _(msg: Bot.MessageSession, song: str, diff: str = None):
bpm=music['basic_info']['bpm'], bpm=music['basic_info']['bpm'],
version=music['basic_info']['from'], version=music['basic_info']['from'],
level='/'.join((str(ds) for ds in music['ds']))) level='/'.join((str(ds) for ds in music['ds'])))
await msg.finish(await get_info(msg, music, Plain(res))) await msg.finish(await get_info(music, Plain(res)))
@chu.command('random [<diff+level>] {{maimai.help.random}}') @chu.command('random [<diff+level>] {{maimai.help.random}}')
@ -193,7 +193,7 @@ async def _(msg: Bot.MessageSession):
if level == "": if level == "":
if diff == "": if diff == "":
music = (await total_list.get()).random() music = (await total_list.get()).random()
await msg.finish(await get_info(msg, music, Plain(f"{'/'.join(str(ds) for ds in music.ds)}"))) await msg.finish(await get_info(music, Plain(f"{'/'.join(str(ds) for ds in music.ds)}")))
else: else:
raise ValueError raise ValueError
else: else:
@ -206,6 +206,20 @@ async def _(msg: Bot.MessageSession):
await msg.finish(msg.locale.t("maimai.message.music_not_found")) await msg.finish(msg.locale.t("maimai.message.music_not_found"))
else: else:
music = music_data.random() music = music_data.random()
await msg.finish(await get_info(msg, music, Plain(f"{'/'.join(str(ds) for ds in music.ds)}"))) await msg.finish(await get_info(music, Plain(f"{'/'.join(str(ds) for ds in music.ds)}")))
except (ValueError, TypeError): except (ValueError, TypeError):
await msg.finish(msg.locale.t("maimai.message.random.failed")) await msg.finish(msg.locale.t("maimai.message.random.failed"))
@chu.handle('bind <username> {{maimai.help.bind}}', exclude_from=['QQ', 'QQ|Group'])
async def _(msg: Bot.MessageSession, username: str):
bind = DivingProberBindInfoManager(msg).set_bind_info(username=username)
if bind:
await msg.finish(msg.locale.t('maimai.message.bind.success') + username)
@chu.handle('unbind {{maimai.help.unbind}}', exclude_from=['QQ', 'QQ|Group'])
async def _(msg: Bot.MessageSession):
unbind = DivingProberBindInfoManager(msg).remove_bind_info()
if unbind:
await msg.finish(msg.locale.t('maimai.message.unbind.success'))

View file

@ -7,7 +7,7 @@ from core.utils.http import post_url
from .chunithm_music import Music from .chunithm_music import Music
async def get_info(msg: Bot.MessageSession, music: Music, *details): async def get_info(music: Music, *details):
info = [Plain(f"{music.id}\u200B. {music.title}")] info = [Plain(f"{music.id}\u200B. {music.title}")]
# 此处未来会添加图片 # 此处未来会添加图片
if details: if details:

View file

@ -3,6 +3,8 @@ import shutil
import traceback import traceback
import ujson as json import ujson as json
from langconv import Converter
from config import Config from config import Config
from core.builtins import Bot, Plain, Image from core.builtins import Bot, Plain, Image
from core.logger import Logger from core.logger import Logger
@ -54,7 +56,7 @@ async def update_covers():
return True return True
async def get_info(msg: Bot.MessageSession, music: Music, *details): async def get_info(music: Music, *details):
info = [Plain(f"{music.id}\u200B. {music.title}{' (DX)' if music['type'] == 'DX' else ''}")] info = [Plain(f"{music.id}\u200B. {music.title}{' (DX)' if music['type'] == 'DX' else ''}")]
try: try:
img = f"https://www.diving-fish.com/covers/{get_cover_len5_id(music.id)}.png" img = f"https://www.diving-fish.com/covers/{get_cover_len5_id(music.id)}.png"
@ -67,7 +69,7 @@ async def get_info(msg: Bot.MessageSession, music: Music, *details):
return info return info
async def get_alias(msg, sid): async def get_alias(msg: Bot.MessageSession, sid):
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):
@ -82,9 +84,10 @@ async def get_alias(msg, sid):
return result return result
async def search_by_alias(msg, input_): async def search_by_alias(input_):
result = [] result = []
input_ = input_.replace("_", " ").strip().lower() input_ = input_.replace("_", " ").strip().lower()
convinput = Converter('zh_hans').convert(input_)
res = (await total_list.get()).filter(title=input_) res = (await total_list.get()).filter(title=input_)
for s in res: for s in res:
result.append(s['id']) result.append(s['id'])
@ -99,7 +102,7 @@ async def search_by_alias(msg, input_):
for sid, aliases in data.items(): for sid, aliases in data.items():
aliases = [alias.lower() for alias in aliases] aliases = [alias.lower() for alias in aliases]
if input_ in aliases: if input_ in aliases or convinput in aliases:
if sid in result: if sid in result:
result.remove(sid) result.remove(sid)
result.append(sid) # 此处的列表是歌曲 ID 列表 result.append(sid) # 此处的列表是歌曲 ID 列表
@ -107,7 +110,7 @@ async def search_by_alias(msg, input_):
return result return result
async def get_record(msg, payload): async def get_record(msg: Bot.MessageSession, payload):
url = f"https://www.diving-fish.com/api/maimaidxprober/query/player" url = f"https://www.diving-fish.com/api/maimaidxprober/query/player"
try: try:
data = await post_url(url, data = await post_url(url,
@ -131,7 +134,7 @@ async def get_record(msg, payload):
return data return data
async def get_plate(msg, payload): async def get_plate(msg: Bot.MessageSession, payload):
url = f"https://www.diving-fish.com/api/maimaidxprober/query/plate" url = f"https://www.diving-fish.com/api/maimaidxprober/query/plate"
try: try:
data = await post_url(url, data = await post_url(url,

View file

@ -185,6 +185,20 @@ async def _(msg: Bot.MessageSession, grade: str):
await get_grade_info(msg, grade) await get_grade_info(msg, grade)
@mai.handle('bind <username> {{maimai.help.bind}}', exclude_from=['QQ', 'QQ|Group'])
async def _(msg: Bot.MessageSession, username: str):
bind = DivingProberBindInfoManager(msg).set_bind_info(username=username)
if bind:
await msg.finish(msg.locale.t('maimai.message.bind.success') + username)
@mai.handle('unbind {{maimai.help.unbind}}', exclude_from=['QQ', 'QQ|Group'])
async def _(msg: Bot.MessageSession):
unbind = DivingProberBindInfoManager(msg).remove_bind_info()
if unbind:
await msg.finish(msg.locale.t('maimai.message.unbind.success'))
@mai.command(['b50 [<username>] {{maimai.help.b50}}', @mai.command(['b50 [<username>] {{maimai.help.b50}}',
'b50 beta [<username>] {{maimai.help.b50.beta}}']) 'b50 beta [<username>] {{maimai.help.b50.beta}}'])
async def _(msg: Bot.MessageSession, username: str = None): async def _(msg: Bot.MessageSession, username: str = None):
@ -219,7 +233,7 @@ async def _(msg: Bot.MessageSession, id_or_alias: str, diff: str = None):
elif id_or_alias[:2].lower() == "id": elif id_or_alias[:2].lower() == "id":
sid = id_or_alias[2:] sid = id_or_alias[2:]
else: else:
sid_list = await search_by_alias(msg, id_or_alias) sid_list = await search_by_alias(id_or_alias)
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:
@ -264,7 +278,7 @@ async def _(msg: Bot.MessageSession, id_or_alias: str, diff: str = None):
touch=chart['notes'][3], touch=chart['notes'][3],
brk=chart['notes'][4], brk=chart['notes'][4],
charter=chart['charter']) charter=chart['charter'])
await msg.finish(await get_info(msg, music, Plain(res))) await msg.finish(await get_info(music, Plain(res)))
else: else:
res = msg.locale.t( res = msg.locale.t(
"maimai.message.song", "maimai.message.song",
@ -273,7 +287,162 @@ async def _(msg: Bot.MessageSession, id_or_alias: str, diff: str = None):
bpm=music['basic_info']['bpm'], bpm=music['basic_info']['bpm'],
version=music['basic_info']['from'], version=music['basic_info']['from'],
level='/'.join((str(ds) for ds in music['ds']))) level='/'.join((str(ds) for ds in music['ds'])))
await msg.finish(await get_info(msg, music, Plain(res))) await msg.finish(await get_info(music, Plain(res)))
@mai.command('info <id_or_alias> [<username>] {{maimai.help.info}}')
async def _(msg: Bot.MessageSession, id_or_alias: str, username: str = None):
await query_song_info(msg, id_or_alias, username)
async def query_song_info(msg, query, username):
if query[:2].lower() == "id":
sid = query[2:]
else:
sid_list = await search_by_alias(query)
if len(sid_list) == 0:
await msg.finish(msg.locale.t("maimai.message.music_not_found"))
elif len(sid_list) > 1:
res = msg.locale.t("maimai.message.song.prompt") + "\n"
for sid in sorted(sid_list, key=int):
s = (await total_list.get()).by_id(sid)
res += f"{s['id']}\u200B. {s['title']}{' (DX)' if s['type'] == 'DX' else ''}\n"
await msg.finish(res.strip())
else:
sid = str(sid_list[0])
music = (await total_list.get()).by_id(sid)
if not music:
await msg.finish(msg.locale.t("maimai.message.music_not_found"))
if not username:
if msg.target.sender_from == "QQ":
payload = {'qq': msg.session.sender}
else:
username = DivingProberBindInfoManager(msg).get_bind_username()
if not username:
await msg.finish(msg.locale.t("maimai.message.user_unbound", prefix=msg.prefixes[0]))
payload = {'username': username}
else:
payload = {'username': username}
output = await get_player_score(msg, payload, sid)
await msg.finish(await get_info(music, Plain(output)))
@mai.command('plate <plate> [<username>] {{maimai.help.plate}}')
async def _(msg: Bot.MessageSession, plate: str, username: str = None):
await query_plate(msg, plate, username)
async def query_plate(msg, plate, username):
if not username:
if msg.target.sender_from == "QQ":
payload = {'qq': msg.session.sender}
else:
username = DivingProberBindInfoManager(msg).get_bind_username()
if not username:
await msg.finish(msg.locale.t("maimai.message.user_unbound", prefix=msg.prefixes[0]))
payload = {'username': username}
else:
payload = {'username': username}
if plate in ['真将', '真將'] or (plate[1] == '' and plate[0] != ''):
await msg.finish(msg.locale.t('maimai.message.plate.plate_not_found'))
output, get_img = await get_plate_process(msg, payload, plate)
if get_img:
img = await msgchain2image([Plain(output)], msg)
if img:
await msg.finish([BImage(img)])
else:
await msg.finish(output.strip())
else:
await msg.finish(output.strip())
@mai.command('process <level> <goal> [<username>] {{maimai.help.process}}')
async def _(msg: Bot.MessageSession, level: str, goal: str, username: str = None):
goal_list = ["A", "AA", "AAA", "S", "S+", "SS", "SS+", "SSS", "SSS+",
"FC", "FC+", "AP", "AP+", "FS", "FS+", "FDX", "FDX+"]
level_list = ['1', '2', '3', '4', '5', '6', '7', '7+', '8', '8+', '9', '9+',
'10', '10+', '11', '11+', '12', '12+', '13', '13+', '14', '14+', '15']
if not username:
if msg.target.sender_from == "QQ":
payload = {'qq': msg.session.sender}
else:
username = DivingProberBindInfoManager(msg).get_bind_username()
if not username:
await msg.finish(msg.locale.t("maimai.message.user_unbound", prefix=msg.prefixes[0]))
payload = {'username': username}
else:
payload = {'username': username}
if level in level_list:
level_num = int(level.split('+')[0])
if level_num < 8:
await msg.finish(msg.locale.t("maimai.message.process.less_than_8"))
else:
await msg.finish(msg.locale.t("maimai.message.level_invalid"))
if goal.upper() not in goal_list:
await msg.finish(msg.locale.t("maimai.message.goal_invalid"))
output, get_img = await get_level_process(msg, payload, level, goal)
if get_img:
img = await msgchain2image([Plain(output)])
if img:
await msg.finish([BImage(img)])
else:
await msg.finish(output.strip())
else:
await msg.finish(output.strip())
@mai.command('rank [<username>] {{maimai.help.rank}}')
async def _(msg: Bot.MessageSession, username: str = None):
if not username:
if msg.target.sender_from == "QQ":
payload = {'qq': msg.session.sender}
else:
username = DivingProberBindInfoManager(msg).get_bind_username()
if not username:
await msg.finish(msg.locale.t("maimai.message.user_unbound", prefix=msg.prefixes[0]))
payload = {'username': username}
else:
payload = {'username': username}
await get_rank(msg, payload)
@mai.command('scorelist <level> <page> [<username>] {{maimai.help.scorelist}}')
async def _(msg: Bot.MessageSession, level: str, page: str, username: str = None):
if not username:
if msg.target.sender_from == "QQ":
payload = {'qq': msg.session.sender}
else:
username = DivingProberBindInfoManager(msg).get_bind_username()
if not username:
await msg.finish(msg.locale.t("maimai.message.user_unbound", prefix=msg.prefixes[0]))
payload = {'username': username}
else:
payload = {'username': username}
output, get_img = await get_score_list(msg, payload, level, page)
if get_img:
img = await msgchain2image([Plain(output)])
if img:
await msg.finish([BImage(img)])
else:
await msg.finish(output.strip())
else:
await msg.finish([Plain(output.strip())])
@mai.command('random <diff+level> [<dx_type>] {{maimai.help.random.filter}}') @mai.command('random <diff+level> [<dx_type>] {{maimai.help.random.filter}}')
@ -310,7 +479,7 @@ async def _(msg: Bot.MessageSession, dx_type: str = None):
await msg.finish(msg.locale.t("maimai.message.music_not_found")) await msg.finish(msg.locale.t("maimai.message.music_not_found"))
else: else:
music = music_data.random() music = music_data.random()
await msg.finish(await get_info(msg, music, Plain(f"{'/'.join(str(ds) for ds in music.ds)}"))) await msg.finish(await get_info(music, Plain(f"{'/'.join(str(ds) for ds in music.ds)}")))
except (ValueError, TypeError): except (ValueError, TypeError):
await msg.finish(msg.locale.t("maimai.message.random.failed")) await msg.finish(msg.locale.t("maimai.message.random.failed"))
@ -318,7 +487,7 @@ async def _(msg: Bot.MessageSession, dx_type: str = None):
@mai.command('random {{maimai.help.random}}') @mai.command('random {{maimai.help.random}}')
async def _(msg: Bot.MessageSession): async def _(msg: Bot.MessageSession):
music = (await total_list.get()).random() music = (await total_list.get()).random()
await msg.finish(await get_info(msg, music, Plain(f"{'/'.join(str(ds) for ds in music.ds)}"))) await msg.finish(await get_info(music, Plain(f"{'/'.join(str(ds) for ds in music.ds)}")))
@mai.command('scoreline <sid> <diff> <score> {{maimai.help.scoreline}}') @mai.command('scoreline <sid> <diff> <score> {{maimai.help.scoreline}}')

View file

@ -5,6 +5,7 @@ from core.component import module
from .libraries.maimaidx_apidata import get_alias, get_info, search_by_alias from .libraries.maimaidx_apidata import get_alias, get_info, search_by_alias
from .libraries.maimaidx_music import TotalList from .libraries.maimaidx_music import TotalList
from .libraries.maimaidx_utils import get_diff, get_grade_info from .libraries.maimaidx_utils import get_diff, get_grade_info
from .maimai import query_plate, query_song_info
total_list = TotalList() total_list = TotalList()
@ -23,7 +24,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 search_by_alias(msg, name) sid_list = await search_by_alias(name)
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:
@ -38,7 +39,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"))
await msg.finish(await get_info(msg, music, Plain(msg.locale.t("maimai.message.song", await msg.finish(await get_info(music, Plain(msg.locale.t("maimai.message.song",
artist=music['basic_info']['artist'], artist=music['basic_info']['artist'],
genre=music['basic_info']['genre'], genre=music['basic_info']['genre'],
bpm=music['basic_info']['bpm'], bpm=music['basic_info']['bpm'],
@ -62,6 +63,20 @@ async def _(msg: Bot.MessageSession):
await msg.finish([Plain(result.strip())]) await msg.finish([Plain(result.strip())])
@mai_regex.regex(re.compile(r"(.+)\s?有什[么麼]分\s?(.+)?"), desc='{maimai.help.maimai_regex.info}')
async def _(msg: Bot.MessageSession):
songname = msg.matched_msg.groups()[0]
username = msg.matched_msg.groups()[1]
await query_song_info(msg, songname, username)
@mai_regex.regex(re.compile(r"(.?)([極极将將舞神者]舞?)[进進]度\s?(.+)?"), desc='{maimai.help.maimai_regex.plate}')
async def _(msg: Bot.MessageSession):
plate = msg.matched_msg.groups()[0] + msg.matched_msg.groups()[1]
username = msg.matched_msg.groups()[2]
await query_plate(msg, plate, username)
@mai_regex.regex(re.compile(r"(?:随个|隨個)\s?((?:dx|DX|sd|SD|标准|標準)\s?)?([绿綠黄黃红紅紫白]?)\s?([0-9]+\+?)"), @mai_regex.regex(re.compile(r"(?:随个|隨個)\s?((?:dx|DX|sd|SD|标准|標準)\s?)?([绿綠黄黃红紅紫白]?)\s?([0-9]+\+?)"),
desc="{maimai.help.maimai_regex.random}") desc="{maimai.help.maimai_regex.random}")
async def _(msg: Bot.MessageSession): async def _(msg: Bot.MessageSession):
@ -84,7 +99,7 @@ async def _(msg: Bot.MessageSession):
await msg.finish(msg.locale.t("maimai.message.music_not_found")) await msg.finish(msg.locale.t("maimai.message.music_not_found"))
else: else:
music = music_data.random() music = music_data.random()
await msg.finish(await get_info(msg, music, Plain(f"\n{'/'.join(str(ds) for ds in music.ds)}"))) await msg.finish(await get_info(music, Plain(f"\n{'/'.join(str(ds) for ds in music.ds)}")))
except ValueError: except ValueError:
await msg.finish(msg.locale.t("maimai.message.random.failed")) await msg.finish(msg.locale.t("maimai.message.random.failed"))