gameServer/HWProtoLobbyState.hs
changeset 11032 6aa31d7b1fa5
parent 10814 810ac1d21fd0
child 11046 47a8c19ecb60
equal deleted inserted replaced
11031:4ad0252470dd 11032:6aa31d7b1fa5
   161     return [Random [c] rs]
   161     return [Random [c] rs]
   162 
   162 
   163     ---------------------------
   163     ---------------------------
   164     -- Administrator's stuff --
   164     -- Administrator's stuff --
   165 
   165 
   166 handleCmd_lobby ["KICK", kickNick] = do
   166 handleCmd_lobby ["KICK", kickNick] = serverAdminOnly $ do
   167     (ci, _) <- ask
   167     (ci, _) <- ask
   168     cl <- thisClient
       
   169     kickId <- clientByNick kickNick
   168     kickId <- clientByNick kickNick
   170     return [KickClient $ fromJust kickId | isAdministrator cl && isJust kickId && fromJust kickId /= ci]
   169     return [KickClient $ fromJust kickId | isJust kickId && fromJust kickId /= ci]
   171 
   170 
   172 
   171 
   173 handleCmd_lobby ["BAN", banNick, reason, duration] = do
   172 handleCmd_lobby ["BAN", banNick, reason, duration] = serverAdminOnly $ do
   174     (ci, _) <- ask
   173     (ci, _) <- ask
   175     cl <- thisClient
       
   176     banId <- clientByNick banNick
   174     banId <- clientByNick banNick
   177     return [BanClient (readInt_ duration) reason (fromJust banId) | isAdministrator cl && isJust banId && fromJust banId /= ci]
   175     return [BanClient (readInt_ duration) reason (fromJust banId) | isJust banId && fromJust banId /= ci]
   178 
   176 
   179 handleCmd_lobby ["BANIP", ip, reason, duration] = do
   177 handleCmd_lobby ["BANIP", ip, reason, duration] = serverAdminOnly $
   180     cl <- thisClient
   178     return [BanIP ip (readInt_ duration) reason]
   181     return [BanIP ip (readInt_ duration) reason | isAdministrator cl]
   179 
   182 
   180 handleCmd_lobby ["BANNICK", n, reason, duration] = serverAdminOnly $
   183 handleCmd_lobby ["BANNICK", n, reason, duration] = do
   181     return [BanNick n (readInt_ duration) reason]
   184     cl <- thisClient
   182 
   185     return [BanNick n (readInt_ duration) reason | isAdministrator cl]
   183 handleCmd_lobby ["BANLIST"] = serverAdminOnly $
   186 
   184     return [BanList]
   187 handleCmd_lobby ["BANLIST"] = do
   185 
   188     cl <- thisClient
   186 
   189     return [BanList | isAdministrator cl]
   187 handleCmd_lobby ["UNBAN", entry] = serverAdminOnly $
   190 
   188     return [Unban entry]
   191 
   189 
   192 handleCmd_lobby ["UNBAN", entry] = do
   190 
   193     cl <- thisClient
   191 handleCmd_lobby ["SET_SERVER_VAR", "MOTD_NEW", newMessage] = serverAdminOnly $
   194     return [Unban entry | isAdministrator cl]
   192     return [ModifyServerInfo (\si -> si{serverMessage = newMessage})]
   195 
   193 
   196 
   194 handleCmd_lobby ["SET_SERVER_VAR", "MOTD_OLD", newMessage] = serverAdminOnly $
   197 handleCmd_lobby ["SET_SERVER_VAR", "MOTD_NEW", newMessage] = do
   195     return [ModifyServerInfo (\si -> si{serverMessageForOldVersions = newMessage})]
   198     cl <- thisClient
   196 
   199     return [ModifyServerInfo (\si -> si{serverMessage = newMessage}) | isAdministrator cl]
   197 handleCmd_lobby ["SET_SERVER_VAR", "LATEST_PROTO", protoNum] = serverAdminOnly $
   200 
   198     return [ModifyServerInfo (\si -> si{latestReleaseVersion = readNum}) | readNum > 0]
   201 handleCmd_lobby ["SET_SERVER_VAR", "MOTD_OLD", newMessage] = do
       
   202     cl <- thisClient
       
   203     return [ModifyServerInfo (\si -> si{serverMessageForOldVersions = newMessage}) | isAdministrator cl]
       
   204 
       
   205 handleCmd_lobby ["SET_SERVER_VAR", "LATEST_PROTO", protoNum] = do
       
   206     cl <- thisClient
       
   207     return [ModifyServerInfo (\si -> si{latestReleaseVersion = readNum}) | isAdministrator cl && readNum > 0]
       
   208     where
   199     where
   209         readNum = readInt_ protoNum
   200         readNum = readInt_ protoNum
   210 
   201 
   211 handleCmd_lobby ["GET_SERVER_VAR"] = do
   202 handleCmd_lobby ["GET_SERVER_VAR"] = serverAdminOnly $
   212     cl <- thisClient
   203     return [SendServerVars]
   213     return [SendServerVars | isAdministrator cl]
   204 
   214 
   205 handleCmd_lobby ["CLEAR_ACCOUNTS_CACHE"] = serverAdminOnly $
   215 handleCmd_lobby ["CLEAR_ACCOUNTS_CACHE"] = do
   206     return [ClearAccountsCache]
   216     cl <- thisClient
   207 
   217     return [ClearAccountsCache | isAdministrator cl]
   208 handleCmd_lobby ["RESTART_SERVER"] = serverAdminOnly $
   218 
   209     return [RestartServer]
   219 handleCmd_lobby ["RESTART_SERVER"] = do
   210 
   220     cl <- thisClient
   211 handleCmd_lobby ["STATS"] = serverAdminOnly $
   221     return [RestartServer | isAdministrator cl]
   212     return [Stats]
   222 
       
   223 handleCmd_lobby ["STATS"] = do
       
   224     cl <- thisClient
       
   225     return [Stats | isAdministrator cl]
       
   226 
   213 
   227 handleCmd_lobby _ = return [ProtocolError "Incorrect command (state: in lobby)"]
   214 handleCmd_lobby _ = return [ProtocolError "Incorrect command (state: in lobby)"]