Skip to content

AntiSpamManager: Race Conditions und wiederholte Bestrafung #12

Description

@construktdev

AntiSpamManager.messagesByUser ist eine normale HashMap<User, Integer>, die von mehreren
JDA-Event-Threads parallel beschrieben wird (nicht thread-safe, mögliche Lost Updates).

Zusätzlich wird der Timeout + die DM-Benachrichtigung bei jeder weiteren Nachricht erneut
ausgelöst, sobald der Schwellenwert (> 5) einmal überschritten wurde:

if (messagesByUser.get(event.getAuthor()) > 5) {
    // timeoutUntil(...) + DM -> läuft bei jeder weiteren Nachricht erneut!
}

Vorschlag:

  • Thread-sichere Datenstruktur verwenden (z. B. `ConcurrentHashMap` + `AtomicInteger`, oder
    computeIfAbsent/merge statt containsKey/replace)
  • Zähler nach dem Bestrafen zurücksetzen, damit die Aktion nur einmal pro Vorfall ausgelöst wird

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions