Archived
1
0
Fork 0
This repository has been archived on 2024-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
akari-bot/modules/maimai/libraries/maimaidx_api_data.py

128 lines
4.2 KiB
Python
Raw Normal View History

2023-06-26 10:24:19 +00:00
import os
2023-09-22 15:25:01 +00:00
import shutil
2023-06-17 04:39:47 +00:00
2023-09-03 08:50:12 +00:00
import ujson as json
2023-09-22 15:25:01 +00:00
from core.logger import Logger
2023-09-22 17:08:43 +00:00
from core.utils.cache import random_cache_path
2023-09-22 15:25:01 +00:00
from core.utils.http import get_url, post_url, download_to_cache
2023-09-22 05:47:44 +00:00
from .maimaidx_music import get_cover_len5_id, TotalList
total_list = TotalList()
2023-07-14 06:15:46 +00:00
assets_path = os.path.abspath('./assets/maimai')
2023-09-22 16:55:19 +00:00
cover_dir = f"{assets_path}/static/mai/cover"
2023-07-14 06:15:46 +00:00
2023-09-03 08:50:12 +00:00
2023-09-22 15:25:01 +00:00
async def update_assets():
2023-07-14 06:15:46 +00:00
try:
2023-09-22 15:25:01 +00:00
alias_url = "https://download.fanyu.site/maimai/alias.json"
input_data = await get_url(alias_url, 200, fmt='json')
2023-07-23 07:32:53 +00:00
output_data = {}
2023-07-23 08:22:30 +00:00
for key, values in input_data.items():
for value in values:
if value == "未找到":
continue
if value not in output_data:
output_data[value] = []
output_data[value].append(key)
2023-09-22 05:42:07 +00:00
2023-07-23 08:22:30 +00:00
output_data = {k: output_data[k] for k in sorted(output_data)}
2023-07-14 09:42:19 +00:00
file_path = os.path.join(assets_path, "mai_alias.json")
with open(file_path, 'w') as file:
2023-07-23 07:32:53 +00:00
json.dump(output_data, file)
2023-09-22 17:24:21 +00:00
except:
return False
2023-09-22 15:25:01 +00:00
Logger.info('Maimai alias download completed.')
2023-09-22 16:55:19 +00:00
try:
static_url = f"https://www.diving-fish.com/maibot/static.zip"
2023-09-22 17:08:43 +00:00
download_file = await download_to_cache(static_url)
2023-09-22 16:55:19 +00:00
2023-09-22 17:08:43 +00:00
ca = random_cache_path()
shutil.unpack_archive(download_file, ca)
2023-09-22 16:56:36 +00:00
if os.path.exists(cover_dir):
2023-09-22 16:55:19 +00:00
shutil.rmtree(cover_dir)
2023-09-22 17:08:43 +00:00
static_cover_dir = os.path.join(ca, 'mai/cover')
if os.path.exists(static_cover_dir):
shutil.move(static_cover_dir, cover_dir)
2023-09-22 16:55:19 +00:00
except:
2023-09-22 17:24:21 +00:00
raise
2023-09-22 15:25:01 +00:00
Logger.info('Maimai covers download completed.')
2023-07-14 06:15:46 +00:00
return True
async def get_alias(msg, input, get_music=False):
file_path = os.path.join(assets_path, "mai_alias.json")
if not os.path.exists(file_path):
2023-07-14 06:18:05 +00:00
await msg.finish(msg.locale.t("maimai.message.alias.file_not_found", prefix=msg.prefixes[0]))
2023-07-14 06:15:46 +00:00
with open(file_path, 'r') as file:
data = json.load(file)
2023-06-16 15:15:47 +00:00
result = []
if get_music:
2023-06-19 16:37:14 +00:00
for alias, ids in data.items():
if input in ids:
result.append(alias)
2023-07-23 07:32:53 +00:00
else:
input = input.replace("_", " ")
if input in data:
result = data[input]
2023-09-22 17:24:21 +00:00
2023-06-16 15:15:47 +00:00
return result
2023-06-17 04:39:47 +00:00
2023-06-19 16:37:14 +00:00
async def get_record(msg, payload):
url = f"https://www.diving-fish.com/api/maimaidxprober/query/player"
try:
2023-06-19 16:37:14 +00:00
data = await post_url(url,
data=json.dumps(payload),
status_code=200,
headers={'Content-Type': 'application/json', 'accept': '*/*'}, fmt='json')
except ValueError as e:
if str(e).startswith('400'):
2023-08-19 19:11:08 +00:00
if "qq" in payload:
2023-08-19 18:53:20 +00:00
await msg.finish(msg.locale.t("maimai.message.user_unbound"))
else:
await msg.finish(msg.locale.t("maimai.message.user_not_found"))
if str(e).startswith('403'):
await msg.finish(msg.locale.t("maimai.message.forbidden"))
2023-06-17 03:38:06 +00:00
2023-06-19 16:37:14 +00:00
return data
2023-06-16 15:15:47 +00:00
2023-06-19 16:37:14 +00:00
async def get_plate(msg, payload):
url = f"https://www.diving-fish.com/api/maimaidxprober/query/plate"
try:
data = await post_url(url,
data=json.dumps(payload),
status_code=200,
headers={'Content-Type': 'application/json', 'accept': '*/*'}, fmt='json')
except ValueError as e:
if str(e).startswith('400'):
2023-08-19 19:18:25 +00:00
if "qq" in payload:
await msg.finish(msg.locale.t("maimai.message.user_unbound"))
else:
await msg.finish(msg.locale.t("maimai.message.user_not_found"))
2023-06-19 16:37:14 +00:00
if str(e).startswith('403'):
await msg.finish(msg.locale.t("maimai.message.forbidden"))
2023-06-16 15:15:47 +00:00
2023-06-19 16:37:14 +00:00
return data
2023-06-26 10:24:19 +00:00
2023-09-03 08:50:12 +00:00
2023-06-26 10:24:19 +00:00
def get_cover(sid):
2023-06-27 15:10:08 +00:00
cover_url = f"https://www.diving-fish.com/covers/{get_cover_len5_id(sid)}.png"
2023-09-22 16:55:19 +00:00
cover_path = f"{cover_dir}/{get_cover_len5_id(sid)}.png"
2023-09-22 15:25:01 +00:00
if os.path.exists(os.path.abspath(cover_path)):
2023-06-26 10:24:19 +00:00
return os.path.abspath(cover_path)
else:
2023-06-27 15:00:19 +00:00
return cover_url