1 {-# LANGUAGE OverloadedStrings #-} |
1 {-# LANGUAGE OverloadedStrings #-} |
2 module HWProtoInRoomState where |
2 module HWProtoInRoomState where |
3 |
3 |
4 import qualified Data.Foldable as Foldable |
|
5 import qualified Data.Map as Map |
4 import qualified Data.Map as Map |
6 import Data.Sequence(Seq, (|>), (><), fromList, empty) |
5 import Data.Sequence((|>), empty) |
7 import Data.List |
6 import Data.List |
8 import Data.Maybe |
7 import Data.Maybe |
9 import qualified Data.ByteString.Char8 as B |
8 import qualified Data.ByteString.Char8 as B |
10 import Control.Monad |
9 import Control.Monad |
11 import Control.Monad.Reader |
10 import Control.Monad.Reader |
232 if not $ isMaster cl then |
231 if not $ isMaster cl then |
233 [ProtocolError "Not room master"] |
232 [ProtocolError "Not room master"] |
234 else |
233 else |
235 [ModifyRoom (\r -> r{isRestrictedTeams = not $ isRestrictedTeams r})] |
234 [ModifyRoom (\r -> r{isRestrictedTeams = not $ isRestrictedTeams r})] |
236 |
235 |
237 {- |
236 |
238 handleCmd_inRoom clID clients rooms ["KICK", kickNick] = |
237 handleCmd_inRoom ["KICK", kickNick] = do |
239 [KickRoomClient kickID | isMaster client && not noSuchClient && (kickID /= clID) && (roomID client == roomID kickClient)] |
238 (thisClientId, rnc) <- ask |
240 where |
239 maybeClientId <- clientByNick kickNick |
241 client = clients IntMap.! clID |
240 master <- liftM isMaster thisClient |
242 maybeClient = Foldable.find (\cl -> kickNick == nick cl) clients |
241 let kickId = fromJust maybeClientId |
243 noSuchClient = isNothing maybeClient |
242 let sameRoom = (clientRoom rnc thisClientId) == (clientRoom rnc kickId) |
244 kickClient = fromJust maybeClient |
243 return |
245 kickID = clientUID kickClient |
244 [KickRoomClient kickId | master && isJust maybeClientId && (kickId /= thisClientId) && sameRoom] |
246 |
245 |
247 |
246 |
248 handleCmd_inRoom clID clients _ ["TEAMCHAT", msg] = |
247 handleCmd_inRoom ["TEAMCHAT", msg] = do |
249 [AnswerSameClan ["EM", engineMsg]] |
248 cl <- thisClient |
250 where |
249 chans <- roomSameClanChans |
251 client = clients IntMap.! clID |
250 return [AnswerClients chans ["EM", engineMsg cl]] |
252 engineMsg = toEngineMsg $ 'b' : ((nick client) ++ "(team): " ++ msg ++ "\x20\x20") |
251 where |
253 -} |
252 engineMsg cl = toEngineMsg $ "b" `B.append` (nick cl) `B.append` "(team): " `B.append` msg `B.append` "\x20\x20" |
|
253 |
254 handleCmd_inRoom _ = return [ProtocolError "Incorrect command (state: in room)"] |
254 handleCmd_inRoom _ = return [ProtocolError "Incorrect command (state: in room)"] |