Archived
1
0
Fork 0

Added IRC connection and initialisation stuff.

This commit is contained in:
Julien Dessaux 2009-08-06 00:11:14 +02:00
parent 45ebb68aa0
commit b9c8e4d404
4 changed files with 34 additions and 5 deletions

View file

@ -10,7 +10,7 @@ import Hsbot.Core
kro = IrcServer
{ address = "kro.corp"
, port = 6667
, channels = ["#geek"]
, channels = ["#geek", "#shbot"]
, nickname = "hsbot"
, password = ""
, realname = "The One True bot, with it's haskell soul."

View file

@ -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

View file

@ -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 ()

View file

@ -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 ()