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 import get_info
|
||||||
from .info_official import get_info_official
|
from .info_official import get_info_official
|
||||||
from .initialize import arcb30init
|
from .initialize import arcb30init
|
||||||
|
from .song import get_song_info
|
||||||
from .utils import get_userinfo
|
from .utils import get_userinfo
|
||||||
|
|
||||||
arc = on_command('arcaea', developers=['OasisAkari'], desc='查询Arcaea相关内容。',
|
arc = on_command('arcaea', developers=['OasisAkari'], desc='查询Arcaea相关内容。',
|
||||||
|
@ -132,6 +133,30 @@ async def _(msg: MessageSession):
|
||||||
await msg.finish('未绑定用户,请使用~arcaea bind <friendcode>绑定一个用户。')
|
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用户}')
|
@arc.handle('bind <friendcode/username> {绑定一个Arcaea用户}')
|
||||||
async def _(msg: MessageSession):
|
async def _(msg: MessageSession):
|
||||||
code: str = msg.parsed_msg['<friendcode/username>']
|
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 core.logger import Logger
|
||||||
from .drawb30img import drawb30
|
from .drawb30img import drawb30
|
||||||
from .drawsongimg import dsimg
|
from .drawsongimg import dsimg
|
||||||
from .errcode import errcode
|
from .utils import autofix_b30_song_background, errcode
|
||||||
from .utils import autofix_b30_song_background
|
|
||||||
|
|
||||||
assets_path = os.path.abspath('./assets/arcaea')
|
assets_path = os.path.abspath('./assets/arcaea')
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,7 @@ from config import Config
|
||||||
from core.elements import Plain, Image
|
from core.elements import Plain, Image
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.utils import get_url
|
from core.utils import get_url
|
||||||
from modules.arcaea.errcode import errcode
|
from modules.arcaea.utils import autofix_b30_song_background, errcode
|
||||||
from modules.arcaea.utils import autofix_b30_song_background
|
|
||||||
|
|
||||||
assets_path = os.path.abspath('./assets/arcaea')
|
assets_path = os.path.abspath('./assets/arcaea')
|
||||||
api_url = Config("botarcapi_url")
|
api_url = Config("botarcapi_url")
|
||||||
|
@ -74,8 +73,7 @@ async def get_info(usercode):
|
||||||
asyncio.create_task(autofix_b30_song_background(recent["song_id"],
|
asyncio.create_task(autofix_b30_song_background(recent["song_id"],
|
||||||
byd=False if recent["difficulty"] != 3 else True))
|
byd=False if recent["difficulty"] != 3 else True))
|
||||||
return result
|
return result
|
||||||
|
elif get_['status'] in errcode:
|
||||||
|
return Plain(f'查询失败:{errcode[get_["status"]]}')
|
||||||
else:
|
else:
|
||||||
if get_['status'] in errcode:
|
return Plain('查询失败。' + get_)
|
||||||
return Plain(f'查询失败:{errcode[get_["status"]]}')
|
|
||||||
else:
|
|
||||||
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')
|
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):
|
async def get_userinfo(user):
|
||||||
try:
|
try:
|
||||||
get_ = await get_url(botarcapi_url + f"user/info?user={user}", status_code=200, headers=headers, fmt='json')
|
get_ = await get_url(botarcapi_url + f"user/info?user={user}", status_code=200, headers=headers, fmt='json')
|
||||||
|
|
Reference in a new issue