{-# Language OverloadedStrings #-}
{-|
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           Control.Applicative
import           Client.Commands.Arguments.Spec
import           Client.Commands.TabCompletion
import           Client.Commands.Types
import           Client.State.Network (sendMsg)
import           Data.Maybe (fromMaybe, maybeToList)
import qualified Data.Text as Text
import           Irc.Commands
import           Irc.RawIrcMsg

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

  [ NonEmpty Text
-> Args ClientState (String, String)
-> Text
-> CommandImpl (String, String)
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"oper")
      ((String -> String -> (String, String))
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) String
-> Args ClientState (String, String)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"user") (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"password"))
      Text
"Authenticate as a server operator.\n"
    (CommandImpl (String, String) -> Command)
-> CommandImpl (String, String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (String, String)
-> (Bool -> NetworkCommand String) -> CommandImpl (String, String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, String)
cmdOper Bool -> NetworkCommand String
noNetworkTab

  , NonEmpty Text
-> Args ClientState (String, String)
-> Text
-> CommandImpl (String, String)
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"kill")
      ((String -> String -> (String, String))
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) String
-> Args ClientState (String, String)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"client") (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
remainingArg String
"reason"))
      Text
"Kill a client connection to the server.\n"
    (CommandImpl (String, String) -> Command)
-> CommandImpl (String, String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (String, String)
-> (Bool -> NetworkCommand String) -> CommandImpl (String, String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, String)
cmdKill Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Args ClientState (String, String, String)
-> Text
-> CommandImpl (String, String, String)
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"kline")
      ((String -> String -> String -> (String, String, String))
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) String
-> Args ClientState (String, String, String)
forall (f :: * -> *) a b c d.
Applicative f =>
(a -> b -> c -> d) -> f a -> f b -> f c -> f d
liftA3 (,,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"minutes") (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"user@host") (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
remainingArg String
"reason"))
      Text
"Ban a client from the server.\n"
    (CommandImpl (String, String, String) -> Command)
-> CommandImpl (String, String, String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (String, String, String)
-> (Bool -> NetworkCommand String)
-> CommandImpl (String, String, String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, String, String)
cmdKline Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Args ClientState (String, Maybe String)
-> Text
-> CommandImpl (String, Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"unkline")
      ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) (Maybe String)
-> Args ClientState (String, Maybe String)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[user@]host") (Ap (Arg ClientState) String -> Ap (Arg ClientState) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[servername]")))
      Text
"Unban a client from the server.\n"
    (CommandImpl (String, Maybe String) -> Command)
-> CommandImpl (String, Maybe String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (String, Maybe String)
-> (Bool -> NetworkCommand String)
-> CommandImpl (String, Maybe String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, Maybe String)
cmdUnkline Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Args ClientState (String, Maybe String)
-> Text
-> CommandImpl (String, Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"undline")
      ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) (Maybe String)
-> Args ClientState (String, Maybe String)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"host") (Ap (Arg ClientState) String -> Ap (Arg ClientState) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[servername]")))
      Text
"Unban a client from the server.\n"
    (CommandImpl (String, Maybe String) -> Command)
-> CommandImpl (String, Maybe String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (String, Maybe String)
-> (Bool -> NetworkCommand String)
-> CommandImpl (String, Maybe String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, Maybe String)
cmdUndline Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Args ClientState (String, Maybe String)
-> Text
-> CommandImpl (String, Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"unxline")
      ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) (Maybe String)
-> Args ClientState (String, Maybe String)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"gecos") (Ap (Arg ClientState) String -> Ap (Arg ClientState) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[servername]")))
      Text
"Unban a gecos from the server.\n"
    (CommandImpl (String, Maybe String) -> Command)
-> CommandImpl (String, Maybe String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (String, Maybe String)
-> (Bool -> NetworkCommand String)
-> CommandImpl (String, Maybe String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, Maybe String)
cmdUnxline Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Args ClientState (String, Maybe String)
-> Text
-> CommandImpl (String, Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"unresv")
      ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) (Maybe String)
-> Args ClientState (String, Maybe String)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"channel|nick") (Ap (Arg ClientState) String -> Ap (Arg ClientState) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[servername]")))
      Text
"Unban a channel or nickname from the server.\n"
    (CommandImpl (String, Maybe String) -> Command)
-> CommandImpl (String, Maybe String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (String, Maybe String)
-> (Bool -> NetworkCommand String)
-> CommandImpl (String, Maybe String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, Maybe String)
cmdUnresv Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Ap (Arg ClientState) String
-> Text
-> CommandImpl String
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"testline")
      (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[[nick!]user@]host")
      Text
"Check matching I/K/D lines for a [[nick!]user@]host\n"
    (CommandImpl String -> Command) -> CommandImpl String -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand String
-> (Bool -> NetworkCommand String) -> CommandImpl String
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand String
cmdTestline Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Ap (Arg ClientState) String
-> Text
-> CommandImpl String
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"testkline")
      (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[user@]host")
      Text
"Check matching K/D lines for a [user@]host\n"
    (CommandImpl String -> Command) -> CommandImpl String -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand String
-> (Bool -> NetworkCommand String) -> CommandImpl String
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand String
cmdTestkline Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Ap (Arg ClientState) String
-> Text
-> CommandImpl String
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"testgecos")
      (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"gecos")
      Text
"Check matching X lines for a gecos\n"
    (CommandImpl String -> Command) -> CommandImpl String -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand String
-> (Bool -> NetworkCommand String) -> CommandImpl String
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand String
cmdTestGecos Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Args ClientState (String, String)
-> Text
-> CommandImpl (String, String)
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"testmask")
      ((String -> String -> (String, String))
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) String
-> Args ClientState (String, String)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[nick!]user@host") (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
remainingArg String
"[gecos]"))
      Text
"Test how many local and global clients match a mask.\n"
    (CommandImpl (String, String) -> Command)
-> CommandImpl (String, String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (String, String)
-> (Bool -> NetworkCommand String) -> CommandImpl (String, String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, String)
cmdTestmask Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Args ClientState (String, String)
-> Text
-> CommandImpl (String, String)
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"masktrace")
      ((String -> String -> (String, String))
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) String
-> Args ClientState (String, String)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[nick!]user@host") (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
remainingArg String
"[gecos]"))
      Text
"Outputs a list of local users matching the given masks.\n"
    (CommandImpl (String, String) -> Command)
-> CommandImpl (String, String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (String, String)
-> (Bool -> NetworkCommand String) -> CommandImpl (String, String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, String)
cmdMasktrace Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Ap (Arg ClientState) String
-> Text
-> CommandImpl String
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"chantrace")
      (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"channel")
      Text
"Outputs a list of channel members in etrace format.\n"
    (CommandImpl String -> Command) -> CommandImpl String -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand String
-> (Bool -> NetworkCommand String) -> CommandImpl String
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand String
cmdChantrace Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Args ClientState (Maybe (String, Maybe String))
-> Text
-> CommandImpl (Maybe (String, Maybe String))
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"trace")
      (Args ClientState (String, Maybe String)
-> Args ClientState (Maybe (String, Maybe String))
forall r a. Args r a -> Args r (Maybe a)
optionalArg ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) (Maybe String)
-> Args ClientState (String, Maybe String)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[server|nick]") (Ap (Arg ClientState) String -> Ap (Arg ClientState) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[location]"))))
      Text
"Outputs a list users on a server.\n"
    (CommandImpl (Maybe (String, Maybe String)) -> Command)
-> CommandImpl (Maybe (String, Maybe String)) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (Maybe (String, Maybe String))
-> (Bool -> NetworkCommand String)
-> CommandImpl (Maybe (String, Maybe String))
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (Maybe (String, Maybe String))
cmdTrace Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Ap (Arg ClientState) (Maybe String)
-> Text
-> CommandImpl (Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"etrace")
      (Ap (Arg ClientState) String -> Ap (Arg ClientState) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[-full|-v4|-v6|nick]"))
      Text
"Outputs a list users on a server.\n"
    (CommandImpl (Maybe String) -> Command)
-> CommandImpl (Maybe String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (Maybe String)
-> (Bool -> NetworkCommand String) -> CommandImpl (Maybe String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (Maybe String)
cmdEtrace Bool -> NetworkCommand String
simpleNetworkTab

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

  , NonEmpty Text
-> Args ClientState (String, Maybe (String, Maybe String))
-> Text
-> CommandImpl (String, Maybe (String, Maybe String))
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"sconnect")
      ((String
 -> Maybe (String, Maybe String)
 -> (String, Maybe (String, Maybe String)))
-> Ap (Arg ClientState) String
-> Args ClientState (Maybe (String, Maybe String))
-> Args ClientState (String, Maybe (String, Maybe String))
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"connect_to") (Args ClientState (String, Maybe String)
-> Args ClientState (Maybe (String, Maybe String))
forall r a. Args r a -> Args r (Maybe a)
optionalArg ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) (Maybe String)
-> Args ClientState (String, Maybe String)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[port]") (Ap (Arg ClientState) String -> Ap (Arg ClientState) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[remote]")))))
      Text
"Connect two servers together.\n"
    (CommandImpl (String, Maybe (String, Maybe String)) -> Command)
-> CommandImpl (String, Maybe (String, Maybe String)) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (String, Maybe (String, Maybe String))
-> (Bool -> NetworkCommand String)
-> CommandImpl (String, Maybe (String, Maybe String))
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, Maybe (String, Maybe String))
cmdSconnect Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Args ClientState (String, String)
-> Text
-> CommandImpl (String, String)
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"squit")
      ((String -> String -> (String, String))
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) String
-> Args ClientState (String, String)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"server") (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
remainingArg String
"[reason]"))
      Text
"Split a server away from your side of the network.\n"
    (CommandImpl (String, String) -> Command)
-> CommandImpl (String, String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (String, String)
-> (Bool -> NetworkCommand String) -> CommandImpl (String, String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, String)
cmdSquit Bool -> NetworkCommand String
simpleNetworkTab

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

  , NonEmpty Text
-> Args ClientState (String, Maybe String)
-> Text
-> CommandImpl (String, Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"modunload")
      ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) (Maybe String)
-> Args ClientState (String, Maybe String)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"module") (Ap (Arg ClientState) String -> Ap (Arg ClientState) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[remote]")))
      Text
"Unload an IRCd module.\n"
    (CommandImpl (String, Maybe String) -> Command)
-> CommandImpl (String, Maybe String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (String, Maybe String)
-> (Bool -> NetworkCommand String)
-> CommandImpl (String, Maybe String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, Maybe String)
cmdModunload Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Args ClientState (Maybe (String, Maybe String))
-> Text
-> CommandImpl (Maybe (String, Maybe String))
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"modlist")
      (Args ClientState (String, Maybe String)
-> Args ClientState (Maybe (String, Maybe String))
forall r a. Args r a -> Args r (Maybe a)
optionalArg ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) (Maybe String)
-> Args ClientState (String, Maybe String)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"pattern") (Ap (Arg ClientState) String -> Ap (Arg ClientState) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[remote]"))))
      Text
"List loaded IRCd modules.\n"
    (CommandImpl (Maybe (String, Maybe String)) -> Command)
-> CommandImpl (Maybe (String, Maybe String)) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (Maybe (String, Maybe String))
-> (Bool -> NetworkCommand String)
-> CommandImpl (Maybe (String, Maybe String))
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (Maybe (String, Maybe String))
cmdModlist Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Ap (Arg ClientState) (Maybe String)
-> Text
-> CommandImpl (Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"modrestart")
      (Ap (Arg ClientState) String -> Ap (Arg ClientState) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[server]"))
      Text
"Reload all IRCd modules.\n"
    (CommandImpl (Maybe String) -> Command)
-> CommandImpl (Maybe String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (Maybe String)
-> (Bool -> NetworkCommand String) -> CommandImpl (Maybe String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (Maybe String)
cmdModrestart Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Args ClientState (String, Maybe String)
-> Text
-> CommandImpl (String, Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"modreload")
      ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) (Maybe String)
-> Args ClientState (String, Maybe String)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"module") (Ap (Arg ClientState) String -> Ap (Arg ClientState) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[remote]")))
      Text
"Reload an IRCd module.\n"
    (CommandImpl (String, Maybe String) -> Command)
-> CommandImpl (String, Maybe String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (String, Maybe String)
-> (Bool -> NetworkCommand String)
-> CommandImpl (String, Maybe String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, Maybe String)
cmdModreload Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Args ClientState (String, String)
-> Text
-> CommandImpl (String, String)
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"grant")
      ((String -> String -> (String, String))
-> Ap (Arg ClientState) String
-> Ap (Arg ClientState) String
-> Args ClientState (String, String)
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"target") (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"privset"))
      Text
"Manually assign a privset to a user.\n"
    (CommandImpl (String, String) -> Command)
-> CommandImpl (String, String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (String, String)
-> (Bool -> NetworkCommand String) -> CommandImpl (String, String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand NetworkCommand (String, String)
cmdGrant Bool -> NetworkCommand String
simpleNetworkTab

  , NonEmpty Text
-> Ap (Arg ClientState) (Maybe String)
-> Text
-> CommandImpl (Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ClientState a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"privs")
      (Ap (Arg ClientState) String -> Ap (Arg ClientState) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ClientState) String
forall r. String -> Args r String
simpleToken String
"[target]"))
      Text
"Check operator privileges of the target.\n"
    (CommandImpl (Maybe String) -> Command)
-> CommandImpl (Maybe String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand (Maybe String)
-> (Bool -> NetworkCommand String) -> CommandImpl (Maybe String)
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 (String -> Text) -> [String] -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [String
target, String
privset]))
     ClientState -> IO CommandResult
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 (String -> Text) -> [String] -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe String -> [String]
forall a. Maybe a -> [a]
maybeToList Maybe String
mbTarget))
     ClientState -> IO CommandResult
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 String -> [String] -> [String]
forall a. a -> [a] -> [a]
: Maybe String -> [String]
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 (String -> Text) -> [String] -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [String]
argList))
     ClientState -> IO CommandResult
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 (String -> Text) -> [String] -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe String -> [String]
forall a. Maybe a -> [a]
maybeToList Maybe String
args))
     ClientState -> IO CommandResult
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 (String -> Text) -> [String] -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String
mod_ String -> [String] -> [String]
forall a. a -> [a] -> [a]
: Maybe String -> [String]
forall a. Maybe a -> [a]
maybeToList Maybe String
remote)))
     ClientState -> IO CommandResult
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 (String -> Text) -> [String] -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String
mod_ String -> [String] -> [String]
forall a. a -> [a] -> [a]
: Maybe String -> [String]
forall a. Maybe a -> [a]
maybeToList Maybe String
remote)))
     ClientState -> IO CommandResult
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 (String -> Text) -> [String] -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String
mod_ String -> [String] -> [String]
forall a. a -> [a] -> [a]
: Maybe String -> [String]
forall a. Maybe a -> [a]
maybeToList Maybe String
remote)))
     ClientState -> IO CommandResult
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 (String -> Text) -> [String] -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [String
server, String
reason]))
     ClientState -> IO CommandResult
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 String -> [String] -> [String]
forall a. a -> [a] -> [a]
: String
x String -> [String] -> [String]
forall a. a -> [a] -> [a]
: Maybe String -> [String]
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 (String -> Text) -> [String] -> [Text]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [String]
args))
     ClientState -> IO CommandResult
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))
     ClientState -> IO CommandResult
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))
     ClientState -> IO CommandResult
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 (String -> Text) -> Maybe String -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe String
server))
     ClientState -> IO CommandResult
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 (String -> Text) -> Maybe String -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe String
server))
     ClientState -> IO CommandResult
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 (String -> Text) -> Maybe String -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe String
server))
     ClientState -> IO CommandResult
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 (String -> Text) -> Maybe String -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe String
server))
     ClientState -> IO CommandResult
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))
     ClientState -> IO CommandResult
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])
     ClientState -> IO CommandResult
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])
     ClientState -> IO CommandResult
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))
     ClientState -> IO CommandResult
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))
     ClientState -> IO CommandResult
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))
     ClientState -> IO CommandResult
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 (String -> Maybe String -> String
forall a. a -> Maybe a -> a
fromMaybe String
"" Maybe String
arg)))
     ClientState -> IO CommandResult
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 ((String -> Text) -> [String] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map String -> Text
Text.pack [String]
argsList))
     ClientState -> IO CommandResult
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
     ClientState -> IO CommandResult
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))
     ClientState -> IO CommandResult
forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st