monitored mod actions
parent
36823fa851
commit
1da3937eb9
|
@ -179,7 +179,7 @@ lazy val event = module("event",
|
|||
)
|
||||
|
||||
lazy val mod = module("mod",
|
||||
Seq(common, db, user, hub, security, tournament, simul, game, analyse, evaluation, report, notifyModule, history, perfStat),
|
||||
Seq(common, db, user, hub, security, tournament, simul, game, analyse, evaluation, report, notifyModule, history, perfStat, slack),
|
||||
reactivemongo.bundle
|
||||
)
|
||||
|
||||
|
|
|
@ -43,6 +43,7 @@ final class Env(
|
|||
rankingApi: lila.user.RankingApi,
|
||||
noteApi: lila.user.NoteApi,
|
||||
cacheApi: lila.memo.CacheApi,
|
||||
slackApi: lila.slack.SlackApi,
|
||||
securityStore: lila.security.Store
|
||||
)(implicit ec: scala.concurrent.ExecutionContext, system: ActorSystem) {
|
||||
|
||||
|
|
|
@ -3,9 +3,11 @@ package lila.mod
|
|||
import lila.db.dsl._
|
||||
import lila.report.{ Mod, ModId, Report, Suspect }
|
||||
import lila.security.Permission
|
||||
import lila.user.User
|
||||
import lila.user.{ User, UserRepo }
|
||||
|
||||
final class ModlogApi(repo: ModlogRepo)(implicit ec: scala.concurrent.ExecutionContext) {
|
||||
final class ModlogApi(repo: ModlogRepo, userRepo: UserRepo, slackApi: lila.slack.SlackApi)(
|
||||
implicit ec: scala.concurrent.ExecutionContext
|
||||
) {
|
||||
|
||||
private def coll = repo.coll
|
||||
|
||||
|
@ -213,6 +215,29 @@ final class ModlogApi(repo: ModlogRepo)(implicit ec: scala.concurrent.ExecutionC
|
|||
private def add(m: Modlog): Funit = {
|
||||
lila.mon.mod.log.create.increment()
|
||||
lila.log("mod").info(m.toString)
|
||||
coll.insert.one(m).void
|
||||
coll.insert.one(m) >>
|
||||
slackMonitor(m)
|
||||
}
|
||||
|
||||
private def slackMonitor(m: Modlog): Funit = {
|
||||
import lila.mod.{ Modlog => M }
|
||||
userRepo.isMonitoredMod(m.mod) flatMap {
|
||||
_ ?? slackApi.monitorMod(
|
||||
m.mod,
|
||||
icon = m.action match {
|
||||
case M.alt | M.engine | M.booster | M.troll | M.closeAccount => "thorhammer"
|
||||
case M.unalt | M.unengine | M.unbooster | M.ipunban | M.untroll | M.reopenAccount =>
|
||||
"large_blue_circle"
|
||||
case M.deletePost | M.deleteTeam | M.terminateTournament => "x"
|
||||
case M.chatTimeout => "hourglass_flowing_sand"
|
||||
case M.ban | M.ipban => "ripp"
|
||||
case M.closeTopic => "lock"
|
||||
case M.openTopic => "unlock"
|
||||
case M.modMessage => "left_speech_bubble"
|
||||
case _ => "gear"
|
||||
},
|
||||
text = s"""${m.showAction.capitalize} ${m.user.??(u => s"@$u ")}${~m.details}"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,6 +55,7 @@ object Permission {
|
|||
case object Streamers extends Permission("ROLE_STREAMERS")
|
||||
case object Verified extends Permission("ROLE_VERIFIED")
|
||||
case object Prismic extends Permission("ROLE_PRISMIC")
|
||||
case object MonitoredMod extends Permission("ROLE_MONITORED_MOD")
|
||||
|
||||
case object LichessTeam
|
||||
extends Permission(
|
||||
|
@ -163,7 +164,8 @@ object Permission {
|
|||
Streamers,
|
||||
DisableTwoFactor,
|
||||
Verified,
|
||||
Prismic
|
||||
Prismic,
|
||||
MonitoredMod
|
||||
)
|
||||
|
||||
private lazy val all: List[Permission] = SuperAdmin :: allButSuperAdmin
|
||||
|
|
|
@ -90,6 +90,19 @@ final class SlackApi(
|
|||
)
|
||||
)
|
||||
|
||||
def monitorMod(modId: User.ID, icon: String, text: String): Funit = lightUser(modId) flatMap {
|
||||
_ ?? { mod =>
|
||||
client(
|
||||
SlackMessage(
|
||||
username = mod.name,
|
||||
icon = icon,
|
||||
text = linkifyUsers(text),
|
||||
channel = "tavern-monitor"
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
def chatPanic(mod: User, v: Boolean): Funit =
|
||||
client(
|
||||
SlackMessage(
|
||||
|
@ -130,7 +143,7 @@ final class SlackApi(
|
|||
client(
|
||||
SlackMessage(
|
||||
username = "Board API game",
|
||||
icon = "robot_face",
|
||||
icon = "electric_plug",
|
||||
text = s"${userLink(user)} is playing ${gameLink(path)} with the Board API",
|
||||
channel = rooms.tavernBots
|
||||
)
|
||||
|
|
|
@ -374,6 +374,9 @@ final class UserRepo(val coll: Coll)(implicit ec: scala.concurrent.ExecutionCont
|
|||
}
|
||||
)
|
||||
|
||||
def isMonitoredMod(userId: User.ID) =
|
||||
coll.exists($id(userId) ++ $doc(F.roles -> "ROLE_MONITORED_MOD"))
|
||||
|
||||
import Authenticator._
|
||||
def getPasswordHash(id: User.ID): Fu[Option[String]] =
|
||||
coll.byId[AuthData](id, authProjection) map {
|
||||
|
|
Loading…
Reference in New Issue