summaryrefslogtreecommitdiff
path: root/Hsbot/IRC.hs
diff options
context:
space:
mode:
authorJulien Dessaux2009-08-13 00:07:08 +0200
committerJulien Dessaux2009-08-13 00:07:08 +0200
commitdfd0b3dcd72a8efa84612a4ae925204f3e4526d8 (patch)
tree574665be7df16d203337ac807eddfd70a3ebcbf0 /Hsbot/IRC.hs
parentAdded server states, in order to handle rebooting more cleanly (still missing... (diff)
downloadhsbot-dfd0b3dcd72a8efa84612a4ae925204f3e4526d8.tar.gz
hsbot-dfd0b3dcd72a8efa84612a4ae925204f3e4526d8.tar.bz2
hsbot-dfd0b3dcd72a8efa84612a4ae925204f3e4526d8.zip
Added the IRCParser (thx galdor), and PrivMsg handling (simply repeat)
Diffstat (limited to '')
-rw-r--r--Hsbot/IRC.hs25
1 files changed, 22 insertions, 3 deletions
diff --git a/Hsbot/IRC.hs b/Hsbot/IRC.hs
index 7922a37..76853e2 100644
--- a/Hsbot/IRC.hs
+++ b/Hsbot/IRC.hs
@@ -5,15 +5,18 @@ module Hsbot.IRC
, parseIrcMsg
, ping
, pong
+ , sendPrivmsg
)where
import Control.Monad
import Data.List(isPrefixOf)
+import Data.Maybe
import Network
import qualified Network.IRC as IRC
import System.IO
import Hsbot.Core
+import Hsbot.IRCParser
type User = String
type Channel = String
@@ -21,7 +24,7 @@ type Command = String
type Args = [String]
-- | An IRC line
-data IrcLine = Str String -- a regular string
+data IrcLine = Privmsg (String, [String]) -- statement (chan, sentence...)
| Quit (IrcServer, Handle) -- a quit message from a server
| Join (IrcServer, Channel) -- joined a channel
| Part (IrcServer, Channel) -- parted the channel
@@ -31,8 +34,21 @@ data IrcLine = Str String -- a regular string
deriving (Eq,Show)
-- | Parses an IrcInput
-parseIrcMsg :: String -> IrcInput
-parseIrcMsg str = (Cmd "user" "channel" (str, Just "args"))
+parseIrcMsg :: String -> IrcLine
+parseIrcMsg str =
+ case (ircParser str) of
+ Left err -> Nil
+ Right x -> eval x
+ where
+ eval :: IrcMsg -> IrcLine
+ eval x@(IrcMsg statement cmd stuff)
+ | cmd == "PING" = Ping $ head stuff
+ | cmd == "PRIVMSG" =
+ case statement of
+ Nothing -> Nil
+ Just statement' -> if stuff!!1 == "reboot" then Reboot
+ else Privmsg $ (statement', stuff)
+ | otherwise = Nil
-- | Connects to a server
connectServer :: IrcServer -> IO (IrcServer, Handle)
@@ -61,3 +77,6 @@ ping = isPrefixOf "PING :"
pong :: Handle -> String -> IO ()
pong handle str = sendstr handle $ "PONG " ++ (drop 5 str)
+sendPrivmsg :: (IrcServer, Handle) -> [String] -> IO ()
+sendPrivmsg (server, handle) stuff' = sendstr handle (IRC.encode $ IRC.privmsg (head stuff') (unwords . tail $ stuff'))
+