packages feed

rss2irc 0.1 → 0.2

raw patch · 2 files changed

+18/−9 lines, 2 files

Files

Main.hs view
@@ -32,6 +32,7 @@ import Control.Concurrent (forkIO,threadDelay) import qualified Control.Parallel.Strategies as Par (NFData(..)) +import System.Console.GetOpt import Text.Printf import Network @@ -44,6 +45,7 @@                , port    :: !Int                , channel :: String                , nick    :: String+               , links   :: !Bool                }  {-@@ -53,16 +55,21 @@ nick   = "archrss" -} +data Flag = Links deriving Eq+ main :: IO () main = do-    args <- getArgs+    (flags, args, errs) <- getOpt Permute [Option ['l'] ["links"] (NoArg Links) "include link URLs"] `fmap` getArgs+    when (not . null $ errs) help+    let l = Links `elem` flags     (st, feed, prefix) <- case args of          [s,p,c,n,f,z] | Just intp <- maybeRead p ->              return (Bot { socket  = stdout                          , server  = s                          , port    = intp                          , channel = c-                         , nick    = n }+                         , nick    = n+                         , links   = l }                          ,f, z)           _ -> help@@ -96,14 +103,15 @@     n <- asks nick     c <- asks channel     h <- asks socket+    l <- asks links      write "NICK" n-    write "USER" (n++" 0 * :tutorial bot")+    write "USER" (n++" 0 * :rss2irc gateway")     write "JOIN" c      -- run RSS thread     -- main thread just listens on commands-    liftIO $ forkIO $ reader c h feed prefix+    liftIO $ forkIO $ reader c h l feed prefix     listen h  --@@ -124,8 +132,8 @@ -- -- wait on an RSS thread, updating every 60 minutes. ---reader :: String -> Handle -> String -> String -> IO ()-reader c h url prefix = go []+reader :: String -> Handle -> Bool -> String -> String -> IO ()+reader c h l url prefix = go []   where     go old = do         RSSFeed f <- (fromJust . parseFeedString) `fmap` openURL url@@ -135,7 +143,8 @@         forM_ (take 5 diff) $ \item -> do             case rssItemTitle item of                 Nothing -> return ()-                Just t  -> privmsgH h c $ prefix ++ t+                Just t  -> privmsgH h c $ prefix ++ t ++ if l then linkText else ""+                  where linkText = maybe "" ("  " ++) (rssItemLink item)          threadDelay (60 * minutes)         go new@@ -183,7 +192,7 @@ ------------------------------------------------------------------------  help = do-    putStrLn "rss2irc <server> <port> <channel> <nick> <feed-url> <msg-prefix>"+    putStrLn "rss2irc [--links] <server> <port> <channel> <nick> <feed-url> <msg-prefix>"     exitWith ExitSuccess  maybeRead :: Read a => String -> Maybe a
rss2irc.cabal view
@@ -1,5 +1,5 @@ name:                rss2irc-version:             0.1+version:             0.2 homepage:            http://code.haskell.org/~dons/code/rss2irc license:             BSD3 license-file:        LICENSE