openclaw/src/auto-reply/reply/reply-reference.ts
Lalit Singh cd1480d637 fix(discord): respect replyToMode in threads
Previously, when replying in Discord threads, the replyToMode setting
was ignored because existingId was checked before replyToMode. This
caused reply references to be added even when replyToMode was set to
'off'.

This fix moves the replyToMode check before the existingId check,
ensuring that replyToMode: 'off' is respected in all contexts including
threads.
2026-01-28 15:42:30 +01:00

57 lines
1.6 KiB
TypeScript

import type { ReplyToMode } from "../../config/types.js";
export type ReplyReferencePlanner = {
/** Returns the effective reply/thread id for the next send and updates state. */
use(): string | undefined;
/** Mark that a reply was sent (needed when no reference is used). */
markSent(): void;
/** Whether a reply has been sent in this flow. */
hasReplied(): boolean;
};
export function createReplyReferencePlanner(options: {
replyToMode: ReplyToMode;
/** Existing thread/reference id (used when present, unless replyToMode is "off"). */
existingId?: string;
/** Id to start a new thread/reference when allowed (e.g., parent message id). */
startId?: string;
/** Disable reply references entirely (e.g., when posting inside a new thread). */
allowReference?: boolean;
/** Seed the planner with prior reply state. */
hasReplied?: boolean;
}): ReplyReferencePlanner {
let hasReplied = options.hasReplied ?? false;
const allowReference = options.allowReference !== false;
const existingId = options.existingId?.trim();
const startId = options.startId?.trim();
const use = (): string | undefined => {
if (!allowReference) return undefined;
if (options.replyToMode === "off") return undefined;
if (existingId) {
hasReplied = true;
return existingId;
}
if (!startId) return undefined;
if (options.replyToMode === "all") {
hasReplied = true;
return startId;
}
if (!hasReplied) {
hasReplied = true;
return startId;
}
return undefined;
};
const markSent = () => {
hasReplied = true;
};
return {
use,
markSent,
hasReplied: () => hasReplied,
};
}