update arcaea module
add `arcaea song` command
This commit is contained in:
parent
685911fdc7
commit
bd78bd0e5a
6 changed files with 113 additions and 30 deletions
|
@ -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>']
|
||||
|
|
|
@ -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: "发生了未知错误", }
|
|
@ -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')
|
||||
|
||||
|
|
|
@ -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
59
modules/arcaea/song.py
Normal 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)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -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')
|
||||
|
|
Reference in a new issue