Files
EJClaw/src/bot-message-filter.ts

40 lines
1.4 KiB
TypeScript

import { isSessionCommandControlMessage } from './session-commands.js';
import { NewMessage } from './types.js';
const PAIRED_EXECUTION_CONTROL_MESSAGE_PATTERN =
/^(?:<@\d+>\s+)?(?:✅ 작업 완료\.|⚠️ 자동 해결 불가 — 확인이 필요합니다\.|⚠️ 중재자 판단: 사람 개입이 필요합니다\.)$/;
function isPairedExecutionControlMessage(content: string): boolean {
return PAIRED_EXECUTION_CONTROL_MESSAGE_PATTERN.test(content.trim());
}
/**
* Filter messages before processing.
* - Normal rooms: drop all bot messages.
* - Paired rooms (allowBotMessages=true): keep other bot's messages,
* but drop messages authored by this service's own bot (via isOwnMessage).
*/
export function filterProcessableMessages(
messages: NewMessage[],
allowBotMessages: boolean,
isOwnMessage?: (msg: NewMessage) => boolean,
): NewMessage[] {
const withoutControlMessages = messages.filter(
(message) =>
!(
message.is_bot_message &&
(isSessionCommandControlMessage(message.content) ||
isPairedExecutionControlMessage(message.content))
),
);
if (allowBotMessages) {
// In paired rooms, allow other bot messages but filter own bot's output
if (isOwnMessage) {
return withoutControlMessages.filter((m) => !isOwnMessage(m));
}
return withoutControlMessages;
}
return withoutControlMessages.filter((message) => !message.is_bot_message);
}