Upd
This commit is contained in:
parent
f23f6bfdc1
commit
9a8ee2d6ef
10 changed files with 223 additions and 240 deletions
|
@ -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)
|
||||||
|
|
|
@ -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。"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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。"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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。"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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())])
|
|
|
@ -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'))
|
|
@ -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:
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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}}')
|
||||||
|
|
|
@ -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"))
|
||||||
|
|
||||||
|
|
Reference in a new issue