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)"] |