{-# Language OverloadedStrings #-} {-| Module : Client.Commands.Queries Description : Query command implementations Copyright : (c) Eric Mertens, 2016-2020 License : ISC Maintainer : emertens@gmail.com -} module Client.Commands.Queries (queryCommands) where import Control.Applicative import Client.Commands.Arguments.Spec import Client.Commands.TabCompletion import Client.Commands.Types import Client.State.Network (sendMsg) import qualified Data.Text as Text import Irc.Commands queryCommands :: CommandSection queryCommands = CommandSection "Queries" [ Command (pure "who") (remainingArg "arguments") "Send WHO query to server with given arguments.\n" $ NetworkCommand cmdWho simpleNetworkTab , Command (pure "whois") (remainingArg "arguments") "Send WHOIS query to server with given arguments.\n" $ NetworkCommand cmdWhois simpleNetworkTab , Command (pure "whowas") (remainingArg "arguments") "Send WHOWAS query to server with given arguments.\n" $ NetworkCommand cmdWhowas simpleNetworkTab , Command (pure "ison") (remainingArg "arguments") "Send ISON query to server with given arguments.\n" $ NetworkCommand cmdIson simpleNetworkTab , Command (pure "userhost") (remainingArg "arguments") "Send USERHOST query to server with given arguments.\n" $ NetworkCommand cmdUserhost simpleNetworkTab , Command (pure "time") (optionalArg (simpleToken "[servername]")) "Send TIME query to server with given arguments.\n" $ NetworkCommand cmdTime simpleNetworkTab , Command (pure "stats") (remainingArg "arguments") "Send STATS query to server with given arguments.\n" $ NetworkCommand cmdStats simpleNetworkTab , Command (pure "lusers") (optionalArg (liftA2 (,) (simpleToken "mask") (optionalArg (simpleToken "[servername]")))) "Send LUSERS query to server with given arguments.\n" $ NetworkCommand cmdLusers simpleNetworkTab , Command (pure "motd") (optionalArg (simpleToken "[servername]")) "Send MOTD query to server.\n" $ NetworkCommand cmdMotd simpleNetworkTab , Command (pure "admin") (optionalArg (simpleToken "[servername]")) "Send ADMIN query to server.\n" $ NetworkCommand cmdAdmin simpleNetworkTab , Command (pure "rules") (optionalArg (simpleToken "[servername]")) "Send RULES query to server.\n" $ NetworkCommand cmdRules simpleNetworkTab , Command (pure "info") (pure ()) "Send INFO query to server.\n" $ NetworkCommand cmdInfo noNetworkTab , Command (pure "list") (remainingArg "arguments") "Send LIST query to server.\n" $ NetworkCommand cmdList simpleNetworkTab , Command (pure "links") (remainingArg "arguments") "Send LINKS query to server with given arguments.\n" $ NetworkCommand cmdLinks simpleNetworkTab , Command (pure "version") (optionalArg (simpleToken "[servername]")) "Send VERSION query to server.\n" $ NetworkCommand cmdVersion simpleNetworkTab ] cmdInfo :: NetworkCommand () cmdInfo cs st _ = do sendMsg cs ircInfo commandSuccess st cmdVersion :: NetworkCommand (Maybe String) cmdVersion cs st mbservername = do sendMsg cs $ ircVersion $ case mbservername of Just s -> Text.pack s Nothing -> "" commandSuccess st cmdList :: NetworkCommand String cmdList cs st rest = do sendMsg cs (ircList (Text.pack <$> words rest)) commandSuccess st cmdLusers :: NetworkCommand (Maybe (String, Maybe String)) cmdLusers cs st arg = do sendMsg cs $ ircLusers $ fmap Text.pack $ case arg of Nothing -> [] Just (x, Nothing) -> [x] Just (x, Just y) -> [x,y] commandSuccess st cmdMotd :: NetworkCommand (Maybe String) cmdMotd cs st mbservername = do sendMsg cs $ ircMotd $ case mbservername of Just s -> Text.pack s Nothing -> "" commandSuccess st cmdAdmin :: NetworkCommand (Maybe String) cmdAdmin cs st mbservername = do sendMsg cs $ ircAdmin $ case mbservername of Just s -> Text.pack s Nothing -> "" commandSuccess st cmdRules :: NetworkCommand (Maybe String) cmdRules cs st mbservername = do sendMsg cs $ ircRules $ case mbservername of Just s -> Text.pack s Nothing -> "" commandSuccess st cmdStats :: NetworkCommand String cmdStats cs st rest = do sendMsg cs (ircStats (Text.pack <$> words rest)) commandSuccess st cmdLinks :: NetworkCommand String cmdLinks cs st rest = do sendMsg cs (ircLinks (Text.pack <$> words rest)) commandSuccess st cmdTime :: NetworkCommand (Maybe String) cmdTime cs st arg = do sendMsg cs (ircTime (maybe "" Text.pack arg)) commandSuccess st cmdWhois :: NetworkCommand String cmdWhois cs st rest = do sendMsg cs (ircWhois (Text.pack <$> words rest)) commandSuccess st cmdWho :: NetworkCommand String cmdWho cs st rest = do sendMsg cs (ircWho (Text.pack <$> words rest)) commandSuccess st cmdWhowas :: NetworkCommand String cmdWhowas cs st rest = do sendMsg cs (ircWhowas (Text.pack <$> words rest)) commandSuccess st cmdIson :: NetworkCommand String cmdIson cs st rest = do sendMsg cs (ircIson (Text.pack <$> words rest)) commandSuccess st cmdUserhost :: NetworkCommand String cmdUserhost cs st rest = do sendMsg cs (ircUserhost (Text.pack <$> words rest)) commandSuccess st