import { resolveGlobalDedupeCache } from "openclaw/plugin-sdk/infra-runtime" ;
/**
* In - memory cache of Slack threads the bot has participated in .
* Used to auto - respond in threads without requiring @ mention after the first reply .
* Follows a similar TTL pattern to the MS Teams and Telegram sent - message caches .
*/
const TTL_MS = 24 * 60 * 60 * 1000 ; // 24 hours
const MAX_ENTRIES = 5000 ;
/**
* Keep Slack thread participation shared across bundled chunks so thread
* auto - reply gating does not diverge between prepare / dispatch call paths .
*/
const SLACK_THREAD_PARTICIPATION_KEY = Symbol.for ("openclaw.slackThreadParticipation" );
const threadParticipation = resolveGlobalDedupeCache(SLACK_THREAD_PARTICIPATION_KEY, {
ttlMs: TTL_MS,
maxSize: MAX_ENTRIES,
});
function makeKey(accountId: string, channelId: string, threadTs: string): string {
return `${accountId}:${channelId}:${threadTs}`;
}
export function recordSlackThreadParticipation(
accountId: string,
channelId: string,
threadTs: string,
): void {
if (!accountId || !channelId || !threadTs) {
return ;
}
threadParticipation.check(makeKey(accountId, channelId, threadTs));
}
export function hasSlackThreadParticipation(
accountId: string,
channelId: string,
threadTs: string,
): boolean {
if (!accountId || !channelId || !threadTs) {
return false ;
}
return threadParticipation.peek(makeKey(accountId, channelId, threadTs));
}
export function clearSlackThreadParticipationCache(): void {
threadParticipation.clear();
}
Messung V0.5 in Prozent C=99 H=98 G=98
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland