diff --git a/src/main/java/gg/agit/konect/infrastructure/slack/ai/SlackAIService.java b/src/main/java/gg/agit/konect/infrastructure/slack/ai/SlackAIService.java index 4df927c4..ebce30c8 100644 --- a/src/main/java/gg/agit/konect/infrastructure/slack/ai/SlackAIService.java +++ b/src/main/java/gg/agit/konect/infrastructure/slack/ai/SlackAIService.java @@ -22,6 +22,8 @@ public class SlackAIService { private static final Pattern AI_PREFIX_PATTERN = Pattern.compile("^[Aa][Ii]\\)\\s*(.+)$"); private static final Pattern MENTION_PATTERN = Pattern.compile("^<@[^>]+>\\s*"); + private static final Pattern MARKDOWN_BOLD_PATTERN = + Pattern.compile("\\*\\*(.+?)\\*\\*", Pattern.DOTALL); private static final String AI_RESPONSE_PREFIX = ":robot_face: *AI 응답*\n"; private static final int MAX_HISTORY_MESSAGES = 10; private static final String EMPTY_QUERY_MESSAGE = @@ -169,7 +171,14 @@ private List> mergeConsecutiveRoles(List return merged; } + private String convertMarkdownToSlack(String text) { + if (text == null) { + return null; + } + return MARKDOWN_BOLD_PATTERN.matcher(text).replaceAll("*$1*"); + } + private String formatSlackResponse(String response) { - return String.format(":robot_face: *AI 응답*\n%s", response); + return AI_RESPONSE_PREFIX + convertMarkdownToSlack(response); } } diff --git a/src/main/java/gg/agit/konect/infrastructure/slack/ai/SlackEventController.java b/src/main/java/gg/agit/konect/infrastructure/slack/ai/SlackEventController.java index be7fedbb..ba225863 100644 --- a/src/main/java/gg/agit/konect/infrastructure/slack/ai/SlackEventController.java +++ b/src/main/java/gg/agit/konect/infrastructure/slack/ai/SlackEventController.java @@ -115,21 +115,21 @@ private void handleEvent(Map event) { if (slackAIService.isAIQuery(text)) { log.debug("AI 질문 감지"); slackAIService.processAIQuery(text, channelId, effectiveThreadTs, null); - } else if (threadTs != null && slackAIService.isAppMention(text)) { - List> aiReplies = - slackAIService.fetchAIThreadReplies(channelId, threadTs); - if (!aiReplies.isEmpty()) { - log.debug("AI 스레드 내 후속 질문 감지"); - slackAIService.processAIQuery( - text, channelId, effectiveThreadTs, aiReplies); - } } } if ("app_mention".equals(eventType) && text != null) { String normalizedText = slackAIService.normalizeAppMentionText(text); log.debug("앱 멘션 감지"); - slackAIService.processAIQuery(normalizedText, channelId, effectiveThreadTs, null); + if (threadTs != null) { + List> aiReplies = + slackAIService.fetchAIThreadReplies(channelId, threadTs); + slackAIService.processAIQuery( + normalizedText, channelId, effectiveThreadTs, + aiReplies.isEmpty() ? null : aiReplies); + } else { + slackAIService.processAIQuery(normalizedText, channelId, effectiveThreadTs, null); + } } } }