summaryrefslogtreecommitdiff
path: root/Hsbot/IRC.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Hsbot/IRC.hs')
-rw-r--r--Hsbot/IRC.hs27
1 files changed, 25 insertions, 2 deletions
diff --git a/Hsbot/IRC.hs b/Hsbot/IRC.hs
index 6ff1013..ead044c 100644
--- a/Hsbot/IRC.hs
+++ b/Hsbot/IRC.hs
@@ -1,11 +1,15 @@
module Hsbot.IRC
( IrcInput(..)
, IrcOutput(..)
+ , connectServer
+ , initServer
, parseIrcMsg
)where
-import qualified Network.IRC as Irc
-import System.IO (Handle)
+import Control.Monad
+import Network
+import qualified Network.IRC as IRC
+import System.IO
import Hsbot.Core
@@ -32,3 +36,22 @@ data IrcOutput = Str String -- a regular string
parseIrcMsg :: String -> IrcInput
parseIrcMsg _ = Err "Parsing not yet implemented"
+-- | Connects to a server
+connectServer :: IrcServer -> IO (IrcServer, Handle)
+connectServer server = do
+ let name = address server
+ port_number = port server
+ handle <- connectTo name (PortNumber $ fromIntegral port_number)
+ hSetBuffering handle NoBuffering
+ return (server, handle)
+
+-- | Setup a newly connected server by sending nick and join stuff
+initServer :: (IrcServer, Handle) -> IO ()
+initServer (server, handle) = do
+ sendstr handle (IRC.encode $ IRC.nick (nickname server))
+ sendstr handle (IRC.encode $ IRC.user (nickname server) "0" "*" (realname server))
+ when (not . null $ (password server)) $ do
+ sendstr handle (IRC.encode $ IRC.privmsg "nickserv" ("identify" ++ (password server)))
+ mapM_ (sendstr handle . IRC.encode . IRC.joinChan) (channels server)
+ return ()
+