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/song.py

80 lines
4.8 KiB
Python
Raw Normal View History

import os
import traceback
from datetime import datetime
from config import Config
2023-02-05 14:33:33 +00:00
from core.builtins import Plain
from core.logger import Logger
2023-02-05 14:33:33 +00:00
from core.utils.http import get_url
2022-12-25 07:25:50 +00:00
assets_path = os.path.abspath('./assets/arcaea')
api_url = Config("botarcapi_url")
2023-03-17 14:19:32 +00:00
async def get_song_info(msgsession, sid, diff: int, usercode=None):
headers = {"User-Agent": Config('botarcapi_agent')}
try:
song_info = await get_url(f'{api_url}song/info?songname={sid}', headers=headers, status_code=200,
fmt='json')
except ValueError as e:
Logger.info(f'[{sid}] {e}')
2023-03-17 14:19:32 +00:00
return {'success': False, 'msg': msgsession.locale.t('arcaea.message.failed')}
except Exception:
traceback.print_exc()
2023-03-17 14:19:32 +00:00
return {'success': False, 'msg': msgsession.locale.t('arcaea.message.failed')}
if song_info["status"] == 0:
msg = []
difficulties = song_info["content"]["difficulties"]
if len(difficulties) < diff:
2023-05-19 04:46:29 +00:00
return [Plain(msgsession.locale.t('arcaea.message.song.invalid.difficulty'))]
song_name = difficulties[diff]['name_en']
2023-03-17 15:26:14 +00:00
diff_display_name = 'PST' if diff == 0 else 'PRS' if diff == 1 else 'FTR' if diff == 2 else 'BYD' \
2023-01-28 05:53:11 +00:00
if diff == 3 else '???'
2023-05-19 04:46:29 +00:00
side_display_name = msgsession.locale.t('arcaea.message.song.side.light') if difficulties[diff]['side'] == 0 else msgsession.locale.t(
'arcaea.message.song.side.conflict') if difficulties[diff]['side'] == 1 else msgsession.locale.t('arcaea.message.song.side.colorless') if difficulties[diff]['side'] == 2 else '???'
msg.append(f'{song_name} ({diff_display_name}/{side_display_name})')
display_rating_1 = difficulties[diff]['difficulty'] / 2
display_rating_2 = difficulties[diff]['difficulty'] // 2
display_rating = str(display_rating_2) + ("+" if display_rating_1 > display_rating_2 else "")
rating = difficulties[diff]['rating'] / 10
2023-05-19 04:46:29 +00:00
msg.append(msgsession.locale.t('arcaea.message.song.difficulty_rating') + display_rating + f' ({rating})')
msg.append(msgsession.locale.t('arcaea.message.song.artist') + difficulties[diff]['artist'])
msg.append(msgsession.locale.t('arcaea.message.song.jacket_designer') + difficulties[diff]['jacket_designer'])
msg.append(msgsession.locale.t('arcaea.message.song.chart_designer') + difficulties[diff]['chart_designer'])
msg.append(msgsession.locale.t('arcaea.message.song.note') + str(difficulties[diff]['note']))
msg.append(msgsession.locale.t('arcaea.message.song.bpm') + str(difficulties[diff]['bpm']))
msg.append(msgsession.locale.t('arcaea.message.song.set_friendly') + difficulties[diff]['set_friendly'])
msg.append(msgsession.locale.t('arcaea.message.song.time') +
2023-04-30 03:30:59 +00:00
str(difficulties[diff]['time']) +
2023-05-19 04:46:29 +00:00
msgsession.locale.t('arcaea.message.song.time.second'))
msg.append(msgsession.locale.t('arcaea.message.song.date') +
2023-04-30 03:30:59 +00:00
datetime.fromtimestamp(difficulties[diff]["date"]).strftime("%Y-%m-%d"))
2023-05-19 04:46:29 +00:00
msg.append(msgsession.locale.t('arcaea.message.song.world_unlock') +
2023-04-30 03:30:59 +00:00
(msgsession.locale.t('yes') if difficulties[diff]['world_unlock'] else msgsession.locale.t('no')))
2023-05-19 04:46:29 +00:00
msg.append(msgsession.locale.t('arcaea.message.song.remote_download') +
2023-04-30 03:30:59 +00:00
(msgsession.locale.t('yes') if difficulties[diff]['remote_download'] else msgsession.locale.t('no')))
2022-12-25 07:25:50 +00:00
if usercode:
try:
2023-05-15 10:36:23 +00:00
play_info = await get_url(
f'{api_url}user/best?usercode={usercode}&songid={song_info["content"]["song_id"]}&'
f'difficulty={diff}',
headers=headers, status_code=200,
fmt='json')
if play_info["status"] == 0:
2023-05-19 04:46:29 +00:00
msg.append(msgsession.locale.t('arcaea.message.song.best') +
2023-05-15 10:36:23 +00:00
str(play_info["content"]["record"]["score"]) +
f'\n({str(play_info["content"]["record"]["rating"])}, '
f'P: {str(play_info["content"]["record"]["perfect_count"])}'
f'({str(play_info["content"]["record"]["shiny_perfect_count"])}), '
f'F: {str(play_info["content"]["record"]["near_count"])}, '
f'L: {str(play_info["content"]["record"]["miss_count"])})')
2022-12-25 07:25:50 +00:00
except Exception:
traceback.print_exc()
return '\n'.join(msg)
2022-12-25 07:25:50 +00:00
else:
2023-03-18 11:31:45 +00:00
errcode_string = f"arcaea.errcode.{song_info['status']}"
if locale := msgsession.locale.t(errcode_string) != errcode_string:
return f'{msgsession.locale.t("arcaea.message.failed.errcode")}{locale}'
2023-03-17 14:19:32 +00:00
return msgsession.locale.t('arcaea.message.failed') + song_info