Recording duplicated event IDs to avoid marking as spam just because the same event was downloaded from multiple relays.
This commit is contained in:
@@ -515,7 +515,7 @@ class Account(
|
|||||||
LocalCache.antiSpam.liveSpam.observeForever {
|
LocalCache.antiSpam.liveSpam.observeForever {
|
||||||
GlobalScope.launch(Dispatchers.IO) {
|
GlobalScope.launch(Dispatchers.IO) {
|
||||||
it.cache.spamMessages.snapshot().values.forEach {
|
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)
|
val userToBlock = LocalCache.getOrCreateUser(it.pubkeyHex)
|
||||||
if (userToBlock != userProfile() && userToBlock !in userProfile().follows) {
|
if (userToBlock != userProfile() && userToBlock !in userProfile().follows) {
|
||||||
transientHiddenUsers = transientHiddenUsers + it.pubkeyHex
|
transientHiddenUsers = transientHiddenUsers + it.pubkeyHex
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ import kotlinx.coroutines.withContext
|
|||||||
import nostr.postr.events.Event
|
import nostr.postr.events.Event
|
||||||
import nostr.postr.toHex
|
import nostr.postr.toHex
|
||||||
|
|
||||||
|
data class Spammer(val pubkeyHex: HexKey, var duplicatedMessages: Set<HexKey>)
|
||||||
|
|
||||||
class AntiSpamFilter {
|
class AntiSpamFilter {
|
||||||
val recentMessages = LruCache<Int, String>(1000)
|
val recentMessages = LruCache<Int, String>(1000)
|
||||||
val spamMessages = LruCache<Int, Spammer>(1000)
|
val spamMessages = LruCache<Int, Spammer>(1000)
|
||||||
@@ -39,10 +41,12 @@ class AntiSpamFilter {
|
|||||||
|
|
||||||
// Log down offenders
|
// Log down offenders
|
||||||
if (spamMessages.get(hash) == null) {
|
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()
|
liveSpam.invalidateData()
|
||||||
} else {
|
} else {
|
||||||
spamMessages.get(hash).duplicatedMessages++
|
val spammer = spamMessages.get(hash)
|
||||||
|
spammer.duplicatedMessages = spammer.duplicatedMessages + event.id.toHex()
|
||||||
|
|
||||||
liveSpam.invalidateData()
|
liveSpam.invalidateData()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ import nostr.postr.events.TextNoteEvent
|
|||||||
import nostr.postr.toHex
|
import nostr.postr.toHex
|
||||||
import nostr.postr.toNpub
|
import nostr.postr.toNpub
|
||||||
|
|
||||||
data class Spammer(val pubkeyHex: HexKey, var duplicatedMessages: Int)
|
|
||||||
|
|
||||||
object LocalCache {
|
object LocalCache {
|
||||||
val metadataParser = jacksonObjectMapper()
|
val metadataParser = jacksonObjectMapper()
|
||||||
|
|||||||
Reference in New Issue
Block a user