don't auto-mark great players with lots of rated games
parent
b0846b6390
commit
49d3f497ca
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue