# HG changeset patch # User unc0rr # Date 1354286623 -14400 # Node ID 0ea76ea45e6ac621bd06fbabcbbac8b24094143b # Parent e97e004272040e30622bd40bbb6f6b3c564ab2cd Implement ban by nickname diff -r e97e00427204 -r 0ea76ea45e6a gameServer/Actions.hs --- a/gameServer/Actions.hs Fri Nov 30 15:26:49 2012 +0100 +++ b/gameServer/Actions.hs Fri Nov 30 18:43:43 2012 +0400 @@ -52,6 +52,7 @@ | KickRoomClient ClientIndex | BanClient NominalDiffTime B.ByteString ClientIndex | BanIP B.ByteString NominalDiffTime B.ByteString + | BanNick B.ByteString NominalDiffTime B.ByteString | BanList | Unban B.ByteString | ChangeMaster @@ -500,6 +501,16 @@ processAction $ AddIP2Bans ip msg (addUTCTime seconds currentTime) +processAction (BanNick n seconds reason) = do + currentTime <- io getCurrentTime + let msg = + if seconds > 60 * 60 * 24 * 365 then + B.concat ["Permanent ban (", reason, ")"] + else + B.concat ["Ban for ", B.pack . show $ seconds, " (", reason, ")"] + processAction $ + AddNick2Bans n msg (addUTCTime seconds currentTime) + processAction BanList = do ch <- client's sendChan b <- gets (B.pack . unlines . map show . bans . serverInfo) diff -r e97e00427204 -r 0ea76ea45e6a gameServer/HWProtoLobbyState.hs --- a/gameServer/HWProtoLobbyState.hs Fri Nov 30 15:26:49 2012 +0100 +++ b/gameServer/HWProtoLobbyState.hs Fri Nov 30 18:43:43 2012 +0400 @@ -160,6 +160,10 @@ cl <- thisClient return [BanIP ip (readInt_ duration) reason | isAdministrator cl] +handleCmd_lobby ["BANNICK", n, reason, duration] = do + cl <- thisClient + return [BanNick n (readInt_ duration) reason | isAdministrator cl] + handleCmd_lobby ["BANLIST"] = do cl <- thisClient return [BanList | isAdministrator cl]