2021-10-12 15:02:36 +00:00
|
|
|
|
import re
|
|
|
|
|
|
2023-02-05 14:33:33 +00:00
|
|
|
|
from core.builtins import Bot, Plain, Image as BImage
|
2023-03-04 08:51:56 +00:00
|
|
|
|
from core.component import module
|
2022-08-04 07:52:42 +00:00
|
|
|
|
from core.logger import Logger
|
2023-06-05 04:10:27 +00:00
|
|
|
|
from core.utils.image import msgchain2image
|
2021-10-12 15:02:36 +00:00
|
|
|
|
from modules.maimai.libraries.image import *
|
|
|
|
|
from modules.maimai.libraries.maimai_best_40 import generate
|
2022-07-12 17:27:34 +00:00
|
|
|
|
from modules.maimai.libraries.maimai_best_50 import generate50
|
2021-11-12 14:25:53 +00:00
|
|
|
|
from modules.maimai.libraries.maimaidx_music import *
|
2023-03-04 08:51:56 +00:00
|
|
|
|
from modules.maimai.libraries.tool import hash_
|
2021-10-12 15:02:36 +00:00
|
|
|
|
|
2022-05-13 13:54:12 +00:00
|
|
|
|
total_list = TotalList()
|
|
|
|
|
|
2023-06-02 01:48:55 +00:00
|
|
|
|
diff_label = ['Basic', 'Advanced', 'Expert', 'Master', 'Re:MASTER']
|
2023-06-01 17:08:10 +00:00
|
|
|
|
diff_label_abbr = ['bas', 'adv', 'exp', 'mas', 'rem']
|
2023-05-28 05:57:27 +00:00
|
|
|
|
diff_label_zhs = ['绿', '黄', '红', '紫', '白']
|
2023-05-28 06:20:26 +00:00
|
|
|
|
diff_label_zht = ['綠', '黃', '紅']
|
2023-05-28 05:57:27 +00:00
|
|
|
|
|
2022-05-13 13:54:12 +00:00
|
|
|
|
|
2021-10-12 15:02:36 +00:00
|
|
|
|
def song_txt(music: Music):
|
|
|
|
|
return [Plain(f"{music.id}. {music.title}\n"),
|
2022-07-12 17:27:34 +00:00
|
|
|
|
BImage(f"https://www.diving-fish.com/covers/{get_cover_len4_id(music.id)}.png", ),
|
2021-10-12 15:02:36 +00:00
|
|
|
|
Plain(f"\n{'/'.join(music.level)}")]
|
|
|
|
|
|
|
|
|
|
|
2023-05-28 06:05:43 +00:00
|
|
|
|
def get_label(diff):
|
2023-06-01 17:08:10 +00:00
|
|
|
|
diff = diff.lower()
|
2023-06-02 01:48:55 +00:00
|
|
|
|
diff_label_lower = [label.lower() for label in diff_label]
|
|
|
|
|
|
2023-05-28 05:57:27 +00:00
|
|
|
|
if diff in diff_label_zhs:
|
|
|
|
|
level = diff_label_zhs.index(diff)
|
|
|
|
|
elif diff in diff_label_zht:
|
|
|
|
|
level = diff_label_zht.index(diff)
|
2023-06-01 17:08:10 +00:00
|
|
|
|
elif diff in diff_label_abbr:
|
|
|
|
|
level = diff_label_abbr.index(diff)
|
2023-06-02 01:48:55 +00:00
|
|
|
|
elif diff in diff_label_lower:
|
|
|
|
|
level = diff_label_lower.index(diff)
|
2023-05-28 05:57:27 +00:00
|
|
|
|
else:
|
2023-05-28 06:04:14 +00:00
|
|
|
|
level = None
|
2023-05-28 05:57:27 +00:00
|
|
|
|
return level
|
|
|
|
|
|
2021-10-12 15:02:36 +00:00
|
|
|
|
|
2023-06-02 01:48:55 +00:00
|
|
|
|
|
2023-06-01 17:08:10 +00:00
|
|
|
|
mai = module('maimai', developers=['mai-bot', 'OasisAkari', 'DoroWolf'], alias='mai',
|
|
|
|
|
desc='{maimai.help.desc}')
|
2021-10-24 10:55:45 +00:00
|
|
|
|
|
|
|
|
|
|
2023-05-27 09:33:10 +00:00
|
|
|
|
|
2023-05-27 12:44:55 +00:00
|
|
|
|
@mai.handle('level <level> {{maimai.help.level}}')
|
|
|
|
|
async def _(msg: Bot.MessageSession):
|
|
|
|
|
level = msg.parsed_msg['<level>']
|
2023-05-27 12:46:03 +00:00
|
|
|
|
result_set = await diff_level_q(level)
|
2023-05-27 12:44:55 +00:00
|
|
|
|
s = msg.locale.t("maimai.message.level", level=level) + "\n"
|
|
|
|
|
for elem in result_set:
|
2023-06-02 04:20:42 +00:00
|
|
|
|
s += f"{elem[0]} {elem[1]}{' (DX)' if elem[5] == 'DX' else ''} {elem[3]} {elem[4]} ({elem[2]})\n"
|
2023-05-27 13:15:53 +00:00
|
|
|
|
if len(result_set) == 0:
|
|
|
|
|
return await msg.finish(msg.locale.t("maimai.message.music_not_found"))
|
2023-05-28 02:20:17 +00:00
|
|
|
|
if len(result_set) <= 10:
|
|
|
|
|
await msg.finish(s.strip())
|
2023-05-28 02:15:08 +00:00
|
|
|
|
else:
|
2023-06-05 04:10:27 +00:00
|
|
|
|
img = await msgchain2image([Plain(s)])
|
2023-05-28 02:15:08 +00:00
|
|
|
|
await msg.finish([BImage(img)])
|
|
|
|
|
|
2023-05-28 04:18:15 +00:00
|
|
|
|
async def diff_level_q(level):
|
|
|
|
|
result_set = []
|
|
|
|
|
music_data = (await total_list.get()).filter(level=level)
|
|
|
|
|
for music in sorted(music_data, key=lambda i: int(i['id'])):
|
|
|
|
|
for i in music.diff:
|
2023-06-02 04:16:55 +00:00
|
|
|
|
result_set.append((music['id'], music['title'], music['ds'][i], diff_label[i], music['level'][i], music['type']))
|
2023-05-28 04:18:15 +00:00
|
|
|
|
return result_set
|
2023-05-27 12:44:55 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-27 09:19:33 +00:00
|
|
|
|
@mai.handle('inner <rating> [<rating_max>] {{maimai.help.inner}}')
|
2023-02-05 14:33:33 +00:00
|
|
|
|
async def _(msg: Bot.MessageSession):
|
2023-05-27 10:19:24 +00:00
|
|
|
|
try:
|
2023-05-27 10:20:37 +00:00
|
|
|
|
rating = float(msg.parsed_msg['<rating>'])
|
2023-05-27 10:19:24 +00:00
|
|
|
|
except ValueError:
|
|
|
|
|
return await msg.finish(msg.locale.t('error.range.notnumber'))
|
2023-05-27 10:35:36 +00:00
|
|
|
|
rating_max = msg.parsed_msg.get('<rating_max>')
|
|
|
|
|
if rating_max is not None:
|
|
|
|
|
try:
|
|
|
|
|
rating_max = float(rating_max)
|
|
|
|
|
except ValueError:
|
|
|
|
|
return await msg.finish(msg.locale.t('error.range.notnumber'))
|
|
|
|
|
if rating > rating_max:
|
|
|
|
|
return await msg.finish(msg.locale.t('error.range.invalid'))
|
2023-05-27 10:19:24 +00:00
|
|
|
|
result_set = await inner_level_q(rating, rating_max)
|
|
|
|
|
s = msg.locale.t("maimai.message.inner.range", rating=round(rating, 1), rating_max=round(rating_max, 1)) + "\n"
|
2023-05-27 10:35:36 +00:00
|
|
|
|
else:
|
|
|
|
|
result_set = await inner_level_q(rating)
|
|
|
|
|
s = msg.locale.t("maimai.message.inner", rating=round(rating, 1)) + "\n"
|
2021-10-12 15:02:36 +00:00
|
|
|
|
for elem in result_set:
|
2023-06-02 04:20:42 +00:00
|
|
|
|
s += f"{elem[0]} {elem[1]}{' (DX)' if elem[5] == 'DX' else ''} {elem[3]} {elem[4]} ({elem[2]})\n"
|
2023-05-27 13:23:52 +00:00
|
|
|
|
if len(result_set) == 0:
|
|
|
|
|
return await msg.finish(msg.locale.t("maimai.message.music_not_found"))
|
2023-05-27 10:23:41 +00:00
|
|
|
|
if len(result_set) > 200:
|
2023-05-27 03:33:49 +00:00
|
|
|
|
return await msg.finish(msg.locale.t("maimai.message.too_much", length=len(result_set)))
|
2023-05-28 02:20:17 +00:00
|
|
|
|
if len(result_set) <= 10:
|
|
|
|
|
await msg.finish(s.strip())
|
2023-05-28 02:15:08 +00:00
|
|
|
|
else:
|
2023-06-05 04:10:27 +00:00
|
|
|
|
img = await msgchain2image([Plain(s)])
|
2023-05-28 02:15:08 +00:00
|
|
|
|
await msg.finish([BImage(img)])
|
2021-10-12 15:02:36 +00:00
|
|
|
|
|
2023-05-28 04:18:15 +00:00
|
|
|
|
async def inner_level_q(ds1, ds2=None):
|
|
|
|
|
result_set = []
|
|
|
|
|
if ds2 is not None:
|
|
|
|
|
music_data = (await total_list.get()).filter(ds=(ds1, ds2))
|
|
|
|
|
else:
|
|
|
|
|
music_data = (await total_list.get()).filter(ds=ds1)
|
|
|
|
|
for music in sorted(music_data, key=lambda i: int(i['id'])):
|
|
|
|
|
for i in music.diff:
|
2023-06-02 04:16:55 +00:00
|
|
|
|
result_set.append((music['id'], music['title'], music['ds'][i], diff_label[i], music['level'][i], music['type']))
|
2023-05-28 04:18:15 +00:00
|
|
|
|
return result_set
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@mai.handle('search <keyword> {{maimai.help.search}}')
|
|
|
|
|
async def _(msg: Bot.MessageSession):
|
2023-05-28 04:28:55 +00:00
|
|
|
|
name = msg.parsed_msg['<keyword>'].strip()
|
2023-05-28 04:51:41 +00:00
|
|
|
|
if name == "":
|
|
|
|
|
return
|
|
|
|
|
res = (await total_list.get()).filter(title_search=name)
|
|
|
|
|
if len(res) == 0:
|
2023-05-28 04:18:15 +00:00
|
|
|
|
return await msg.finish(msg.locale.t("maimai.message.music_not_found"))
|
2023-05-28 04:51:41 +00:00
|
|
|
|
if len(res) > 200:
|
2023-06-01 06:25:50 +00:00
|
|
|
|
return await msg.finish(msg.locale.t("maimai.message.too_much", length=len(res)))
|
2023-05-28 04:18:15 +00:00
|
|
|
|
else:
|
2023-05-31 14:45:50 +00:00
|
|
|
|
search_result = msg.locale.t("maimai.message.search", keyword=name) + "\n"
|
2023-05-28 04:51:41 +00:00
|
|
|
|
for music in sorted(res, key=lambda i: int(i['id'])):
|
2023-06-02 04:05:55 +00:00
|
|
|
|
search_result += f"{music['id']} {music['title']}{' (DX)' if music['type'] == 'DX' else ''}\n"
|
2023-05-28 04:51:41 +00:00
|
|
|
|
if len(res) <= 10:
|
|
|
|
|
await msg.finish([Plain(search_result.strip())])
|
|
|
|
|
else:
|
2023-06-05 04:10:27 +00:00
|
|
|
|
img = await msgchain2image([Plain(search_result)])
|
2023-05-28 04:51:41 +00:00
|
|
|
|
await msg.finish([BImage(img)])
|
2023-05-28 04:18:15 +00:00
|
|
|
|
|
2021-10-12 15:02:36 +00:00
|
|
|
|
|
2023-05-27 09:51:31 +00:00
|
|
|
|
|
2023-05-21 06:41:50 +00:00
|
|
|
|
@mai.handle('b40 [<username>] {{maimai.help.b40}}')
|
2023-02-05 14:33:33 +00:00
|
|
|
|
async def _(msg: Bot.MessageSession):
|
2023-05-19 14:56:46 +00:00
|
|
|
|
username = msg.parsed_msg.get('<username>', None)
|
2023-05-19 15:00:36 +00:00
|
|
|
|
if username is None and msg.target.senderFrom == "QQ":
|
2021-10-12 15:02:36 +00:00
|
|
|
|
payload = {'qq': msg.session.sender}
|
|
|
|
|
else:
|
2023-05-19 15:00:36 +00:00
|
|
|
|
if username is None:
|
2023-05-21 06:41:50 +00:00
|
|
|
|
await msg.finish(msg.locale.t("maimai.message.no_username"))
|
2021-10-12 15:02:36 +00:00
|
|
|
|
payload = {'username': username}
|
|
|
|
|
img, success = await generate(payload)
|
|
|
|
|
if success == 400:
|
2023-05-27 11:37:21 +00:00
|
|
|
|
await msg.finish(msg.locale.t("maimai.message.user_not_found"))
|
2021-10-12 15:02:36 +00:00
|
|
|
|
elif success == 403:
|
2023-05-21 06:41:50 +00:00
|
|
|
|
await msg.finish(msg.locale.t("maimai.message.forbidden"))
|
2021-10-12 15:02:36 +00:00
|
|
|
|
else:
|
2022-05-22 14:12:30 +00:00
|
|
|
|
if img:
|
|
|
|
|
await msg.finish([BImage(img)])
|
2022-07-12 17:27:34 +00:00
|
|
|
|
|
|
|
|
|
|
2023-05-28 04:18:15 +00:00
|
|
|
|
|
2023-05-21 06:41:50 +00:00
|
|
|
|
@mai.handle('b50 [<username>] {{maimai.help.b50}}')
|
2023-02-05 14:33:33 +00:00
|
|
|
|
async def _(msg: Bot.MessageSession):
|
2023-05-19 14:56:46 +00:00
|
|
|
|
username = msg.parsed_msg.get('<username>', None)
|
2023-05-19 15:00:36 +00:00
|
|
|
|
if username is None and msg.target.senderFrom == "QQ":
|
2023-01-28 05:53:11 +00:00
|
|
|
|
payload = {'qq': msg.session.sender, 'b50': True}
|
2022-07-12 17:27:34 +00:00
|
|
|
|
else:
|
2023-05-19 15:00:36 +00:00
|
|
|
|
if username is None:
|
2023-05-21 06:41:50 +00:00
|
|
|
|
await msg.finish(msg.locale.t("maimai.message.no_username"))
|
2023-01-28 05:53:11 +00:00
|
|
|
|
payload = {'username': username, 'b50': True}
|
2022-07-12 17:27:34 +00:00
|
|
|
|
img, success = await generate50(payload)
|
|
|
|
|
if success == 400:
|
2023-05-27 11:37:21 +00:00
|
|
|
|
await msg.finish(msg.locale.t("maimai.message.user_not_found"))
|
2022-07-12 17:27:34 +00:00
|
|
|
|
elif success == 403:
|
2023-05-21 06:41:50 +00:00
|
|
|
|
await msg.finish(msg.locale.t("maimai.message.forbidden"))
|
2022-07-12 17:27:34 +00:00
|
|
|
|
else:
|
|
|
|
|
if img:
|
|
|
|
|
await msg.finish([BImage(img)])
|
2023-05-21 06:41:50 +00:00
|
|
|
|
|
2023-05-27 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
|
2023-06-05 09:01:14 +00:00
|
|
|
|
@mai.handle('random <diff> <level> [<type>] {{maimai.help.random.filter}}')
|
|
|
|
|
async def _(msg: Bot.MessageSession):
|
|
|
|
|
diff = msg.parsed_msg['<diff>']
|
|
|
|
|
level = msg.parsed_msg['<level>']
|
|
|
|
|
tp = msg.parsed_msg.get('<type>', None)
|
|
|
|
|
try:
|
|
|
|
|
if tp == "dx":
|
|
|
|
|
tp = ["DX"]
|
|
|
|
|
elif tp in ["sd", "标准", "標準"]:
|
|
|
|
|
tp = ["SD"]
|
|
|
|
|
else:
|
|
|
|
|
tp = ["SD", "DX"]
|
|
|
|
|
|
|
|
|
|
if diff == "#":
|
|
|
|
|
if level == "#":
|
|
|
|
|
music_data = (await total_list.get()).filter(type=tp)
|
|
|
|
|
else:
|
|
|
|
|
music_data = (await total_list.get()).filter(level=level, type=tp)
|
|
|
|
|
else:
|
|
|
|
|
diff_index = get_label(diff)
|
|
|
|
|
if level == "#":
|
|
|
|
|
music_data = (await total_list.get()).filter(diff=diff_index, type=tp)
|
|
|
|
|
else:
|
|
|
|
|
music_data = (await total_list.get()).filter(level=level, diff=diff_index, type=tp)
|
|
|
|
|
|
|
|
|
|
if len(music_data) == 0:
|
|
|
|
|
rand_result = msg.locale.t("maimai.message.music_not_found")
|
|
|
|
|
else:
|
|
|
|
|
rand_result = song_txt(music_data.random())
|
|
|
|
|
await msg.finish(rand_result)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
Logger.error(e)
|
|
|
|
|
await msg.finish(msg.locale.t("maimai.message.random.error"))
|
|
|
|
|
|
|
|
|
|
|
2023-05-27 12:15:10 +00:00
|
|
|
|
@mai.handle('random {{maimai.help.random}}')
|
2023-05-27 03:20:04 +00:00
|
|
|
|
async def _(msg: Bot.MessageSession):
|
|
|
|
|
await msg.finish(song_txt((await total_list.get()).random()))
|
|
|
|
|
|
2023-05-28 05:23:05 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@mai.handle('song <id> [<diff>] {{maimai.help.song}}')
|
|
|
|
|
async def _(message: Bot.MessageSession):
|
2023-05-28 05:27:18 +00:00
|
|
|
|
id = message.parsed_msg['<id>']
|
|
|
|
|
diff = message.parsed_msg.get('<diff>', None)
|
2023-05-28 05:23:05 +00:00
|
|
|
|
if diff is not None:
|
|
|
|
|
try:
|
2023-06-05 09:01:14 +00:00
|
|
|
|
diff_index = get_label(diff)
|
2023-05-28 05:23:05 +00:00
|
|
|
|
name = id
|
|
|
|
|
music = (await total_list.get()).by_id(name)
|
2023-06-05 09:01:14 +00:00
|
|
|
|
chart = music['charts'][diff_index]
|
|
|
|
|
ds = music['ds'][diff_index]
|
|
|
|
|
level = music['level'][diff_index]
|
2023-05-28 05:23:05 +00:00
|
|
|
|
file = f"https://www.diving-fish.com/covers/{get_cover_len4_id(music['id'])}.png"
|
|
|
|
|
if len(chart['notes']) == 4:
|
2023-06-05 09:01:14 +00:00
|
|
|
|
msg = message.locale.t("maimai.message.song.sd", diff=diff_label[diff_index], level=level, ds=ds,
|
2023-05-28 05:24:29 +00:00
|
|
|
|
tap=chart['notes'][0], hold=chart['notes'][1], slide=chart['notes'][2], _break=chart['notes'][3],
|
2023-05-28 05:23:05 +00:00
|
|
|
|
charter=chart['charter'])
|
|
|
|
|
else:
|
2023-06-05 09:01:14 +00:00
|
|
|
|
msg = message.locale.t("maimai.message.song.dx", diff=diff_label[diff_index], level=level, ds=ds,
|
2023-05-28 05:24:29 +00:00
|
|
|
|
tap=chart['notes'][0], hold=chart['notes'][1], slide=chart['notes'][2], touch=chart['notes'][3], _break=chart['notes'][4],
|
2023-05-28 05:23:05 +00:00
|
|
|
|
charter=chart['charter'])
|
2023-06-02 04:10:24 +00:00
|
|
|
|
await message.finish([Plain(f"{music['id']} {music['title']} {' (DX)' if music['type'] == 'DX' else ''}\n"), BImage(f"{file}"), Plain(msg)])
|
2023-05-28 05:23:05 +00:00
|
|
|
|
except Exception:
|
|
|
|
|
await message.finish(message.locale.t("maimai.message.chart_not_found"))
|
|
|
|
|
else:
|
|
|
|
|
name = id
|
|
|
|
|
music = (await total_list.get()).by_id(name)
|
|
|
|
|
try:
|
|
|
|
|
file = f"https://www.diving-fish.com/covers/{get_cover_len4_id(music['id'])}.png"
|
2023-06-02 04:10:24 +00:00
|
|
|
|
await message.finish([Plain(f"{music['id']} {music['title']} {' (DX)' if music['type'] == 'DX' else ''}\n"),
|
2023-05-28 05:23:05 +00:00
|
|
|
|
BImage(f"{file}"),
|
|
|
|
|
Plain(message.locale.t("maimai.message.song",
|
|
|
|
|
artist=music['basic_info']['artist'], genre=music['basic_info']['genre'],
|
|
|
|
|
bpm=music['basic_info']['bpm'], version=music['basic_info']['from'],
|
2023-06-02 01:58:31 +00:00
|
|
|
|
level='/'.join(music['level'])))])
|
2023-05-28 05:23:05 +00:00
|
|
|
|
except Exception:
|
|
|
|
|
await message.finish(message.locale.t("maimai.message.music_not_found"))
|
|
|
|
|
|
2023-05-21 06:41:50 +00:00
|
|
|
|
|
|
|
|
|
|
2023-05-28 06:35:02 +00:00
|
|
|
|
#@mai.handle(['scoreline <difficulty+sid> <scoreline> {查找某首歌的分数线}',
|
|
|
|
|
# 'scoreline help {查看分数线帮助}'])
|
|
|
|
|
#async def _(msg: Bot.MessageSession):
|
|
|
|
|
# r = "([绿黄红紫白])(id)?([0-9]+)"
|
|
|
|
|
# arg1 = msg.parsed_msg.get('<difficulty+sid>')
|
|
|
|
|
# args2 = msg.parsed_msg.get('<scoreline>')
|
|
|
|
|
# argh = msg.parsed_msg.get('help', False)
|
|
|
|
|
# if argh:
|
|
|
|
|
# s = '''此功能为查找某首歌分数线设计。
|
|
|
|
|
#命令格式:maimai scoreline <difficulty+sid> <scoreline>
|
|
|
|
|
#例如:分数线 紫799 100
|
|
|
|
|
#命令将返回分数线允许的 TAP GREAT 容错以及 BREAK 50落等价的 TAP GREAT 数。
|
|
|
|
|
#以下为 TAP GREAT 的对应表:
|
|
|
|
|
#GREAT/GOOD/MISS
|
|
|
|
|
#TAP\t1/2.5/5
|
|
|
|
|
#HOLD\t2/5/10
|
|
|
|
|
#SLIDE\t3/7.5/15
|
|
|
|
|
#TOUCH\t1/2.5/5
|
|
|
|
|
#BREAK\t5/12.5/25(外加200落)'''
|
|
|
|
|
# img = text_to_image(s)
|
|
|
|
|
# if img:
|
|
|
|
|
# await msg.finish([BImage(img)])
|
|
|
|
|
# elif args2 is not None:
|
|
|
|
|
# try:
|
|
|
|
|
# grp = re.match(r, arg1).groups()
|
2023-06-05 09:01:14 +00:00
|
|
|
|
# diff_index = diff_label_zhs.index(grp[0])
|
2023-05-28 06:35:02 +00:00
|
|
|
|
# chart_id = grp[2]
|
|
|
|
|
# line = float(arg1)
|
|
|
|
|
# music = (await total_list.get()).by_id(chart_id)
|
2023-06-05 09:01:14 +00:00
|
|
|
|
# chart: Dict[Any] = music['charts'][diff_index]
|
2023-05-28 06:35:02 +00:00
|
|
|
|
# tap = int(chart['notes'][0])
|
|
|
|
|
# slide = int(chart['notes'][2])
|
|
|
|
|
# hold = int(chart['notes'][1])
|
|
|
|
|
# touch = int(chart['notes'][3]) if len(chart['notes']) == 5 else 0
|
|
|
|
|
# brk = int(chart['notes'][-1])
|
|
|
|
|
# total_score = 500 * tap + slide * 1500 + hold * 1000 + touch * 500 + brk * 2500
|
|
|
|
|
# break_bonus = 0.01 / brk
|
|
|
|
|
# break_50_reduce = total_score * break_bonus / 4
|
|
|
|
|
# reduce = 101 - line
|
|
|
|
|
# if reduce <= 0 or reduce >= 101:
|
|
|
|
|
# raise ValueError
|
2023-06-05 09:01:14 +00:00
|
|
|
|
# await msg.finish(f'''{music['title']} {diff_label[diff_index]}
|
2023-05-28 06:35:02 +00:00
|
|
|
|
#分数线 {line}% 允许的最多 TAP GREAT 数量为 {(total_score * reduce / 10000):.2f}(每个-{10000 / total_score:.4f}%),
|
|
|
|
|
#BREAK 50落(一共{brk}个)等价于 {(break_50_reduce / 100):.3f} 个 TAP GREAT(-{break_50_reduce / total_score * 100:.4f}%)''')
|
|
|
|
|
# except Exception:
|
2023-06-01 06:25:50 +00:00
|
|
|
|
# await msg.finish("格式错误,输入“~maimai scoreline help”以查看帮助信息")
|