package wecom import "sync" const wecomMaxProcessedMessages = 1000 // markMessageProcessed marks msgID as processed and returns false for duplicates. // All map reads/writes (including len) are protected by msgMu to avoid races. func markMessageProcessed(msgMu *sync.RWMutex, processedMsgs *map[string]bool, msgID string, maxEntries int) bool { if maxEntries <= 0 { maxEntries = wecomMaxProcessedMessages } msgMu.Lock() defer msgMu.Unlock() if (*processedMsgs)[msgID] { return false } (*processedMsgs)[msgID] = true // Keep existing behavior: when over limit, reset dedupe map entirely. if len(*processedMsgs) > maxEntries { *processedMsgs = make(map[string]bool) } return true }