{-# Language OverloadedStrings, TemplateHaskell #-}
{-|
Module      : Client.Commands.Operator
Description : Operator command implementations
Copyright   : (c) Eric Mertens, 2016-2020
License     : ISC
Maintainer  : emertens@gmail.com
-}

module Client.Commands.Operator (operatorCommands) where

import Client.Commands.Arguments.Spec (optionalArg, remainingArg, simpleToken)
import Client.Commands.Docs (operDocs, cmdDoc)
import Client.Commands.TabCompletion (noNetworkTab, simpleNetworkTab)
import Client.Commands.Types
import Client.State.Network (sendMsg)
import Control.Applicative (liftA2, liftA3)
import Data.Maybe (fromMaybe, maybeToList)
import Data.Text qualified as Text
import Irc.Commands
import Irc.RawIrcMsg (rawIrcMsg)

operatorCommands :: CommandSection
operatorCommands :: CommandSection
operatorCommands = Text -> [Command] -> CommandSection
CommandSection Text
"Network operator commands"

  [ forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"oper")
      (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"user") (forall r. String -> Args r String
simpleToken String
"password"))
      $(operDocs `cmdDoc` "oper")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, String)
cmdOper Bool -> NetworkCommand String
noNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"kill")
      (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"client") (forall r. String -> Args r String
remainingArg String
"reason"))
      $(operDocs `cmdDoc` "kill")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, String)
cmdKill Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"kline")
      (forall (f :: * -> *) a b c d.
Applicative f =>
(a -> b -> c -> d) -> f a -> f b -> f c -> f d
liftA3 (,,) (forall r. String -> Args r String
simpleToken String
"minutes") (forall r. String -> Args r String
simpleToken String
"user@host") (forall r. String -> Args r String
remainingArg String
"reason"))
      $(operDocs `cmdDoc` "kline")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, String, String)
cmdKline Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"unkline")
      (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"[user@]host") (forall r a. Args r a -> Args r (Maybe a)
optionalArg (forall r. String -> Args r String
simpleToken String
"[servername]")))
      $(operDocs `cmdDoc` "unkline")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, Maybe String)
cmdUnkline Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"undline")
      (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"host") (forall r a. Args r a -> Args r (Maybe a)
optionalArg (forall r. String -> Args r String
simpleToken String
"[servername]")))
      $(operDocs `cmdDoc` "undline")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, Maybe String)
cmdUndline Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"unxline")
      (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"gecos") (forall r a. Args r a -> Args r (Maybe a)
optionalArg (forall r. String -> Args r String
simpleToken String
"[servername]")))
      $(operDocs `cmdDoc` "unxline")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, Maybe String)
cmdUnxline Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"unresv")
      (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"channel|nick") (forall r a. Args r a -> Args r (Maybe a)
optionalArg (forall r. String -> Args r String
simpleToken String
"[servername]")))
      $(operDocs `cmdDoc` "unresv")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, Maybe String)
cmdUnresv Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"testline")
      (forall r. String -> Args r String
simpleToken String
"[[nick!]user@]host")
      $(operDocs `cmdDoc` "testline")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand String
cmdTestline Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"testkline")
      (forall r. String -> Args r String
simpleToken String
"[user@]host")
      $(operDocs `cmdDoc` "testkline")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand String
cmdTestkline Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"testgecos")
      (forall r. String -> Args r String
simpleToken String
"gecos")
      $(operDocs `cmdDoc` "testgecos")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand String
cmdTestGecos Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"testmask")
      (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"[nick!]user@host") (forall r. String -> Args r String
remainingArg String
"[gecos]"))
      $(operDocs `cmdDoc` "testmask")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, String)
cmdTestmask Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"masktrace")
      (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"[nick!]user@host") (forall r. String -> Args r String
remainingArg String
"[gecos]"))
      $(operDocs `cmdDoc` "masktrace")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, String)
cmdMasktrace Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"chantrace")
      (forall r. String -> Args r String
simpleToken String
"channel")
      $(operDocs `cmdDoc` "chantrace")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand String
cmdChantrace Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"trace")
      (forall r a. Args r a -> Args r (Maybe a)
optionalArg (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"[server|nick]") (forall r a. Args r a -> Args r (Maybe a)
optionalArg (forall r. String -> Args r String
simpleToken String
"[location]"))))
      $(operDocs `cmdDoc` "trace")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (Maybe (String, Maybe String))
cmdTrace Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"etrace")
      (forall r a. Args r a -> Args r (Maybe a)
optionalArg (forall r. String -> Args r String
simpleToken String
"[-full|-v4|-v6|nick]"))
      $(operDocs `cmdDoc` "etrace")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (Maybe String)
cmdEtrace Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"map")
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
      $(operDocs `cmdDoc` "map")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand ()
cmdMap Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"sconnect")
      (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"connect_to") (forall r a. Args r a -> Args r (Maybe a)
optionalArg (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"[port]") (forall r a. Args r a -> Args r (Maybe a)
optionalArg (forall r. String -> Args r String
simpleToken String
"[remote]")))))
      $(operDocs `cmdDoc` "sconnect")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, Maybe (String, Maybe String))
cmdSconnect Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"squit")
      (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"server") (forall r. String -> Args r String
remainingArg String
"[reason]"))
      $(operDocs `cmdDoc` "squit")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, String)
cmdSquit Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"modload")
      (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"[path/]module") (forall r a. Args r a -> Args r (Maybe a)
optionalArg (forall r. String -> Args r String
simpleToken String
"[remote]")))
      $(operDocs `cmdDoc` "modload")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, Maybe String)
cmdModload Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"modunload")
      (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"module") (forall r a. Args r a -> Args r (Maybe a)
optionalArg (forall r. String -> Args r String
simpleToken String
"[remote]")))
      $(operDocs `cmdDoc` "modunload")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, Maybe String)
cmdModunload Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"modlist")
      (forall r a. Args r a -> Args r (Maybe a)
optionalArg (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"pattern") (forall r a. Args r a -> Args r (Maybe a)
optionalArg (forall r. String -> Args r String
simpleToken String
"[remote]"))))
      $(operDocs `cmdDoc` "modlist")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (Maybe (String, Maybe String))
cmdModlist Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"modrestart")
      (forall r a. Args r a -> Args r (Maybe a)
optionalArg (forall r. String -> Args r String
simpleToken String
"[server]"))
      $(operDocs `cmdDoc` "modrestart")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (Maybe String)
cmdModrestart Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"modreload")
      (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"module") (forall r a. Args r a -> Args r (Maybe a)
optionalArg (forall r. String -> Args r String
simpleToken String
"[remote]")))
      $(operDocs `cmdDoc` "modreload")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, Maybe String)
cmdModreload Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"grant")
      (forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (forall r. String -> Args r String
simpleToken String
"target") (forall r. String -> Args r String
simpleToken String
"privset"))
      $(operDocs `cmdDoc` "grant")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, String)
cmdGrant Bool -> NetworkCommand String
simpleNetworkTab

  , forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"privs")
      (forall r a. Args r a -> Args r (Maybe a)
optionalArg (forall r. String -> Args r String
simpleToken String
"[target]"))
      $(operDocs `cmdDoc` "privs")
    forall a b. (a -> b) -> a -> b
$ forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (Maybe String)
cmdPrivs Bool -> NetworkCommand String
simpleNetworkTab

  ]

cmdGrant :: NetworkCommand (String, String)
cmdGrant :: NetworkCommand (String, String)
cmdGrant NetworkState
cs ClientState
st (String
target, String
privset) =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> [Text] -> RawIrcMsg
rawIrcMsg Text
"GRANT" (String -> Text
Text.pack forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [String
target, String
privset]))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdPrivs :: NetworkCommand (Maybe String)
cmdPrivs :: NetworkCommand (Maybe String)
cmdPrivs NetworkState
cs ClientState
st Maybe String
mbTarget =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> [Text] -> RawIrcMsg
rawIrcMsg Text
"PRIVS" (String -> Text
Text.pack forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. Maybe a -> [a]
maybeToList Maybe String
mbTarget))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdModlist :: NetworkCommand (Maybe (String, Maybe String))
cmdModlist :: NetworkCommand (Maybe (String, Maybe String))
cmdModlist NetworkState
cs ClientState
st Maybe (String, Maybe String)
args =
  do let argList :: [String]
argList = case Maybe (String, Maybe String)
args of
                     Maybe (String, Maybe String)
Nothing -> []
                     Just (String
x, Maybe String
xs) -> String
x forall a. a -> [a] -> [a]
: forall a. Maybe a -> [a]
maybeToList Maybe String
xs
     NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> [Text] -> RawIrcMsg
rawIrcMsg Text
"MODLIST" (String -> Text
Text.pack forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [String]
argList))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdModrestart :: NetworkCommand (Maybe String)
cmdModrestart :: NetworkCommand (Maybe String)
cmdModrestart NetworkState
cs ClientState
st Maybe String
args =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> [Text] -> RawIrcMsg
rawIrcMsg Text
"MODRESTART" (String -> Text
Text.pack forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall a. Maybe a -> [a]
maybeToList Maybe String
args))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdModload :: NetworkCommand (String, Maybe String)
cmdModload :: NetworkCommand (String, Maybe String)
cmdModload NetworkState
cs ClientState
st (String
mod_, Maybe String
remote) =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> [Text] -> RawIrcMsg
rawIrcMsg Text
"MODLOAD" (String -> Text
Text.pack forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String
mod_ forall a. a -> [a] -> [a]
: forall a. Maybe a -> [a]
maybeToList Maybe String
remote)))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdModunload :: NetworkCommand (String, Maybe String)
cmdModunload :: NetworkCommand (String, Maybe String)
cmdModunload NetworkState
cs ClientState
st (String
mod_, Maybe String
remote) =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> [Text] -> RawIrcMsg
rawIrcMsg Text
"MODUNLOAD" (String -> Text
Text.pack forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String
mod_ forall a. a -> [a] -> [a]
: forall a. Maybe a -> [a]
maybeToList Maybe String
remote)))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdModreload :: NetworkCommand (String, Maybe String)
cmdModreload :: NetworkCommand (String, Maybe String)
cmdModreload NetworkState
cs ClientState
st (String
mod_, Maybe String
remote) =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> [Text] -> RawIrcMsg
rawIrcMsg Text
"MODRELOAD" (String -> Text
Text.pack forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String
mod_ forall a. a -> [a] -> [a]
: forall a. Maybe a -> [a]
maybeToList Maybe String
remote)))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdSquit :: NetworkCommand (String, String)
cmdSquit :: NetworkCommand (String, String)
cmdSquit NetworkState
cs ClientState
st (String
server, String
reason) =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> [Text] -> RawIrcMsg
rawIrcMsg Text
"SQUIT" (String -> Text
Text.pack forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [String
server, String
reason]))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdSconnect :: NetworkCommand (String, Maybe (String, Maybe String))
cmdSconnect :: NetworkCommand (String, Maybe (String, Maybe String))
cmdSconnect NetworkState
cs ClientState
st (String
server, Maybe (String, Maybe String)
rest) =
  do let args :: [String]
args = case Maybe (String, Maybe String)
rest of
                  Maybe (String, Maybe String)
Nothing -> [String
server]
                  Just (String
x, Maybe String
xs) -> String
server forall a. a -> [a] -> [a]
: String
x forall a. a -> [a] -> [a]
: forall a. Maybe a -> [a]
maybeToList Maybe String
xs
     NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> [Text] -> RawIrcMsg
rawIrcMsg Text
"CONNECT" (String -> Text
Text.pack forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [String]
args))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdKill :: NetworkCommand (String, String)
cmdKill :: NetworkCommand (String, String)
cmdKill NetworkState
cs ClientState
st (String
client,String
rest) =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> Text -> RawIrcMsg
ircKill (String -> Text
Text.pack String
client) (String -> Text
Text.pack String
rest))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdKline :: NetworkCommand (String, String, String)
cmdKline :: NetworkCommand (String, String, String)
cmdKline NetworkState
cs ClientState
st (String
minutes, String
mask, String
reason) =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> Text -> Text -> RawIrcMsg
ircKline (String -> Text
Text.pack String
minutes) (String -> Text
Text.pack String
mask) (String -> Text
Text.pack String
reason))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdUnkline :: NetworkCommand (String, Maybe String)
cmdUnkline :: NetworkCommand (String, Maybe String)
cmdUnkline NetworkState
cs ClientState
st (String
mask, Maybe String
server) =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> Maybe Text -> RawIrcMsg
ircUnkline (String -> Text
Text.pack String
mask) (String -> Text
Text.pack forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe String
server))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdUndline :: NetworkCommand (String, Maybe String)
cmdUndline :: NetworkCommand (String, Maybe String)
cmdUndline NetworkState
cs ClientState
st (String
mask, Maybe String
server) =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> Maybe Text -> RawIrcMsg
ircUndline (String -> Text
Text.pack String
mask) (String -> Text
Text.pack forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe String
server))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdUnxline :: NetworkCommand (String, Maybe String)
cmdUnxline :: NetworkCommand (String, Maybe String)
cmdUnxline NetworkState
cs ClientState
st (String
mask, Maybe String
server) =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> Maybe Text -> RawIrcMsg
ircUnxline (String -> Text
Text.pack String
mask) (String -> Text
Text.pack forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe String
server))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdUnresv :: NetworkCommand (String, Maybe String)
cmdUnresv :: NetworkCommand (String, Maybe String)
cmdUnresv NetworkState
cs ClientState
st (String
mask, Maybe String
server) =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> Maybe Text -> RawIrcMsg
ircUnresv (String -> Text
Text.pack String
mask) (String -> Text
Text.pack forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe String
server))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdTestline :: NetworkCommand String
cmdTestline :: NetworkCommand String
cmdTestline NetworkState
cs ClientState
st String
mask =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> RawIrcMsg
ircTestline (String -> Text
Text.pack String
mask))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdTestkline :: NetworkCommand String
cmdTestkline :: NetworkCommand String
cmdTestkline NetworkState
cs ClientState
st String
mask =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> [Text] -> RawIrcMsg
rawIrcMsg Text
"TESTKLINE" [String -> Text
Text.pack String
mask])
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdTestGecos :: NetworkCommand String
cmdTestGecos :: NetworkCommand String
cmdTestGecos NetworkState
cs ClientState
st String
mask =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> [Text] -> RawIrcMsg
rawIrcMsg Text
"TESTGECOS" [String -> Text
Text.pack String
mask])
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdTestmask :: NetworkCommand (String, String)
cmdTestmask :: NetworkCommand (String, String)
cmdTestmask NetworkState
cs ClientState
st (String
mask, String
gecos) =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> Text -> RawIrcMsg
ircTestmask (String -> Text
Text.pack String
mask) (String -> Text
Text.pack String
gecos))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdMasktrace :: NetworkCommand (String, String)
cmdMasktrace :: NetworkCommand (String, String)
cmdMasktrace NetworkState
cs ClientState
st (String
mask, String
gecos) =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> Text -> RawIrcMsg
ircMasktrace (String -> Text
Text.pack String
mask) (String -> Text
Text.pack String
gecos))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdChantrace :: NetworkCommand String
cmdChantrace :: NetworkCommand String
cmdChantrace NetworkState
cs ClientState
st String
chan =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> RawIrcMsg
ircChantrace (String -> Text
Text.pack String
chan))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdEtrace :: NetworkCommand (Maybe String)
cmdEtrace :: NetworkCommand (Maybe String)
cmdEtrace NetworkState
cs ClientState
st Maybe String
arg =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> RawIrcMsg
ircEtrace (String -> Text
Text.pack (forall a. a -> Maybe a -> a
fromMaybe String
"" Maybe String
arg)))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdTrace :: NetworkCommand (Maybe (String, Maybe String))
cmdTrace :: NetworkCommand (Maybe (String, Maybe String))
cmdTrace NetworkState
cs ClientState
st Maybe (String, Maybe String)
args =
  do let argsList :: [String]
argsList =
           case Maybe (String, Maybe String)
args of
            Maybe (String, Maybe String)
Nothing           -> []
            Just (String
x, Maybe String
Nothing) -> [String
x]
            Just (String
x, Just String
y)  -> [String
x, String
y]
     NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs ([Text] -> RawIrcMsg
ircTrace (forall a b. (a -> b) -> [a] -> [b]
map String -> Text
Text.pack [String]
argsList))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdMap :: NetworkCommand ()
cmdMap :: NetworkCommand ()
cmdMap NetworkState
cs ClientState
st ()
_ =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs RawIrcMsg
ircMap
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

cmdOper :: NetworkCommand (String, String)
cmdOper :: NetworkCommand (String, String)
cmdOper NetworkState
cs ClientState
st (String
user, String
pass) =
  do NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> Text -> RawIrcMsg
ircOper (String -> Text
Text.pack String
user) (String -> Text
Text.pack String
pass))
     forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st