diff --git a/.tasks/2025-10-28_1_gomoku.md b/.tasks/2025-10-28_1_gomoku.md index 0de4cf5..a15dee8 100644 --- a/.tasks/2025-10-28_1_gomoku.md +++ b/.tasks/2025-10-28_1_gomoku.md @@ -215,7 +215,20 @@ if game_type == 'gomoku': - 修改所有用户显示,从 `@用户{user_id}` 改为 ``,以正确显示用户的群名称 - 涉及修改:开始游戏、落子、显示棋盘、认输、列出对战等所有用户显示位置 - 原因:修复用户识别失败和显示错误的问题 -- 阻碍因素:无 +- 阻碍因素:用户识别仍然失败 +- 状态:不成功 + +## [2025-10-28 17:42:24] +- 已修改: + - games/gomoku.py - 改进用户ID解析和添加调试日志 + - routers/callback.py - 增强日志输出 +- 更改: + - 改进 `_parse_opponent()` 方法,支持多种@用户格式(双引号、单引号、不同的标签格式) + - 在 `handle()` 方法中添加详细的调试日志(command, args, action, opponent_id) + - 改进错误提示,显示实际接收到的参数内容 + - 将 callback.py 中的消息内容日志级别从 DEBUG 改为 INFO,便于追踪 +- 原因:进一步诊断用户ID识别失败的问题,添加调试信息帮助定位问题 +- 阻碍因素:需要用户测试并提供日志输出来确定实际的消息格式 - 状态:未确认 # 最终审查 diff --git a/games/gomoku.py b/games/gomoku.py index 3541f3f..d25fb43 100644 --- a/games/gomoku.py +++ b/games/gomoku.py @@ -37,6 +37,10 @@ class GomokuGame(BaseGame): _, args = CommandParser.extract_command_args(command) args = args.strip() + # 调试日志 + logger.info(f"五子棋指令解析 - command: {command}") + logger.info(f"五子棋指令解析 - args: {args}") + # 没有参数,显示帮助 if not args: return self.get_help() @@ -44,6 +48,7 @@ class GomokuGame(BaseGame): # 解析参数 parts = args.split(maxsplit=1) action = parts[0].lower() + logger.info(f"五子棋指令解析 - action: {action}") # 帮助 if action in ['help', '帮助']: @@ -72,11 +77,13 @@ class GomokuGame(BaseGame): # 尝试解析为@对手(开始游戏) opponent_id = self._parse_opponent(args) + logger.info(f"五子棋指令解析 - opponent_id: {opponent_id}") if opponent_id is not None: return self._start_game(chat_id, user_id, opponent_id) # 未识别的指令 - return f"❌ 未识别的指令\n\n{self.get_help()}" + logger.warning(f"五子棋未识别的指令 - args: {args}") + return f"❌ 未识别的指令:{args}\n\n💡 提示:\n- 要开始游戏,请使用 `.gomoku` 然后@对手\n- 要落子,请使用 `.gomoku A1`(坐标格式)\n- 要查看帮助,请使用 `.gomoku help`" except Exception as e: logger.error(f"处理五子棋指令错误: {e}", exc_info=True) @@ -91,13 +98,23 @@ class GomokuGame(BaseGame): Returns: 用户ID或None """ - # WPS格式: - match = re.search(r'', args) - if match: - try: - return int(match.group(1)) - except ValueError: - pass + # WPS格式: 或其他变体 + # 尝试多种格式 + patterns = [ + r']*>', # + r']*>', # + r'user_id="(\d+)"', # 直接查找 user_id="xxx" + r'user_id=\'(\d+)\'', # 直接查找 user_id='xxx' + ] + + for pattern in patterns: + match = re.search(pattern, args) + if match: + try: + return int(match.group(1)) + except ValueError: + pass + return None def _get_game_pool(self, chat_id: int) -> Dict[str, Any]: diff --git a/routers/callback.py b/routers/callback.py index c3f56be..1223c52 100644 --- a/routers/callback.py +++ b/routers/callback.py @@ -28,7 +28,7 @@ async def callback_receive(request: Request): # 解析请求数据 data = await request.json() logger.info(f"收到消息: chatid={data.get('chatid')}, creator={data.get('creator')}") - logger.debug(f"消息内容: {data.get('content')}") + logger.info(f"消息内容: {data.get('content')}") # 验证请求 try: