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/arcaea/info.py
多羅狼 6ae28db54e
i18n
2023-03-17 21:13:28 +08:00

72 lines
3 KiB
Python

import asyncio
import os
import traceback
from datetime import datetime
from config import Config
from core.builtins import Plain, Image
from core.logger import Logger
from core.utils.http import get_url
from modules.arcaea.utils import autofix_b30_song_background, errcode
assets_path = os.path.abspath('./assets/arcaea')
api_url = Config("botarcapi_url")
async def get_info(usercode):
headers = {"User-Agent": Config('botarcapi_agent')}
try:
get_ = await get_url(api_url + f"user/info?usercode={usercode}&recent=1&withsonginfo=True",
status_code=200,
headers=headers,
fmt='json')
except ValueError as e:
return [Plain(msg.locale.t('arcaea.message.failed.errcode') + str(e))]
except Exception:
traceback.print_exc()
return [Plain(msg.locale.t('arcaea.message.failed'))]
Logger.debug(get_)
if get_["status"] == 0:
recent = get_['content']["recent_score"]
if len(recent) < 0:
return [Plain(msg.locale.t('arcaea.info.message.result.none'))]
recent = recent[0]
difficulty = '???'
if recent['difficulty'] == 0:
difficulty = 'PST'
elif recent['difficulty'] == 1:
difficulty = 'PRS'
elif recent['difficulty'] == 2:
difficulty = 'FTR'
elif recent['difficulty'] == 3:
difficulty = 'BYD'
songinfo = get_['content']['songinfo'][0]
trackname = songinfo['name_en']
imgpath = f'{assets_path}/jacket/{recent["song_id"]}_{recent["difficulty"]}.jpg'
if not os.path.exists(imgpath):
imgpath = f'{assets_path}/jacket/{recent["song_id"]}.jpg'
realptt = songinfo['rating'] / 10
ptt = recent['rating']
score = recent['score']
shiny_pure = recent['shiny_perfect_count']
pure = recent['perfect_count']
far = recent['near_count']
lost = recent['miss_count']
username = get_['content']['account_info']['name']
usrptt = int(get_['content']['account_info']['rating'])
if usrptt == -1:
usrptt = '--'
else:
usrptt = usrptt / 100
time_played = datetime.fromtimestamp(recent['time_played'] / 1000)
result = [Plain(msg.locale.t('arcaea.info.message.result', username=username, potential=potential, trackname=trackname, difficulty=difficulty, score=score, pure=pure, shiny_pure=shiny_pure, far=far, lost=lost, realptt=realptt, ptt=ptt, time_played=time_played.strftime("%Y-%m-%d %H:%M:%S")))]
if os.path.exists(imgpath):
result.append(Image(imgpath))
else:
asyncio.create_task(autofix_b30_song_background(recent["song_id"],
byd=False if recent["difficulty"] != 3 else True))
return result
elif get_['status'] in errcode:
return Plain(f'{msg.locale.t('arcaea.message.failed.errcode')}{errcode[get_["status"]]}')
else:
return Plain(msg.locale.t('arcaea.message.failed') + get_)