mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-30 02:22:25 +00:00
52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import { hasControlCommand } from "../auto-reply/command-detection.js";
|
|
import type { CommandNormalizeOptions } from "../auto-reply/commands-registry.js";
|
|
import {
|
|
createInboundDebouncer,
|
|
resolveInboundDebounceMs,
|
|
type InboundDebounceCreateParams,
|
|
} from "../auto-reply/inbound-debounce.js";
|
|
import type { OpenClawConfig } from "../config/types.js";
|
|
|
|
export function shouldDebounceTextInbound(params: {
|
|
text: string | null | undefined;
|
|
cfg: OpenClawConfig;
|
|
hasMedia?: boolean;
|
|
commandOptions?: CommandNormalizeOptions;
|
|
allowDebounce?: boolean;
|
|
}): boolean {
|
|
if (params.allowDebounce === false) {
|
|
return false;
|
|
}
|
|
if (params.hasMedia) {
|
|
return false;
|
|
}
|
|
const text = params.text?.trim() ?? "";
|
|
if (!text) {
|
|
return false;
|
|
}
|
|
return !hasControlCommand(text, params.cfg, params.commandOptions);
|
|
}
|
|
|
|
export function createChannelInboundDebouncer<T>(
|
|
params: Omit<InboundDebounceCreateParams<T>, "debounceMs"> & {
|
|
cfg: OpenClawConfig;
|
|
channel: string;
|
|
debounceMsOverride?: number;
|
|
},
|
|
): {
|
|
debounceMs: number;
|
|
debouncer: ReturnType<typeof createInboundDebouncer<T>>;
|
|
} {
|
|
const debounceMs = resolveInboundDebounceMs({
|
|
cfg: params.cfg,
|
|
channel: params.channel,
|
|
overrideMs: params.debounceMsOverride,
|
|
});
|
|
const { cfg: _cfg, channel: _channel, debounceMsOverride: _override, ...rest } = params;
|
|
const debouncer = createInboundDebouncer<T>({
|
|
debounceMs,
|
|
...rest,
|
|
});
|
|
return { debounceMs, debouncer };
|
|
}
|