don't GC new users twice

deepcrayonfish^2
Thibault Duplessis 2021-11-26 18:59:09 +01:00
parent af4efb40b3
commit e00eca5112
1 changed files with 23 additions and 17 deletions

View File

@ -97,25 +97,31 @@ final class GarbageCollector(
private def isBadAccount(user: User) = user.lameOrTrollOrAlt
private def collect(user: User, email: EmailAddress, msg: => String): Funit =
justOnce(user.id) ?? {
val armed = isArmed()
val wait = (30 + ThreadLocalRandom.nextInt(300)).seconds
val message =
s"Will dispose of @${user.username} in $wait. Email: ${email.value}. $msg${!armed ?? " [SIMULATION]"}"
logger.info(message)
noteApi.lichessWrite(user, s"Garbage collected because of $msg")
irc.garbageCollector(message) >>- {
if (armed) {
doInitialSb(user)
system.scheduler
.scheduleOnce(wait) {
doCollect(user)
}
.unit
private def collect(user: User, email: EmailAddress, msg: => String): Funit = justOnce(user.id) ?? {
hasBeenCollectedBefore(user) flatMap {
case true => funit
case _ =>
val armed = isArmed()
val wait = (30 + ThreadLocalRandom.nextInt(300)).seconds
val message =
s"Will dispose of @${user.username} in $wait. Email: ${email.value}. $msg${!armed ?? " [SIMULATION]"}"
logger.info(message)
noteApi.lichessWrite(user, s"Garbage collected because of $msg")
irc.garbageCollector(message) >>- {
if (armed) {
doInitialSb(user)
system.scheduler
.scheduleOnce(wait) {
doCollect(user)
}
.unit
}
}
}
}
}
private def hasBeenCollectedBefore(user: User): Fu[Boolean] =
noteApi.byUserForMod(user.id).map(_.exists(_.text startsWith "Garbage collected"))
private def doInitialSb(user: User): Unit =
Bus.publish(