Recording duplicated event IDs to avoid marking as spam just because the same event was downloaded from multiple relays.

This commit is contained in:
Vitor Pamplona 2023-02-22 18:08:14 -05:00
parent 8b9b6061b9
commit 61920ed31a
3 changed files with 7 additions and 4 deletions

View File

@ -515,7 +515,7 @@ class Account(
LocalCache.antiSpam.liveSpam.observeForever {
GlobalScope.launch(Dispatchers.IO) {
it.cache.spamMessages.snapshot().values.forEach {
if (it.pubkeyHex !in transientHiddenUsers && it.duplicatedMessages > 5) {
if (it.pubkeyHex !in transientHiddenUsers && it.duplicatedMessages.size >= 5) {
val userToBlock = LocalCache.getOrCreateUser(it.pubkeyHex)
if (userToBlock != userProfile() && userToBlock !in userProfile().follows) {
transientHiddenUsers = transientHiddenUsers + it.pubkeyHex

View File

@ -14,6 +14,8 @@ import kotlinx.coroutines.withContext
import nostr.postr.events.Event
import nostr.postr.toHex
data class Spammer(val pubkeyHex: HexKey, var duplicatedMessages: Set<HexKey>)
class AntiSpamFilter {
val recentMessages = LruCache<Int, String>(1000)
val spamMessages = LruCache<Int, Spammer>(1000)
@ -39,10 +41,12 @@ class AntiSpamFilter {
// Log down offenders
if (spamMessages.get(hash) == null) {
spamMessages.put(hash, Spammer(event.pubKey.toHexKey(), 2))
spamMessages.put(hash, Spammer(event.pubKey.toHexKey(), setOf(recentMessages[hash], event.id.toHex())))
liveSpam.invalidateData()
} else {
spamMessages.get(hash).duplicatedMessages++
val spammer = spamMessages.get(hash)
spammer.duplicatedMessages = spammer.duplicatedMessages + event.id.toHex()
liveSpam.invalidateData()
}

View File

@ -43,7 +43,6 @@ import nostr.postr.events.TextNoteEvent
import nostr.postr.toHex
import nostr.postr.toNpub
data class Spammer(val pubkeyHex: HexKey, var duplicatedMessages: Int)
object LocalCache {
val metadataParser = jacksonObjectMapper()