From d6d197bdf793817802a938c8fefabb8eccd6a2bd Mon Sep 17 00:00:00 2001 From: liuwei Date: Tue, 3 Jun 2025 13:45:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=8B=E4=B8=80=E9=A6=96?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/guess_song/main.py | 40 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/plugins/guess_song/main.py b/plugins/guess_song/main.py index cc92a6c..df5addb 100644 --- a/plugins/guess_song/main.py +++ b/plugins/guess_song/main.py @@ -180,13 +180,17 @@ class GuessSongPlugin(MessagePluginInterface): if self.redis_db: current_game = self.redis_db.get_game_session(session_id) + # 检查是否是"下一首"命令 + if content == "下一首" and current_game and current_game.get("status") == "playing": + return await self._next_song(bot, session_id, sender) + # 如果游戏进行中,且有内容,则视为答案 if current_game and current_game.get("status") == "playing": if content: # 有内容,视为答案 return await self._check_answer(message) else: # 没有内容,提示已有游戏在进行中 await bot.send_text_message(session_id, - f"⚠️ 当前已有猜歌游戏在进行中,请直接回复 [猜歌名 歌名] 进行猜测", sender) + f"⚠️ 当前已有猜歌游戏在进行中,请直接回复 [猜歌名 歌名] 进行猜测\n或回复 [猜歌名 下一首] 跳过当前歌曲", sender) return True, "已有游戏进行中" # 否则开始新游戏(可以指定歌手或随机) @@ -219,7 +223,7 @@ class GuessSongPlugin(MessagePluginInterface): # 发送游戏开始消息 await bot.send_text_message(session_id, - f"🎵 猜歌名游戏开始!\n请听10秒钟歌曲片段,然后回复[猜歌名 歌名]来猜测歌曲名称。\n歌手: {song_info.get('singer_name', '未知')}", + f"🎵 猜歌名游戏开始!\n请听10秒钟歌曲片段,然后回复[猜歌名 歌名]来猜测歌曲名称。\n回复[猜歌名 下一首]可跳过当前歌曲。\n歌手: {song_info.get('singer_name', '未知')}", sender) # 发送10秒音频片段 @@ -466,3 +470,35 @@ class GuessSongPlugin(MessagePluginInterface): except Exception as e: self.LOG.error(f"发送音乐消息出错: {e}") return False + + async def _next_song(self, bot: WechatAPIClient, session_id: str, sender: str) -> Tuple[bool, str]: + """跳过当前歌曲,播放下一首""" + try: + # 获取当前游戏数据 + current_game = None + if self.redis_db: + current_game = self.redis_db.get_game_session(session_id) + + if not current_game or current_game.get("status") != "playing": + await bot.send_text_message(session_id, f"⚠️ 当前没有进行中的猜歌游戏", sender) + return False, "没有进行中的游戏" + + # 显示当前歌曲答案 + correct_answer = current_game.get("song_name", "") + singer_name = current_game.get("singer_name", "") + await bot.send_text_message(session_id, f"⏭️ 已跳过当前歌曲\n歌曲:{correct_answer}\n歌手:{singer_name}", sender) + + # 发送完整音乐 + await self._send_music_message(bot, current_game, session_id) + + # 删除当前游戏会话 + if self.redis_db: + self.redis_db.delete_game_session(session_id) + + # 开始新游戏 + return await self._start_new_game(bot, session_id, sender, None) + + except Exception as e: + self.LOG.error(f"跳过当前歌曲出错: {e}") + await bot.send_text_message(session_id, f"❌跳过当前歌曲出错,请稍后重试", sender) + return False, f"处理出错: {e}"