{-# LANGUAGE OverloadedStrings #-}

module Network.IRC.Commands (
    -- * Types
    Channel
  , Password

    -- * IRC Functions
  , nick
  , user
  , joinChan
  , part
  , quit
  , privmsg
  , kick
  , pong
  ) where

import Data.ByteString

import Network.IRC.Base

type Channel    = ByteString
type Password   = ByteString
type Reason     = ByteString

mkMessage           :: ByteString -> [Parameter] -> Message
mkMessage :: ByteString -> [ByteString] -> Message
mkMessage ByteString
cmd [ByteString]
params = Maybe Prefix -> ByteString -> [ByteString] -> Message
Message Maybe Prefix
forall a. Maybe a
Nothing ByteString
cmd [ByteString]
params




nick  :: UserName -> Message
nick :: ByteString -> Message
nick ByteString
u = ByteString -> [ByteString] -> Message
mkMessage ByteString
"NICK" [ByteString
u]

user        :: UserName -> ServerName -> ServerName -> RealName -> Message
user :: ByteString -> ByteString -> ByteString -> ByteString -> Message
user ByteString
u ByteString
h ByteString
s ByteString
r = ByteString -> [ByteString] -> Message
mkMessage ByteString
"USER" [ByteString
u,ByteString
h,ByteString
s,ByteString
r]

joinChan  :: Channel -> Message
joinChan :: ByteString -> Message
joinChan ByteString
c = ByteString -> [ByteString] -> Message
mkMessage ByteString
"JOIN" [ByteString
c]

kick :: Channel -> UserName -> Maybe Reason -> Message
kick :: ByteString -> ByteString -> Maybe ByteString -> Message
kick ByteString
c ByteString
u (Just ByteString
r) = ByteString -> [ByteString] -> Message
mkMessage ByteString
"KICK" [ByteString
c,ByteString
u,ByteString
r]
kick ByteString
c ByteString
u Maybe ByteString
Nothing  = ByteString -> [ByteString] -> Message
mkMessage ByteString
"KICK" [ByteString
c,ByteString
u]

part  :: Channel -> Message
part :: ByteString -> Message
part ByteString
c = ByteString -> [ByteString] -> Message
mkMessage ByteString
"PART" [ByteString
c]

quit :: Maybe ByteString -> Message
quit :: Maybe ByteString -> Message
quit (Just ByteString
m) = ByteString -> [ByteString] -> Message
mkMessage ByteString
"QUIT" [ByteString
m]
quit Maybe ByteString
Nothing  = ByteString -> [ByteString] -> Message
mkMessage ByteString
"QUIT" []

privmsg    :: ByteString -> ByteString -> Message
privmsg :: ByteString -> ByteString -> Message
privmsg ByteString
c ByteString
m = ByteString -> [ByteString] -> Message
mkMessage ByteString
"PRIVMSG" [ByteString
c,ByteString
m]

pong  :: ServerName -> Message
pong :: ByteString -> Message
pong ByteString
s = ByteString -> [ByteString] -> Message
mkMessage ByteString
"PONG" [ByteString
s]