From a893593f258e671fa5e440ca571b4c8a9e195c4b Mon Sep 17 00:00:00 2001 From: Variet Agent Date: Thu, 19 Mar 2026 07:40:20 +0900 Subject: [PATCH] =?UTF-8?q?fix(bot):=20chat=20=EC=9D=91=EB=8B=B5=20JSON=20?= =?UTF-8?q?=ED=8C=8C=EC=8B=B1=20strict=3DFalse=20+=20Embed=20=EB=A0=8C?= =?UTF-8?q?=EB=8D=94=EB=A7=81=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/discord_bot.py | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/api/discord_bot.py b/api/discord_bot.py index 23052a3..4944009 100644 --- a/api/discord_bot.py +++ b/api/discord_bot.py @@ -163,7 +163,7 @@ def _parse_unified_response(raw: str) -> dict: m = _re.search(r"```json\s*\n(.+?)```", raw, _re.DOTALL) if m: try: - return json.loads(m.group(1)) + return json.loads(m.group(1), strict=False) except json.JSONDecodeError: pass @@ -178,7 +178,7 @@ def _parse_unified_response(raw: str) -> dict: depth -= 1 if depth == 0: try: - return json.loads(raw[start:i + 1]) + return json.loads(raw[start:i + 1], strict=False) except json.JSONDecodeError: break @@ -411,16 +411,27 @@ async def on_message(message: discord.Message): logger.info("[NC] handle 완료") elif mode == "chat": - # 즉시 응답 + # 즉시 응답 — 항상 Embed 사용 (Discord markdown 렌더링) response = parsed.get("response", "") logger.info(f"[chat] 응답 길이: {len(response)}") if response: - if len(response) <= 2000: - await message.reply(response) - else: - for i in range(0, len(response), 4000): - embed = discord.Embed(description=response[i:i + 4000], color=0x3498DB) - await message.channel.send(embed=embed) + # 응답이 JSON 구조를 포함하면 제거 (fallback 시 raw 전체가 들어옴) + if response.strip().startswith('"mode"') or response.strip().startswith('{"mode"'): + import re as _re + m = _re.search(r'"response"\s*:\s*"(.*)', response, _re.DOTALL) + if m: + cleaned = m.group(1) + # 끝의 따옴표+중괄호 제거 + if cleaned.endswith('"}'): + cleaned = cleaned[:-2] + elif cleaned.endswith('"'): + cleaned = cleaned[:-1] + response = cleaned.replace('\\n', '\n') + from handlers.renderer import safe_send_embed + for i in range(0, len(response), 4000): + chunk = response[i:i + 4000] + embed = discord.Embed(description=chunk, color=0x3498DB) + await safe_send_embed(message.channel, embed) else: await message.reply("응답을 생성하지 못했습니다.")