mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2026-10-10 06:10:01 +08:00
refactor code
This commit is contained in:
@@ -3,9 +3,9 @@ from nonebot.adapters import Bot, Event
|
||||
from nonebot.typing import T_State
|
||||
from nonebot import on_command
|
||||
|
||||
__plugin_name__ = '点歌'
|
||||
__plugin_name__ = "点歌"
|
||||
|
||||
__plugin_usage__ = '用法:点歌 [歌名]'
|
||||
__plugin_usage__ = "用法:点歌 [歌名]"
|
||||
|
||||
dataget = dataGet()
|
||||
|
||||
@@ -27,7 +27,7 @@ async def handle_songName(bot: Bot, event: Event, state: T_State):
|
||||
await songpicker.finish("没有找到这首歌!", at_sender=True)
|
||||
for _ in range(3):
|
||||
songInfoDict = await dataget.songInfo(songIdList[0])
|
||||
if songInfoDict != '网易云网络繁忙!':
|
||||
if songInfoDict != "网易云网络繁忙!":
|
||||
break
|
||||
else:
|
||||
await songpicker.finish("网易云繁忙...")
|
||||
@@ -38,14 +38,5 @@ async def handle_songName(bot: Bot, event: Event, state: T_State):
|
||||
async def handle_songNum(bot: Bot, event: Event, state: T_State):
|
||||
songIdList = state["songIdList"]
|
||||
selectedSongId = songIdList[0]
|
||||
songContent = [
|
||||
{
|
||||
"type": "music",
|
||||
"data": {
|
||||
"type": 163,
|
||||
"id": selectedSongId
|
||||
}
|
||||
}
|
||||
]
|
||||
songContent = [{"type": "music", "data": {"type": 163, "id": selectedSongId}}]
|
||||
await songpicker.send(songContent)
|
||||
|
||||
|
||||
@@ -5,30 +5,40 @@ from configs.config import ALAPI_TOKEN
|
||||
from asyncio.exceptions import TimeoutError
|
||||
|
||||
|
||||
class dataApi():
|
||||
'''
|
||||
class dataApi:
|
||||
"""
|
||||
从网易云音乐接口直接获取数据(实验性)
|
||||
'''
|
||||
"""
|
||||
|
||||
headers = {"referer": "http://music.163.com"}
|
||||
cookies = {"appver": "2.0.2"}
|
||||
|
||||
async def search(self, songName: str):
|
||||
'''
|
||||
"""
|
||||
搜索接口,用于由歌曲名查找id
|
||||
'''
|
||||
async with aiohttp.ClientSession(headers=self.headers, cookies=self.cookies) as session:
|
||||
async with session.post(f"http://music.163.com/api/search/get/", data={"s": songName, "limit": 5, "type": 1, "offset": 0},) as r:
|
||||
"""
|
||||
async with aiohttp.ClientSession(
|
||||
headers=self.headers, cookies=self.cookies
|
||||
) as session:
|
||||
async with session.post(
|
||||
f"http://music.163.com/api/search/get/",
|
||||
data={"s": songName, "limit": 5, "type": 1, "offset": 0},
|
||||
) as r:
|
||||
if r.status != 200:
|
||||
return None
|
||||
r = await r.text()
|
||||
return json.loads(r)
|
||||
|
||||
async def getSongInfo(self, songId: int):
|
||||
'''
|
||||
"""
|
||||
获取歌曲信息
|
||||
'''
|
||||
async with aiohttp.ClientSession(headers=self.headers, cookies=self.cookies) as session:
|
||||
async with session.post(f"http://music.163.com/api/song/detail/?id={songId}&ids=%5B{songId}%5D",) as r:
|
||||
"""
|
||||
async with aiohttp.ClientSession(
|
||||
headers=self.headers, cookies=self.cookies
|
||||
) as session:
|
||||
async with session.post(
|
||||
f"http://music.163.com/api/song/detail/?id={songId}&ids=%5B{songId}%5D",
|
||||
) as r:
|
||||
if r.status != 200:
|
||||
return None
|
||||
r = await r.text()
|
||||
@@ -36,36 +46,37 @@ class dataApi():
|
||||
|
||||
|
||||
class dataGet(dataApi):
|
||||
'''
|
||||
"""
|
||||
从dataApi获取数据,并做简单处理
|
||||
'''
|
||||
"""
|
||||
|
||||
api = dataApi()
|
||||
|
||||
async def songIds(self, songName: str, amount=5) -> list:
|
||||
'''
|
||||
"""
|
||||
根据用户输入的songName 获取候选songId列表 [默认songId数量:5]
|
||||
'''
|
||||
"""
|
||||
songIds = list()
|
||||
r = await self.api.search(songName=songName)
|
||||
if r is None:
|
||||
raise WrongDataError
|
||||
idRange = amount if amount < len(
|
||||
r["result"]["songs"]) else len(r["result"]["songs"])
|
||||
idRange = (
|
||||
amount if amount < len(r["result"]["songs"]) else len(r["result"]["songs"])
|
||||
)
|
||||
for i in range(idRange):
|
||||
songIds.append(r["result"]["songs"][i]["id"])
|
||||
return songIds
|
||||
|
||||
async def songInfo(self, songId: int):
|
||||
'''
|
||||
"""
|
||||
根据传递的songId,获取歌曲名、歌手、专辑等信息,作为dict返回
|
||||
'''
|
||||
"""
|
||||
songInfo = dict()
|
||||
r = await self.api.getSongInfo(songId)
|
||||
if r is None:
|
||||
raise WrongDataError
|
||||
if r['code'] == -460:
|
||||
return '网易云网络繁忙!'
|
||||
if r["code"] == -460:
|
||||
return "网易云网络繁忙!"
|
||||
songInfo["songName"] = r["songs"][0]["name"]
|
||||
|
||||
songArtists = list()
|
||||
@@ -79,17 +90,17 @@ class dataGet(dataApi):
|
||||
return songInfo
|
||||
|
||||
|
||||
class dataProcess():
|
||||
'''
|
||||
class dataProcess:
|
||||
"""
|
||||
将获取的数据处理为用户能看懂的形式
|
||||
'''
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
async def mergeSongInfo(songInfos: list) -> str:
|
||||
'''
|
||||
"""
|
||||
将歌曲信息list处理为字符串,供用户点歌
|
||||
传递进的歌曲信息list含有多个歌曲信息dict
|
||||
'''
|
||||
"""
|
||||
songInfoMessage = "请输入欲点播歌曲的序号:\n"
|
||||
numId = 0
|
||||
for songInfo in songInfos:
|
||||
@@ -105,15 +116,17 @@ class dataProcess():
|
||||
|
||||
@staticmethod
|
||||
async def mergeSongComments(songComments: dict) -> str:
|
||||
songCommentsMessage = '\n'.join(
|
||||
['%s: %s' % (key, value) for (key, value) in songComments.items()])
|
||||
songCommentsMessage = "\n".join(
|
||||
["%s: %s" % (key, value) for (key, value) in songComments.items()]
|
||||
)
|
||||
return songCommentsMessage
|
||||
|
||||
|
||||
class Error(Exception):
|
||||
'''
|
||||
"""
|
||||
谁知道网易的接口会出什么幺蛾子
|
||||
'''
|
||||
"""
|
||||
|
||||
pass
|
||||
|
||||
|
||||
@@ -125,20 +138,18 @@ class WrongDataError(Error):
|
||||
|
||||
|
||||
async def get_music_id(keyword: str):
|
||||
url = f'https://v2.alapi.cn/api/music/search'
|
||||
params = {
|
||||
'token': ALAPI_TOKEN,
|
||||
'keyword': keyword
|
||||
}
|
||||
url = f"https://v2.alapi.cn/api/music/search"
|
||||
params = {"token": ALAPI_TOKEN, "keyword": keyword}
|
||||
async with aiohttp.ClientSession() as session:
|
||||
try:
|
||||
async with session.get(url, proxy=get_local_proxy(), timeout=2, params=params) as response:
|
||||
async with session.get(
|
||||
url, proxy=get_local_proxy(), timeout=2, params=params
|
||||
) as response:
|
||||
data = await response.json()
|
||||
if data['code'] == 200:
|
||||
data = data['data']['songs']
|
||||
return data['id'], 200
|
||||
if data["code"] == 200:
|
||||
data = data["data"]["songs"]
|
||||
return data["id"], 200
|
||||
else:
|
||||
return f'访问失败...code:{data["code"]}', 999
|
||||
except TimeoutError:
|
||||
return '超时了...', 999
|
||||
|
||||
return "超时了...", 999
|
||||
|
||||
Reference in New Issue
Block a user