{-# Language BlockArguments, 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 (Args, optionalArg, remainingArg, simpleToken, extensionArg)
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 (Text)
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"

  [ NonEmpty Text
-> Args ArgsContext (String, String)
-> Text
-> CommandImpl (String, String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"oper")
      ((String -> String -> (String, String))
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) String
-> Args ArgsContext (String, String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"user") (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"password"))
      $(operDocs `cmdDoc` "oper")
    (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 ArgsContext (String, String)
-> Text
-> CommandImpl (String, String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"kill")
      ((String -> String -> (String, String))
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) String
-> Args ArgsContext (String, String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"client") (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
remainingArg String
"reason"))
      $(operDocs `cmdDoc` "kill")
    (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 ArgsContext ((Maybe String, String), String, String)
-> Text
-> CommandImpl ((Maybe String, String), String, String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"kline")
      (((Maybe String, String)
 -> String -> String -> ((Maybe String, String), String, String))
-> Ap (Arg ArgsContext) (Maybe String, String)
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) String
-> Args ArgsContext ((Maybe String, 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
-> (ArgsContext
    -> String -> Maybe (Ap (Arg ArgsContext) (Maybe String, String)))
-> Ap (Arg ArgsContext) (Maybe String, String)
forall r a. String -> (r -> String -> Maybe (Args r a)) -> Args r a
extensionArg String
"minutes|on" ArgsContext
-> String -> Maybe (Ap (Arg ArgsContext) (Maybe String, String))
banLineArgs) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"user@host") (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
remainingArg String
"reason"))
      $(operDocs `cmdDoc` "kline")
    (CommandImpl ((Maybe String, String), String, String) -> Command)
-> CommandImpl ((Maybe String, String), String, String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand ((Maybe String, String), String, String)
-> (Bool -> NetworkCommand String)
-> CommandImpl ((Maybe String, String), String, String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand (Text -> NetworkCommand ((Maybe String, String), String, String)
cmdBanLine Text
"KLINE") Bool -> NetworkCommand String
simpleNetworkTab -- Don't use ircKline because it doesn't do remotes.

  , NonEmpty Text
-> Args ArgsContext ((Maybe String, String), String, String)
-> Text
-> CommandImpl ((Maybe String, String), String, String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"dline")
      (((Maybe String, String)
 -> String -> String -> ((Maybe String, String), String, String))
-> Ap (Arg ArgsContext) (Maybe String, String)
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) String
-> Args ArgsContext ((Maybe String, 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
-> (ArgsContext
    -> String -> Maybe (Ap (Arg ArgsContext) (Maybe String, String)))
-> Ap (Arg ArgsContext) (Maybe String, String)
forall r a. String -> (r -> String -> Maybe (Args r a)) -> Args r a
extensionArg String
"minutes|on" ArgsContext
-> String -> Maybe (Ap (Arg ArgsContext) (Maybe String, String))
banLineArgs) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"ip") (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
remainingArg String
"reason"))
      $(operDocs `cmdDoc` "dline")
    (CommandImpl ((Maybe String, String), String, String) -> Command)
-> CommandImpl ((Maybe String, String), String, String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand ((Maybe String, String), String, String)
-> (Bool -> NetworkCommand String)
-> CommandImpl ((Maybe String, String), String, String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand (Text -> NetworkCommand ((Maybe String, String), String, String)
cmdBanLine Text
"DLINE") Bool -> NetworkCommand String
noNetworkTab

  , NonEmpty Text
-> Args ArgsContext ((Maybe String, String), String, String)
-> Text
-> CommandImpl ((Maybe String, String), String, String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"xline")
      (((Maybe String, String)
 -> String -> String -> ((Maybe String, String), String, String))
-> Ap (Arg ArgsContext) (Maybe String, String)
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) String
-> Args ArgsContext ((Maybe String, 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
-> (ArgsContext
    -> String -> Maybe (Ap (Arg ArgsContext) (Maybe String, String)))
-> Ap (Arg ArgsContext) (Maybe String, String)
forall r a. String -> (r -> String -> Maybe (Args r a)) -> Args r a
extensionArg String
"minutes|on" ArgsContext
-> String -> Maybe (Ap (Arg ArgsContext) (Maybe String, String))
banLineArgs) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"gecos") (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
remainingArg String
"reason"))
      $(operDocs `cmdDoc` "xline")
    (CommandImpl ((Maybe String, String), String, String) -> Command)
-> CommandImpl ((Maybe String, String), String, String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand ((Maybe String, String), String, String)
-> (Bool -> NetworkCommand String)
-> CommandImpl ((Maybe String, String), String, String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand (Text -> NetworkCommand ((Maybe String, String), String, String)
cmdBanLine Text
"XLINE") Bool -> NetworkCommand String
noNetworkTab

  , NonEmpty Text
-> Args ArgsContext ((Maybe String, String), String, String)
-> Text
-> CommandImpl ((Maybe String, String), String, String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"resv")
      (((Maybe String, String)
 -> String -> String -> ((Maybe String, String), String, String))
-> Ap (Arg ArgsContext) (Maybe String, String)
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) String
-> Args ArgsContext ((Maybe String, 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
-> (ArgsContext
    -> String -> Maybe (Ap (Arg ArgsContext) (Maybe String, String)))
-> Ap (Arg ArgsContext) (Maybe String, String)
forall r a. String -> (r -> String -> Maybe (Args r a)) -> Args r a
extensionArg String
"minutes|on" ArgsContext
-> String -> Maybe (Ap (Arg ArgsContext) (Maybe String, String))
banLineArgs) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"nick|channel") (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
remainingArg String
"reason"))
      $(operDocs `cmdDoc` "resv")
    (CommandImpl ((Maybe String, String), String, String) -> Command)
-> CommandImpl ((Maybe String, String), String, String) -> Command
forall a b. (a -> b) -> a -> b
$ NetworkCommand ((Maybe String, String), String, String)
-> (Bool -> NetworkCommand String)
-> CommandImpl ((Maybe String, String), String, String)
forall a.
NetworkCommand a
-> (Bool -> NetworkCommand String) -> CommandImpl a
NetworkCommand (Text -> NetworkCommand ((Maybe String, String), String, String)
cmdBanLine Text
"RESV") Bool -> NetworkCommand String
noNetworkTab

  , NonEmpty Text
-> Args ArgsContext (String, Maybe String)
-> Text
-> CommandImpl (String, Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"unkline")
      ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) (Maybe String)
-> Args ArgsContext (String, Maybe String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[user@]host") (Ap (Arg ArgsContext) String -> Ap (Arg ArgsContext) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[servername]")))
      $(operDocs `cmdDoc` "unkline")
    (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 ArgsContext (String, Maybe String)
-> Text
-> CommandImpl (String, Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"undline")
      ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) (Maybe String)
-> Args ArgsContext (String, Maybe String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"host") (Ap (Arg ArgsContext) String -> Ap (Arg ArgsContext) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[servername]")))
      $(operDocs `cmdDoc` "undline")
    (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 ArgsContext (String, Maybe String)
-> Text
-> CommandImpl (String, Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"unxline")
      ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) (Maybe String)
-> Args ArgsContext (String, Maybe String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"gecos") (Ap (Arg ArgsContext) String -> Ap (Arg ArgsContext) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[servername]")))
      $(operDocs `cmdDoc` "unxline")
    (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 ArgsContext (String, Maybe String)
-> Text
-> CommandImpl (String, Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"unresv")
      ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) (Maybe String)
-> Args ArgsContext (String, Maybe String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"channel|nick") (Ap (Arg ArgsContext) String -> Ap (Arg ArgsContext) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[servername]")))
      $(operDocs `cmdDoc` "unresv")
    (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 ArgsContext) String
-> Text
-> CommandImpl String
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"testline")
      (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[[nick!]user@]host")
      $(operDocs `cmdDoc` "testline")
    (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 ArgsContext) String
-> Text
-> CommandImpl String
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"testkline")
      (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[user@]host")
      $(operDocs `cmdDoc` "testkline")
    (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 ArgsContext) String
-> Text
-> CommandImpl String
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"testgecos")
      (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"gecos")
      $(operDocs `cmdDoc` "testgecos")
    (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 ArgsContext (String, String)
-> Text
-> CommandImpl (String, String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"testmask")
      ((String -> String -> (String, String))
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) String
-> Args ArgsContext (String, String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[nick!]user@host") (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
remainingArg String
"[gecos]"))
      $(operDocs `cmdDoc` "testmask")
    (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 ArgsContext (String, String)
-> Text
-> CommandImpl (String, String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"masktrace")
      ((String -> String -> (String, String))
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) String
-> Args ArgsContext (String, String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[nick!]user@host") (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
remainingArg String
"[gecos]"))
      $(operDocs `cmdDoc` "masktrace")
    (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 ArgsContext) String
-> Text
-> CommandImpl String
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"chantrace")
      (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"channel")
      $(operDocs `cmdDoc` "chantrace")
    (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 ArgsContext (Maybe (String, Maybe String))
-> Text
-> CommandImpl (Maybe (String, Maybe String))
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"trace")
      (Args ArgsContext (String, Maybe String)
-> Args ArgsContext (Maybe (String, Maybe String))
forall r a. Args r a -> Args r (Maybe a)
optionalArg ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) (Maybe String)
-> Args ArgsContext (String, Maybe String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[server|nick]") (Ap (Arg ArgsContext) String -> Ap (Arg ArgsContext) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[location]"))))
      $(operDocs `cmdDoc` "trace")
    (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 ArgsContext) (Maybe String)
-> Text
-> CommandImpl (Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"etrace")
      (Ap (Arg ArgsContext) String -> Ap (Arg ArgsContext) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[-full|-v4|-v6|nick]"))
      $(operDocs `cmdDoc` "etrace")
    (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 ArgsContext () -> Text -> CommandImpl () -> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"map")
      (() -> Args ArgsContext ()
forall a. a -> Ap (Arg ArgsContext) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
      $(operDocs `cmdDoc` "map")
    (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 ArgsContext (String, Maybe (String, Maybe String))
-> Text
-> CommandImpl (String, Maybe (String, Maybe String))
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"sconnect")
      ((String
 -> Maybe (String, Maybe String)
 -> (String, Maybe (String, Maybe String)))
-> Ap (Arg ArgsContext) String
-> Args ArgsContext (Maybe (String, Maybe String))
-> Args ArgsContext (String, Maybe (String, Maybe String))
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"connect_to") (Args ArgsContext (String, Maybe String)
-> Args ArgsContext (Maybe (String, Maybe String))
forall r a. Args r a -> Args r (Maybe a)
optionalArg ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) (Maybe String)
-> Args ArgsContext (String, Maybe String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[port]") (Ap (Arg ArgsContext) String -> Ap (Arg ArgsContext) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[remote]")))))
      $(operDocs `cmdDoc` "sconnect")
    (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 ArgsContext (String, String)
-> Text
-> CommandImpl (String, String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"squit")
      ((String -> String -> (String, String))
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) String
-> Args ArgsContext (String, String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"server") (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
remainingArg String
"[reason]"))
      $(operDocs `cmdDoc` "squit")
    (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 ArgsContext (String, Maybe String)
-> Text
-> CommandImpl (String, Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"modload")
      ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) (Maybe String)
-> Args ArgsContext (String, Maybe String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[path/]module") (Ap (Arg ArgsContext) String -> Ap (Arg ArgsContext) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[remote]")))
      $(operDocs `cmdDoc` "modload")
    (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 ArgsContext (String, Maybe String)
-> Text
-> CommandImpl (String, Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"modunload")
      ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) (Maybe String)
-> Args ArgsContext (String, Maybe String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"module") (Ap (Arg ArgsContext) String -> Ap (Arg ArgsContext) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[remote]")))
      $(operDocs `cmdDoc` "modunload")
    (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 ArgsContext (Maybe (String, Maybe String))
-> Text
-> CommandImpl (Maybe (String, Maybe String))
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"modlist")
      (Args ArgsContext (String, Maybe String)
-> Args ArgsContext (Maybe (String, Maybe String))
forall r a. Args r a -> Args r (Maybe a)
optionalArg ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) (Maybe String)
-> Args ArgsContext (String, Maybe String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"pattern") (Ap (Arg ArgsContext) String -> Ap (Arg ArgsContext) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[remote]"))))
      $(operDocs `cmdDoc` "modlist")
    (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 ArgsContext) (Maybe String)
-> Text
-> CommandImpl (Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"modrestart")
      (Ap (Arg ArgsContext) String -> Ap (Arg ArgsContext) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[server]"))
      $(operDocs `cmdDoc` "modrestart")
    (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 ArgsContext (String, Maybe String)
-> Text
-> CommandImpl (String, Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"modreload")
      ((String -> Maybe String -> (String, Maybe String))
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) (Maybe String)
-> Args ArgsContext (String, Maybe String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"module") (Ap (Arg ArgsContext) String -> Ap (Arg ArgsContext) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[remote]")))
      $(operDocs `cmdDoc` "modreload")
    (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 ArgsContext (String, String)
-> Text
-> CommandImpl (String, String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"grant")
      ((String -> String -> (String, String))
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) String
-> Args ArgsContext (String, String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"target") (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"privset"))
      $(operDocs `cmdDoc` "grant")
    (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 ArgsContext) (Maybe String)
-> Text
-> CommandImpl (Maybe String)
-> Command
forall a.
NonEmpty Text
-> Args ArgsContext a -> Text -> CommandImpl a -> Command
Command
      (Text -> NonEmpty Text
forall a. a -> NonEmpty a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Text
"privs")
      (Ap (Arg ArgsContext) String -> Ap (Arg ArgsContext) (Maybe String)
forall r a. Args r a -> Args r (Maybe a)
optionalArg (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"[target]"))
      $(operDocs `cmdDoc` "privs")
    (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

cmdBanLine :: Text -> NetworkCommand ((Maybe String, String), String, String)
cmdBanLine :: Text -> NetworkCommand ((Maybe String, String), String, String)
cmdBanLine Text
lineName NetworkState
cs ClientState
st ((Maybe String
server, String
duration), String
target, String
reason) = do
  let
    remote :: [Text]
remote = case Maybe String
server of
      Just String
server' -> [Text
"ON", String -> Text
Text.pack String
server']
      Maybe String
Nothing      -> []
    args :: [Text]
args = [String -> Text
Text.pack String
duration, String -> Text
Text.pack String
target] [Text] -> [Text] -> [Text]
forall a. [a] -> [a] -> [a]
++ [Text]
remote [Text] -> [Text] -> [Text]
forall a. [a] -> [a] -> [a]
++ [String -> Text
Text.pack String
reason]
  NetworkState -> RawIrcMsg -> IO ()
sendMsg NetworkState
cs (Text -> [Text] -> RawIrcMsg
rawIrcMsg Text
lineName [Text]
args)
  ClientState -> IO CommandResult
forall (m :: * -> *). Monad m => ClientState -> m CommandResult
commandSuccess ClientState
st

banLineArgs :: ArgsContext -> String -> Maybe (Args ArgsContext (Maybe String, String))
banLineArgs :: ArgsContext
-> String -> Maybe (Ap (Arg ArgsContext) (Maybe String, String))
banLineArgs ArgsContext
_ String
"on" = Ap (Arg ArgsContext) (Maybe String, String)
-> Maybe (Ap (Arg ArgsContext) (Maybe String, String))
forall a. a -> Maybe a
Just ((Maybe String -> String -> (Maybe String, String))
-> Ap (Arg ArgsContext) (Maybe String)
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) (Maybe String, String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (String -> Maybe String
forall a. a -> Maybe a
Just (String -> Maybe String)
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) (Maybe String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"servername") (String -> Ap (Arg ArgsContext) String
forall r. String -> Args r String
simpleToken String
"minutes"))
banLineArgs ArgsContext
_ String
mins = Ap (Arg ArgsContext) (Maybe String, String)
-> Maybe (Ap (Arg ArgsContext) (Maybe String, String))
forall a. a -> Maybe a
Just ((Maybe String -> String -> (Maybe String, String))
-> Ap (Arg ArgsContext) (Maybe String)
-> Ap (Arg ArgsContext) String
-> Ap (Arg ArgsContext) (Maybe String, String)
forall a b c.
(a -> b -> c)
-> Ap (Arg ArgsContext) a
-> Ap (Arg ArgsContext) b
-> Ap (Arg ArgsContext) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (Maybe String -> Ap (Arg ArgsContext) (Maybe String)
forall a. a -> Ap (Arg ArgsContext) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe String
forall a. Maybe a
Nothing) (String -> Ap (Arg ArgsContext) String
forall a. a -> Ap (Arg ArgsContext) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure String
mins))

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