don't auto-mark great players with lots of rated games

pull/363/head
Thibault Duplessis 2015-03-19 17:57:40 +01:00
parent b0846b6390
commit 49d3f497ca
2 changed files with 15 additions and 4 deletions

View File

@ -1,5 +1,6 @@
package lila.evaluation
import lila.user.User
import chess.Color
import org.joda.time.DateTime
@ -22,14 +23,16 @@ case class PlayerAssessment(
val color = Color.apply(white)
}
case class PlayerAggregateAssessment(playerAssessments: List[PlayerAssessment],
case class PlayerAggregateAssessment(
user: User,
playerAssessments: List[PlayerAssessment],
relatedUsers: List[String],
relatedCheaters: List[String]) {
import Statistics._
import AccountAction._
def action = {
val markable: Boolean = (
val markable: Boolean = !isGreatUser && (
(cheatingSum >= 2 || cheatingSum + likelyCheatingSum >= 4)
// more than 10 percent of games are cheating
&& (cheatingSum.toDouble / assessmentsCount >= 0.1 - relationModifier
@ -112,6 +115,9 @@ case class PlayerAggregateAssessment(playerAssessments: List[PlayerAssessment],
val sfAvgHold = sfAvgGiven(_.hold)
val sfAvgNoHold = sfAvgGiven(!_.hold)
def isGreatUser = user.perfs.bestRating > 2200 &&
user.count.rated >= 100
def reportText(maxGames: Int = 10): String = {
val gameLinks: String = (playerAssessments.sortBy(-_.assessment.id).take(maxGames).map{ a =>
a.assessment.emoticon + " http://lichess.org/" + a.gameId + "/" + a.color.name

View File

@ -52,11 +52,16 @@ final class AssessApi(
def getPlayerAggregateAssessment(userId: String, nb: Int = 100): Fu[Option[PlayerAggregateAssessment]] = {
val relatedUsers = userIdsSharingIp(userId)
UserRepo.byId(userId) zip
getPlayerAssessmentsByUserId(userId, nb) zip
relatedUsers zip
(relatedUsers flatMap UserRepo.filterByEngine) map {
case ((assessedGamesHead :: assessedGamesTail, relatedUs), relatedCheaters) =>
Some(PlayerAggregateAssessment(assessedGamesHead :: assessedGamesTail, relatedUs, relatedCheaters))
case (((Some(user), assessedGamesHead :: assessedGamesTail), relatedUs), relatedCheaters) =>
Some(PlayerAggregateAssessment(
user,
assessedGamesHead :: assessedGamesTail,
relatedUs,
relatedCheaters))
case _ => none
}
}