module Hsbot.Irc.Server ( initServerConnection , sendIrcMsg ) where import Control.Concurrent.Chan import Control.Monad.State import Hsbot.Irc.Config import Hsbot.Irc.Message import Hsbot.Irc.Types -- | Setup a newly connected server by sending nick and join stuff initServerConnection :: IrcConfig -> IrcServer () initServerConnection config = do sendIrcMsg $ IrcMsg Nothing "NICK" [(ircConfigNickname config)] sendIrcMsg $ IrcMsg Nothing "USER" [(ircConfigNickname config), "0", "*", (ircConfigRealname config)] when (not . null $ ircConfigPassword config) $ do sendIrcMsg $ IrcMsg Nothing "PRIVMSG" ["nickserv", "identify", (ircConfigPassword config)] mapM_ joinChan (ircConfigChannels config) -- | Joins a chan joinChan :: String -> IrcServer () joinChan channel = do ircServer <- get let oldChannels = ircServerChannels ircServer sendIrcMsg $ IrcMsg Nothing "JOIN" [channel] put $ ircServer { ircServerChannels = channel : oldChannels } -- | Sends an IrcMsg sendIrcMsg :: IrcMsg -> IrcServer () sendIrcMsg ircMsg = do chan <- gets ircServerChan liftIO $ writeChan chan (OutIrcMsg ircMsg)