添加猜歌名功能,从API中提取歌曲前奏,然后猜歌名

This commit is contained in:
liuwei
2025-06-03 11:59:29 +08:00
parent d5b479d766
commit 20d535b4d7

View File

@@ -185,7 +185,8 @@ class GuessSongPlugin(MessagePluginInterface):
if content: # 有内容,视为答案
return await self._check_answer(message)
else: # 没有内容,提示已有游戏在进行中
await bot.send_text_message(session_id, f"⚠️ 当前已有猜歌游戏在进行中,请直接回复 [猜歌名 歌名] 进行猜测", sender)
await bot.send_text_message(session_id,
f"⚠️ 当前已有猜歌游戏在进行中,请直接回复 [猜歌名 歌名] 进行猜测", sender)
return True, "已有游戏进行中"
# 否则开始新游戏(可以指定歌手或随机)
@@ -235,30 +236,34 @@ class GuessSongPlugin(MessagePluginInterface):
# 从message中提取所需参数
sender = message.get("sender", "")
session_id = message.get("roomid", "") or sender # 如果没有roomid使用sender作为session_id
answer = message.get("content", "").strip() # 从消息内容中获取答案
content = message.get("content", "").strip() # 从消息内容中获取答案
bot = message.get("bot")
answer = None
for cmd in self._commands:
if content.startswith(cmd):
answer = content[len(cmd):].strip()
break
# 从Redis获取游戏数据
game_data = None
if self.redis_db:
game_data = self.redis_db.get_game_session(session_id)
if not game_data:
return False, "没有进行中的游戏"
correct_answer = game_data.get("song_name", "")
singer_name = game_data.get("singer_name", "")
# 检查答案是否正确(简单比较,可以改进为模糊匹配)
if answer.lower() == correct_answer.lower():
# 游戏结束,发送成功消息
await bot.send_text_message(session_id, f"🎉 恭喜你猜对了!\n歌曲:{correct_answer}\n歌手:{singer_name}",
sender)
# 删除游戏会话
if self.redis_db:
self.redis_db.delete_game_session(session_id)
return True, "猜对了"
else:
# 答案错误
@@ -266,17 +271,17 @@ class GuessSongPlugin(MessagePluginInterface):
current_time = time.time()
start_time = game_data.get("start_time", 0)
hint_given = game_data.get("hint_given", False)
if not hint_given and (current_time - start_time) > 30:
# 给出提示(显示歌名的第一个字)
hint = correct_answer[0] + "*" * (len(correct_answer) - 1)
await bot.send_text_message(session_id, f"💡 提示:歌名以 '{correct_answer[0]}' 开头")
# 更新游戏会话,标记已给出提示
game_data["hint_given"] = True
if self.redis_db:
self.redis_db.save_game_session(session_id, game_data)
# 告知用户答案错误
await bot.send_text_message(session_id, f"❌ 答案错误,请继续猜测!")
return False, "答案错误"