From b9c8e4d404c444d57fe7320c25ba0654d9c5193c Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Thu, 6 Aug 2009 00:11:14 +0200 Subject: Added IRC connection and initialisation stuff. --- Hsbot/Core.hs | 5 +++++ Hsbot/IRC.hs | 27 +++++++++++++++++++++++++-- Hsbot/Main.hs | 5 +++-- 3 files changed, 33 insertions(+), 4 deletions(-) (limited to 'Hsbot') diff --git a/Hsbot/Core.hs b/Hsbot/Core.hs index b2e34c8..4daeef9 100644 --- a/Hsbot/Core.hs +++ b/Hsbot/Core.hs @@ -3,10 +3,12 @@ module Hsbot.Core , Config(..) , IrcServer(..) , newbot + , sendstr ) where import qualified Data.Map as M import System.IO (Handle) +import Text.Printf (hPrintf) -- | An IRC Bot server state (socket handles) data Bot = Bot @@ -34,3 +36,6 @@ data IrcServer = IrcServer newbot :: Bot newbot = Bot (M.empty) +-- | Send a string over handle +sendstr handle str = hPrintf handle "%s\r\n" str + 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 () + diff --git a/Hsbot/Main.hs b/Hsbot/Main.hs index 129d2bd..5ff138b 100644 --- a/Hsbot/Main.hs +++ b/Hsbot/Main.hs @@ -2,7 +2,6 @@ module Hsbot.Main (imain ) where -import Network import System.IO import System.Plugins @@ -19,5 +18,7 @@ imain modul' reboot = imain' modul' reboot newbot -- | Bot's main entry point imain' :: Module -> Reboot -> Bot -> IO () imain' modul' reboot bot = do - print C.config + servers' <- mapM connectServer (ircServers C.config) + mapM_ initServer servers' + return () -- cgit v1.2.3