mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 11:11:23 +00:00
fix: dedupe inbound messages across providers
This commit is contained in:
@@ -50,6 +50,7 @@ import {
|
||||
updateLastRoute,
|
||||
} from "../config/sessions.js";
|
||||
import { danger, logVerbose, shouldLogVerbose } from "../globals.js";
|
||||
import { createDedupeCache } from "../infra/dedupe.js";
|
||||
import { enqueueSystemEvent } from "../infra/system-events.js";
|
||||
import { getChildLogger } from "../logging.js";
|
||||
import { type FetchLike, fetchRemoteMedia } from "../media/fetch.js";
|
||||
@@ -516,24 +517,11 @@ export async function monitorSlackProvider(opts: MonitorSlackOpts = {}) {
|
||||
}
|
||||
>();
|
||||
const userCache = new Map<string, { name?: string }>();
|
||||
const seenMessages = new Map<string, number>();
|
||||
const seenMessages = createDedupeCache({ ttlMs: 60_000, maxSize: 500 });
|
||||
|
||||
const markMessageSeen = (channelId: string | undefined, ts?: string) => {
|
||||
if (!channelId || !ts) return false;
|
||||
const key = `${channelId}:${ts}`;
|
||||
if (seenMessages.has(key)) return true;
|
||||
seenMessages.set(key, Date.now());
|
||||
if (seenMessages.size > 500) {
|
||||
const cutoff = Date.now() - 60_000;
|
||||
for (const [entry, seenAt] of seenMessages) {
|
||||
if (seenAt < cutoff || seenMessages.size > 450) {
|
||||
seenMessages.delete(entry);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return seenMessages.check(`${channelId}:${ts}`);
|
||||
};
|
||||
|
||||
const app = new App({
|
||||
|
||||
Reference in New Issue
Block a user