Restructured the project
parent
aaab36d743
commit
7c6bca5028
|
@ -0,0 +1,8 @@
|
||||||
|
module Main where
|
||||||
|
|
||||||
|
import qualified Network.IRC.Runner as Runner
|
||||||
|
|
||||||
|
import Prelude
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = Runner.run
|
|
@ -1,6 +1,6 @@
|
||||||
{-# LANGUAGE OverlappingInstances #-}
|
{-# LANGUAGE OverlappingInstances #-}
|
||||||
|
|
||||||
module Main (main) where
|
module Network.IRC.Runner (run) where
|
||||||
|
|
||||||
import qualified Data.Configurator as CF
|
import qualified Data.Configurator as CF
|
||||||
|
|
||||||
|
@ -24,8 +24,8 @@ instance Configured a => Configured [a] where
|
||||||
convert (List xs) = Just . mapMaybe convert $ xs
|
convert (List xs) = Just . mapMaybe convert $ xs
|
||||||
convert _ = Nothing
|
convert _ = Nothing
|
||||||
|
|
||||||
main :: IO ()
|
run :: IO ()
|
||||||
main = do
|
run = do
|
||||||
-- get args
|
-- get args
|
||||||
args <- getArgs
|
args <- getArgs
|
||||||
prog <- getProgName
|
prog <- getProgName
|
|
@ -37,7 +37,7 @@ maintainer: abhinav@abhinavsarkar.net
|
||||||
-- A copyright notice.
|
-- A copyright notice.
|
||||||
-- copyright:
|
-- copyright:
|
||||||
|
|
||||||
category: Network
|
category: Network, IRC
|
||||||
|
|
||||||
build-type: Simple
|
build-type: Simple
|
||||||
|
|
||||||
|
@ -79,8 +79,20 @@ library
|
||||||
transformers-base >=0.4 && <0.5,
|
transformers-base >=0.4 && <0.5,
|
||||||
unordered-containers >=0.2 && <0.3
|
unordered-containers >=0.2 && <0.3
|
||||||
|
|
||||||
exposed-modules: Network.IRC.Types, Network.IRC.Protocol,
|
exposed-modules: Network.IRC.Types,
|
||||||
Network.IRC.Handlers, Network.IRC.Client
|
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
|
default-language: Haskell2010
|
||||||
|
|
||||||
|
@ -101,33 +113,15 @@ executable hask-irc
|
||||||
|
|
||||||
-- Other library packages from which modules are imported.
|
-- Other library packages from which modules are imported.
|
||||||
build-depends: base >=4.5 && <4.8,
|
build-depends: base >=4.5 && <4.8,
|
||||||
text >=0.11 && <0.12,
|
hask-irc ==0.1.0,
|
||||||
mtl >=2.1 && <2.2,
|
|
||||||
network >=2.3 && <2.5,
|
|
||||||
configurator >=0.2 && <0.3,
|
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,
|
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,
|
lifted-base >=0.2 && <0.3,
|
||||||
unix >=2.7 && <2.8,
|
unix >=2.7 && <2.8,
|
||||||
convertible >=1.1 && <1.2,
|
hslogger >=1.2 && <1.3
|
||||||
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
|
|
||||||
|
|
||||||
-- Directories containing source files.
|
-- Directories containing source files.
|
||||||
-- hs-source-dirs:
|
hs-source-dirs: hask-irc-runner
|
||||||
|
|
||||||
-- Base language which the package is written in.
|
-- Base language which the package is written in.
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
|
|
|
@ -58,7 +58,7 @@ nickTrackerMsg state Message { .. } = case msgDetails of
|
||||||
NickMsg { .. } ->
|
NickMsg { .. } ->
|
||||||
handleNickChange state user newNick msgTime >> swap (user, User newNick "") >> return Nothing
|
handleNickChange state user newNick msgTime >> swap (user, User newNick "") >> return Nothing
|
||||||
NamesMsg { .. } -> do
|
NamesMsg { .. } -> do
|
||||||
mapM_ (\n -> updateNickTrack state (User n "") "" msgTime) nicks
|
forM_ nicks $ \n -> updateNickTrack state (User n "") "" msgTime
|
||||||
refresh nicks >> updateRefreshTime >> return Nothing
|
refresh nicks >> updateRefreshTime >> return Nothing
|
||||||
IdleMsg { .. } -> do
|
IdleMsg { .. } -> do
|
||||||
NickTrackingState { .. } <- readIORef state
|
NickTrackingState { .. } <- readIORef state
|
||||||
|
@ -69,12 +69,12 @@ nickTrackerMsg state Message { .. } = case msgDetails of
|
||||||
where
|
where
|
||||||
updateRefreshTime = atomicModIORef state $ \ s -> s { lastRefreshOn = msgTime }
|
updateRefreshTime = atomicModIORef state $ \ s -> s { lastRefreshOn = msgTime }
|
||||||
|
|
||||||
add = atomicModIORef state . modifyOnlineNicks . flip ((. (Nick . userNick)) . flip insertSet)
|
add = atomicModIORef state . modifyOnlineNicks . flip ((. (Nick . userNick)) . flip insertSet)
|
||||||
remove = atomicModIORef state . modifyOnlineNicks . flip ((. (Nick . userNick)) . flip deleteSet)
|
remove = atomicModIORef state . modifyOnlineNicks . flip ((. (Nick . userNick)) . flip deleteSet)
|
||||||
swap users = atomicModIORef state . modifyOnlineNicks $
|
swap users = atomicModIORef state . modifyOnlineNicks $
|
||||||
let (oNick, nNick) = both (Nick . userNick) users
|
let (oNick, nNick) = both (Nick . userNick) users
|
||||||
in deleteSet oNick . insertSet nNick
|
in deleteSet oNick . insertSet nNick
|
||||||
refresh = atomicModIORef state . modifyOnlineNicks . const . setFromList . map Nick
|
refresh = atomicModIORef state . modifyOnlineNicks . const . setFromList . map Nick
|
||||||
|
|
||||||
commands = [ ("!nick", handleNickCommand)
|
commands = [ ("!nick", handleNickCommand)
|
||||||
, ("!seen", handleSeenCommand) ]
|
, ("!seen", handleSeenCommand) ]
|
||||||
|
@ -144,9 +144,10 @@ handleSeenCommand = withNickTracks $ \nck nickTracks onlineNicks -> do
|
||||||
, lastMessage = lastMessage'
|
, lastMessage = lastMessage'
|
||||||
, nick = Nick lastMessageAs } = maximumByEx (comparing lastMessageOn) nickTracks
|
, nick = Nick lastMessageAs } = maximumByEx (comparing lastMessageOn) nickTracks
|
||||||
|
|
||||||
return $ (if any (`member` onlineNicks) . map nick $ nickTracks
|
return $
|
||||||
then nck ++ " is online now"
|
(if any (`member` onlineNicks) . map nick $ nickTracks
|
||||||
else nck ++ " was last seen on " ++ fmtTime lastSeenOn') ++
|
then nck ++ " is online now"
|
||||||
|
else nck ++ " was last seen on " ++ fmtTime lastSeenOn') ++
|
||||||
(if nck /= lastSeenAs then " as " ++ lastSeenAs else "") ++
|
(if nck /= lastSeenAs then " as " ++ lastSeenAs else "") ++
|
||||||
(if clean lastMessage' == "" then "" else
|
(if clean lastMessage' == "" then "" else
|
||||||
" and at " ++ fmtTime lastMessageOn' ++ " " ++ nck ++
|
" and at " ++ fmtTime lastMessageOn' ++ " " ++ nck ++
|
Loading…
Reference in New Issue