Archived
1
0
Fork 0

update arcaea module

add `arcaea song` command
This commit is contained in:
yzhh 2022-12-25 14:25:23 +08:00
parent 685911fdc7
commit bd78bd0e5a
6 changed files with 113 additions and 30 deletions

View file

@ -12,6 +12,7 @@ from .getb30_official import getb30_official
from .info import get_info
from .info_official import get_info_official
from .initialize import arcb30init
from .song import get_song_info
from .utils import get_userinfo
arc = on_command('arcaea', developers=['OasisAkari'], desc='查询Arcaea相关内容。',
@ -132,6 +133,30 @@ async def _(msg: MessageSession):
await msg.finish('未绑定用户,请使用~arcaea bind <friendcode>绑定一个用户。')
@arc.handle('song <songname+prs/pst/byd> {查询一首Arcaea谱面的信息}')
async def _(msg: MessageSession):
songname_ = msg.parsed_msg.get('<songname+prs/pst/byd>', False)
songname_split = songname_.split(' ')
diff = -1
for s in songname_split:
s = s.lower()
if s == 'prs':
diff = 0
elif s == 'pst':
diff = 1
elif s == 'ftr':
diff = 2
elif s == 'byd':
diff = 3
if diff != -1:
songname_split.remove(s)
break
if diff == -1:
await msg.finish('请输入正确的谱面难度!')
songname = ' '.join(songname_split)
await msg.finish(Plain(await get_song_info(songname, diff)))
@arc.handle('bind <friendcode/username> {绑定一个Arcaea用户}')
async def _(msg: MessageSession):
code: str = msg.parsed_msg['<friendcode/username>']

View file

@ -1,22 +0,0 @@
errcode = {-1: "非法的用户名或好友代码",
-2: "非法的好友代码",
-3: "未找到用户",
-4: "好友列表已满",
-5: "非法的歌曲名或歌曲ID",
-6: "非法的歌曲ID",
-7: "歌曲未记录",
-8: "记录过多",
-9: "非法的难度",
-10: "非法的近期记录数",
-11: "分配Arcaea账户失败",
-12: "清除好友对象失败",
-13: "添加对象失败",
-14: "该歌曲无Beyond难度",
-15: "无游玩记录",
-16: "用户排行榜被封禁",
-17: "查询B30记录失败",
-18: "更新服务器不可用",
-19: "非法的搭档",
-20: "文件不存在",
-23: "发生了内部错误",
-233: "发生了未知错误", }

View file

@ -9,8 +9,7 @@ from config import Config
from core.logger import Logger
from .drawb30img import drawb30
from .drawsongimg import dsimg
from .errcode import errcode
from .utils import autofix_b30_song_background
from .utils import autofix_b30_song_background, errcode
assets_path = os.path.abspath('./assets/arcaea')

View file

@ -7,8 +7,7 @@ from config import Config
from core.elements import Plain, Image
from core.logger import Logger
from core.utils import get_url
from modules.arcaea.errcode import errcode
from modules.arcaea.utils import autofix_b30_song_background
from modules.arcaea.utils import autofix_b30_song_background, errcode
assets_path = os.path.abspath('./assets/arcaea')
api_url = Config("botarcapi_url")
@ -74,8 +73,7 @@ async def get_info(usercode):
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'查询失败:{errcode[get_["status"]]}')
else:
if get_['status'] in errcode:
return Plain(f'查询失败:{errcode[get_["status"]]}')
else:
return Plain('查询失败。' + get_)
return Plain('查询失败。' + get_)

59
modules/arcaea/song.py Normal file
View file

@ -0,0 +1,59 @@
import asyncio
import os
import traceback
from datetime import datetime
from config import Config
from core.elements import Plain, Image
from core.logger import Logger
from core.utils import get_url
assets_path = os.path.abspath('./assets/arcaea')
api_url = Config("botarcapi_url")
async def get_song_info(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}')
return {'success': False, 'msg': '查询失败。'}
except Exception:
traceback.print_exc()
return {'success': False, 'msg': '查询失败。'}
if song_info["status"] == 0:
msg = []
difficulties = song_info["content"]["difficulties"]
if len(difficulties) < diff:
return [Plain("该谱面难度不存在。")]
song_name = difficulties[diff]['name_en']
diff_display_name = 'PRS' if diff == 0 else 'PST' if diff == 1 else 'FTR' if diff == 2 else 'BYD' \
if diff == 3 else '???'
side_display_name = '光芒' if difficulties[diff]['side'] == 0 else '纷争' if difficulties[diff]['side'] == 1 else\
'消色' 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
msg.append('难度:' + display_rating + f' ({rating})')
msg.append('作曲:' + difficulties[diff]['artist'])
msg.append('封面:' + difficulties[diff]['jacket_designer'])
msg.append('谱师:' + difficulties[diff]['chart_designer'])
msg.append('物量:' + str(difficulties[diff]['note']))
msg.append('BPM' + str(difficulties[diff]['bpm']))
msg.append('所属曲包:' + difficulties[diff]['set_friendly'])
msg.append('时长:' + str(difficulties[diff]['time']) + '')
msg.append('上架日期:' + datetime.fromtimestamp(difficulties[diff]["date"]).strftime("%Y-%m-%d"))
msg.append('需要通过世界解锁:' + ('' if difficulties[diff]['world_unlock'] else ''))
msg.append('需要下载:' + ('' if difficulties[diff]['remote_download'] else ''))
return '\n'.join(msg)

View file

@ -13,6 +13,30 @@ cache_path = os.path.abspath('./cache')
assets_arc = os.path.abspath(f'{assets_path}/arcaea')
errcode = {-1: "非法的用户名或好友代码",
-2: "非法的好友代码",
-3: "未找到用户",
-4: "好友列表已满",
-5: "非法的歌曲名或歌曲ID",
-6: "非法的歌曲ID",
-7: "歌曲未记录",
-8: "记录过多",
-9: "非法的难度",
-10: "非法的近期记录数",
-11: "分配Arcaea账户失败",
-12: "清除好友对象失败",
-13: "添加对象失败",
-14: "该歌曲无Beyond难度",
-15: "无游玩记录",
-16: "用户排行榜被封禁",
-17: "查询B30记录失败",
-18: "更新服务器不可用",
-19: "非法的搭档",
-20: "文件不存在",
-23: "发生了内部错误",
-233: "发生了未知错误", }
async def get_userinfo(user):
try:
get_ = await get_url(botarcapi_url + f"user/info?user={user}", status_code=200, headers=headers, fmt='json')