diff --git a/hask-irc-runner/Main.hs b/hask-irc-runner/Main.hs new file mode 100644 index 0000000..40e3fd3 --- /dev/null +++ b/hask-irc-runner/Main.hs @@ -0,0 +1,8 @@ +module Main where + +import qualified Network.IRC.Runner as Runner + +import Prelude + +main :: IO () +main = Runner.run diff --git a/Main.hs b/hask-irc-runner/Network/IRC/Runner.hs similarity index 97% rename from Main.hs rename to hask-irc-runner/Network/IRC/Runner.hs index abf803a..a4d6548 100644 --- a/Main.hs +++ b/hask-irc-runner/Network/IRC/Runner.hs @@ -1,6 +1,6 @@ {-# LANGUAGE OverlappingInstances #-} -module Main (main) where +module Network.IRC.Runner (run) where import qualified Data.Configurator as CF @@ -24,8 +24,8 @@ instance Configured a => Configured [a] where convert (List xs) = Just . mapMaybe convert $ xs convert _ = Nothing -main :: IO () -main = do +run :: IO () +run = do -- get args args <- getArgs prog <- getProgName diff --git a/hask-irc.cabal b/hask-irc.cabal index 5cca461..52666df 100644 --- a/hask-irc.cabal +++ b/hask-irc.cabal @@ -37,7 +37,7 @@ maintainer: abhinav@abhinavsarkar.net -- A copyright notice. -- copyright: -category: Network +category: Network, IRC build-type: Simple @@ -79,8 +79,20 @@ library transformers-base >=0.4 && <0.5, unordered-containers >=0.2 && <0.3 - exposed-modules: Network.IRC.Types, Network.IRC.Protocol, - Network.IRC.Handlers, Network.IRC.Client + exposed-modules: Network.IRC.Types, + Network.IRC.Protocol, + Network.IRC.Util, + Network.IRC.Bot, + Network.IRC.Client, + Network.IRC.Handlers, + Network.IRC.Handlers.Auth, + Network.IRC.Handlers.Auth.Types, + Network.IRC.Handlers.MessageLogger, + Network.IRC.Handlers.NickTracker, + Network.IRC.Handlers.NickTracker.Types, + Network.IRC.Handlers.SongSearch + + hs-source-dirs: src default-language: Haskell2010 @@ -101,33 +113,15 @@ executable hask-irc -- Other library packages from which modules are imported. build-depends: base >=4.5 && <4.8, - text >=0.11 && <0.12, - mtl >=2.1 && <2.2, - network >=2.3 && <2.5, + hask-irc ==0.1.0, configurator >=0.2 && <0.3, - time >=1.4 && <1.5, - curl-aeson >=0.0.3 && <0.1, - aeson >=0.6.0.0 && <0.7, - HTTP >=4000 && <5000, - transformers >=0.3 && <0.4, classy-prelude >=0.9 && <1.0, - text-format >=0.3 && <0.4, - filepath >=1.3 && <1.4, - directory >=1.2 && <1.3, lifted-base >=0.2 && <0.3, unix >=2.7 && <2.8, - convertible >=1.1 && <1.2, - hslogger >=1.2 && <1.3, - hslogger-template >=2.0 && <2.1, - ixset >=1.0 && <1.1, - acid-state >=0.12 && <0.13, - safecopy >=0.8 && <0.9, - uuid >=1.3 && <1.4, - transformers-base >=0.4 && <0.5, - unordered-containers >=0.2 && <0.3 + hslogger >=1.2 && <1.3 -- Directories containing source files. - -- hs-source-dirs: + hs-source-dirs: hask-irc-runner -- Base language which the package is written in. default-language: Haskell2010 diff --git a/Network/IRC/Bot.hs b/src/Network/IRC/Bot.hs similarity index 100% rename from Network/IRC/Bot.hs rename to src/Network/IRC/Bot.hs diff --git a/Network/IRC/Client.hs b/src/Network/IRC/Client.hs similarity index 100% rename from Network/IRC/Client.hs rename to src/Network/IRC/Client.hs diff --git a/Network/IRC/Handlers.hs b/src/Network/IRC/Handlers.hs similarity index 100% rename from Network/IRC/Handlers.hs rename to src/Network/IRC/Handlers.hs diff --git a/Network/IRC/Handlers/Auth.hs b/src/Network/IRC/Handlers/Auth.hs similarity index 100% rename from Network/IRC/Handlers/Auth.hs rename to src/Network/IRC/Handlers/Auth.hs diff --git a/Network/IRC/Handlers/Auth/Types.hs b/src/Network/IRC/Handlers/Auth/Types.hs similarity index 100% rename from Network/IRC/Handlers/Auth/Types.hs rename to src/Network/IRC/Handlers/Auth/Types.hs diff --git a/Network/IRC/Handlers/MessageLogger.hs b/src/Network/IRC/Handlers/MessageLogger.hs similarity index 100% rename from Network/IRC/Handlers/MessageLogger.hs rename to src/Network/IRC/Handlers/MessageLogger.hs diff --git a/Network/IRC/Handlers/NickTracker.hs b/src/Network/IRC/Handlers/NickTracker.hs similarity index 93% rename from Network/IRC/Handlers/NickTracker.hs rename to src/Network/IRC/Handlers/NickTracker.hs index b50a8c8..712fad5 100644 --- a/Network/IRC/Handlers/NickTracker.hs +++ b/src/Network/IRC/Handlers/NickTracker.hs @@ -58,7 +58,7 @@ nickTrackerMsg state Message { .. } = case msgDetails of NickMsg { .. } -> handleNickChange state user newNick msgTime >> swap (user, User newNick "") >> return Nothing NamesMsg { .. } -> do - mapM_ (\n -> updateNickTrack state (User n "") "" msgTime) nicks + forM_ nicks $ \n -> updateNickTrack state (User n "") "" msgTime refresh nicks >> updateRefreshTime >> return Nothing IdleMsg { .. } -> do NickTrackingState { .. } <- readIORef state @@ -69,12 +69,12 @@ nickTrackerMsg state Message { .. } = case msgDetails of where updateRefreshTime = atomicModIORef state $ \ s -> s { lastRefreshOn = msgTime } - add = atomicModIORef state . modifyOnlineNicks . flip ((. (Nick . userNick)) . flip insertSet) - remove = atomicModIORef state . modifyOnlineNicks . flip ((. (Nick . userNick)) . flip deleteSet) + add = atomicModIORef state . modifyOnlineNicks . flip ((. (Nick . userNick)) . flip insertSet) + remove = atomicModIORef state . modifyOnlineNicks . flip ((. (Nick . userNick)) . flip deleteSet) swap users = atomicModIORef state . modifyOnlineNicks $ let (oNick, nNick) = both (Nick . userNick) users in deleteSet oNick . insertSet nNick - refresh = atomicModIORef state . modifyOnlineNicks . const . setFromList . map Nick + refresh = atomicModIORef state . modifyOnlineNicks . const . setFromList . map Nick commands = [ ("!nick", handleNickCommand) , ("!seen", handleSeenCommand) ] @@ -144,9 +144,10 @@ handleSeenCommand = withNickTracks $ \nck nickTracks onlineNicks -> do , lastMessage = lastMessage' , nick = Nick lastMessageAs } = maximumByEx (comparing lastMessageOn) nickTracks - return $ (if any (`member` onlineNicks) . map nick $ nickTracks - then nck ++ " is online now" - else nck ++ " was last seen on " ++ fmtTime lastSeenOn') ++ + return $ + (if any (`member` onlineNicks) . map nick $ nickTracks + then nck ++ " is online now" + else nck ++ " was last seen on " ++ fmtTime lastSeenOn') ++ (if nck /= lastSeenAs then " as " ++ lastSeenAs else "") ++ (if clean lastMessage' == "" then "" else " and at " ++ fmtTime lastMessageOn' ++ " " ++ nck ++ diff --git a/Network/IRC/Handlers/NickTracker/Types.hs b/src/Network/IRC/Handlers/NickTracker/Types.hs similarity index 100% rename from Network/IRC/Handlers/NickTracker/Types.hs rename to src/Network/IRC/Handlers/NickTracker/Types.hs diff --git a/Network/IRC/Handlers/SongSearch.hs b/src/Network/IRC/Handlers/SongSearch.hs similarity index 100% rename from Network/IRC/Handlers/SongSearch.hs rename to src/Network/IRC/Handlers/SongSearch.hs diff --git a/Network/IRC/Protocol.hs b/src/Network/IRC/Protocol.hs similarity index 100% rename from Network/IRC/Protocol.hs rename to src/Network/IRC/Protocol.hs diff --git a/Network/IRC/Types.hs b/src/Network/IRC/Types.hs similarity index 100% rename from Network/IRC/Types.hs rename to src/Network/IRC/Types.hs diff --git a/Network/IRC/Util.hs b/src/Network/IRC/Util.hs similarity index 100% rename from Network/IRC/Util.hs rename to src/Network/IRC/Util.hs