packages feed

irc-core-1.1.3: driver/ConnectCmds.hs

{-# LANGUAGE OverloadedStrings #-}
module ConnectCmds (connectCmds) where

import Control.Lens
import Data.Foldable (for_)
import Data.Text.Encoding
import Data.Monoid ((<>))

import Irc.Message
import Irc.Format
import ClientState
import ServerSettings

connectCmds :: EventHandler
connectCmds = EventHandler
  { _evName = "connect commands"
  , _evOnEvent = handler
  }

handler :: Identifier -> IrcMessage -> ClientState -> IO ClientState

handler ident mesg st
  | ident == ""
  , views mesgSender userNick mesg == "Welcome" =
      do let cmds = view (clientServer0 . ccServerSettings . ssConnectCmds) st
         for_ cmds $ \cmd ->
           clientSend (encodeUtf8 cmd<>"\r\n") st
         return st

  | otherwise = return (reschedule st)

-- Reschedule the autojoin handler for the next message
reschedule :: ClientState -> ClientState
reschedule = over clientAutomation (cons connectCmds)