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

60 lines
2 KiB
Python
Raw Normal View History

import ujson as json
2023-06-17 04:39:47 +00:00
from core.builtins import ErrorMessage
from core.utils.http import get_url, post_url
2023-06-17 17:08:38 +00:00
from datetime import datetime
2023-06-16 15:15:47 +00:00
async def get_alias(input, get_music=False):
2023-06-18 04:11:30 +00:00
url = "https://download.fanyu.site/maimai/alias.json"
2023-06-16 15:15:47 +00:00
data = await get_url(url, 200, fmt='json')
result = []
if get_music:
if input in data:
2023-06-18 06:07:00 +00:00
result = data[input]
2023-06-16 15:15:47 +00:00
else:
2023-06-18 04:11:30 +00:00
for alias, ids in data.items():
if input in ids:
result.append(alias)
2023-06-17 04:39:47 +00:00
2023-06-16 15:15:47 +00:00
return result
2023-06-17 04:39:47 +00:00
2023-06-17 03:38:06 +00:00
async def get_rank(msg, payload):
try:
userdata = await post_url('https://www.diving-fish.com/api/maimaidxprober/query/player',
data=json.dumps(payload),
status_code=200,
headers={'Content-Type': 'application/json', 'accept': '*/*'}, fmt='json')
2023-06-17 04:44:54 +00:00
username = userdata['username']
rating = userdata['rating']
except ValueError as e:
if str(e).startswith('400'):
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"))
else:
2023-06-17 05:48:44 +00:00
await msg.finish(ErrorMessage(str(e)))
2023-06-17 03:38:06 +00:00
2023-06-17 17:08:38 +00:00
rank_data = await get_url('https://www.diving-fish.com/api/maimaidxprober/rating_ranking', 200, fmt='json')
sorted_data = sorted(rank_data, key=lambda x: x['ra'], reverse=True)
2023-06-16 15:15:47 +00:00
rank = None
total_rating = 0
2023-06-17 17:16:39 +00:00
total_rank = len(sorted_data)
2023-06-16 16:25:18 +00:00
for i, scoreboard in enumerate(sorted_data):
if scoreboard['username'] == username:
rank = i + 1
total_rating += scoreboard['ra']
2023-06-16 15:15:47 +00:00
if rank is None:
2023-06-17 17:16:39 +00:00
rank = total_rank
2023-06-16 15:34:58 +00:00
2023-06-17 17:16:39 +00:00
average_rating = total_rating / total_rank
surpassing_rate = (total_rank - rank) / total_rank * 100
2023-06-17 17:08:38 +00:00
time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
2023-06-16 15:15:47 +00:00
2023-06-17 17:16:39 +00:00
return time, total_rank, average_rating, username, rating, rank, surpassing_rate