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 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>']

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 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')

View file

@ -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
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') 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')