点歌功能再次优化

This commit is contained in:
liuwei
2026-01-26 15:07:28 +08:00
parent 3d1305b8a9
commit bf64fb5782
5 changed files with 27 additions and 17 deletions

View File

@@ -70,7 +70,8 @@ class MusicPlugin(MessagePluginInterface):
self._commands = self._config.get("Music", {}).get("command", ["点歌", "音乐"])
self.command_format = self._config.get("Music", {}).get("command-format", "点歌 歌曲名")
self.enable = self._config.get("Music", {}).get("enable", True)
self.music_api_url = self._config.get("Music", {}).get("music_api_url", "http://192.168.2.170:5000")
self.music_api_url = self._config.get("Music", {}).get("music_api_url", "http://192.168.2.170:5000?keywords={keywords}&limit=10")
self.song_api_url = self._config.get("Music", {}).get("song_api_url", "")
self.LOG.debug(f"[{self.name}] 插件初始化完成,指令:{self._commands}")
return True
@@ -139,10 +140,13 @@ class MusicPlugin(MessagePluginInterface):
def _search_song(self, song_name: str) -> Dict[str, Any]:
"""搜索歌曲信息"""
try:
base_url = self.music_api_url.rstrip("/")
search_url = f"{base_url}/Search"
if "{keywords}" in self.music_api_url:
search_url = self.music_api_url.format(keywords=song_name)
else:
base = self.music_api_url.split("?")[0].rstrip("/")
search_url = f"{base}/Search?keyword={song_name}&limit=10"
self.LOG.info(f"请求歌曲API: {search_url}")
resp = requests.get(search_url, params={"keywords": song_name}, timeout=10)
resp = requests.get(search_url, timeout=10)
if resp.status_code != 200:
self.LOG.error(f"API 请求失败,状态码: {resp.status_code}")
return {}
@@ -156,9 +160,12 @@ class MusicPlugin(MessagePluginInterface):
return {}
first_song = songs[0]
song_id = str(first_song.get("id", ""))
detail_url = f"{base_url}/Song_V1"
detail_params = {"url": song_id, "level": "standard", "type": "json"}
detail_resp = requests.get(detail_url, params=detail_params, timeout=15)
if self.song_api_url:
detail_url = self.song_api_url.format(url=song_id, level="standard", type="json")
else:
base = self.music_api_url.split("?")[0].rstrip("/")
detail_url = f"{base}/Song_V1?url={song_id}&level=standard&type=json"
detail_resp = requests.get(detail_url, timeout=15)
if detail_resp.status_code != 200:
self.LOG.error(f"详情请求失败,状态码: {detail_resp.status_code}")
return {}