From ab22760c49141f9c589a30cf9f72bf61a7b5e3b3 Mon Sep 17 00:00:00 2001 From: Abhinav Sarkar Date: Sat, 7 Jun 2014 00:50:27 +0530 Subject: [PATCH] Restructed handlers project --- hask-irc-core/Network/IRC.hs | 8 +++ hask-irc-core/hask-irc-core.cabal | 3 +- hask-irc-handlers/Network/IRC/Handlers.hs | 26 ++++---- .../Network/IRC/Handlers/Auth.hs | 6 +- .../Network/IRC/Handlers/Greet.hs | 6 +- .../Network/IRC/Handlers/MessageLogger.hs | 6 +- .../Network/IRC/Handlers/NickTracker.hs | 26 ++++---- .../Handlers/NickTracker/Internal/Types.hs | 53 ++++++++++++++++ .../Network/IRC/Handlers/NickTracker/Types.hs | 60 +++--------------- .../Network/IRC/Handlers/SongSearch.hs | 6 +- .../Network/IRC/Handlers/Tell.hs | 8 +-- .../IRC/Handlers/Tell/Internal/Types.hs | 54 ++++++++++++++++ .../Network/IRC/Handlers/Tell/Types.hs | 61 +++---------------- hask-irc-handlers/hask-irc-handlers.cabal | 3 + 14 files changed, 178 insertions(+), 148 deletions(-) create mode 100644 hask-irc-core/Network/IRC.hs create mode 100644 hask-irc-handlers/Network/IRC/Handlers/NickTracker/Internal/Types.hs create mode 100644 hask-irc-handlers/Network/IRC/Handlers/Tell/Internal/Types.hs diff --git a/hask-irc-core/Network/IRC.hs b/hask-irc-core/Network/IRC.hs new file mode 100644 index 0000000..0c5177b --- /dev/null +++ b/hask-irc-core/Network/IRC.hs @@ -0,0 +1,8 @@ +module Network.IRC + ( + module Network.IRC.Types, + module Network.IRC.Client + )where + +import Network.IRC.Types +import Network.IRC.Client diff --git a/hask-irc-core/hask-irc-core.cabal b/hask-irc-core/hask-irc-core.cabal index f32ec38..6afbef6 100644 --- a/hask-irc-core/hask-irc-core.cabal +++ b/hask-irc-core/hask-irc-core.cabal @@ -69,7 +69,8 @@ library transformers-base >=0.4 && <0.5, unix >=2.7 && <2.8 - exposed-modules: Network.IRC.Types, + exposed-modules: Network.IRC, + Network.IRC.Types, Network.IRC.Client, Network.IRC.Util diff --git a/hask-irc-handlers/Network/IRC/Handlers.hs b/hask-irc-handlers/Network/IRC/Handlers.hs index d2d8019..b58c3d1 100644 --- a/hask-irc-handlers/Network/IRC/Handlers.hs +++ b/hask-irc-handlers/Network/IRC/Handlers.hs @@ -1,20 +1,20 @@ module Network.IRC.Handlers (allMsgHandlerMakers) where -import qualified Network.IRC.Handlers.Auth as Auth -import qualified Network.IRC.Handlers.Greet as Greet -import qualified Network.IRC.Handlers.MessageLogger as Logger -import qualified Network.IRC.Handlers.NickTracker as NickTracker -import qualified Network.IRC.Handlers.SongSearch as SongSearch -import qualified Network.IRC.Handlers.Tell as Tell +import Network.IRC.Handlers.Auth +import Network.IRC.Handlers.Greet +import Network.IRC.Handlers.MessageLogger +import Network.IRC.Handlers.NickTracker +import Network.IRC.Handlers.SongSearch +import Network.IRC.Handlers.Tell import Network.IRC.Types allMsgHandlerMakers :: [MsgHandlerMaker] -allMsgHandlerMakers = [ - Auth.mkMsgHandler - , Greet.mkMsgHandler - , Logger.mkMsgHandler - , NickTracker.mkMsgHandler - , SongSearch.mkMsgHandler - , Tell.mkMsgHandler +allMsgHandlerMakers = + [ authMsgHandlerMaker + , greetMsgHandlerMaker + , messageLoggerMsgHandlerMaker + , nickTrackerMsgHandlerMaker + , songSearchMsgHandlerMaker + , tellMsgHandlerMaker ] diff --git a/hask-irc-handlers/Network/IRC/Handlers/Auth.hs b/hask-irc-handlers/Network/IRC/Handlers/Auth.hs index 1592067..42ce3c3 100644 --- a/hask-irc-handlers/Network/IRC/Handlers/Auth.hs +++ b/hask-irc-handlers/Network/IRC/Handlers/Auth.hs @@ -1,7 +1,7 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} -module Network.IRC.Handlers.Auth (mkMsgHandler) where +module Network.IRC.Handlers.Auth (authMsgHandlerMaker) where import qualified Data.UUID as U import qualified Data.UUID.V4 as U @@ -65,8 +65,8 @@ authEvent state event = case fromEvent event of return RespNothing _ -> return RespNothing -mkMsgHandler :: MsgHandlerMaker -mkMsgHandler = MsgHandlerMaker "auth" go +authMsgHandlerMaker :: MsgHandlerMaker +authMsgHandlerMaker = MsgHandlerMaker "auth" go where helpMsg botNick = "Send a PM to get a new auth token. /msg " ++ nickToText botNick ++ " token" diff --git a/hask-irc-handlers/Network/IRC/Handlers/Greet.hs b/hask-irc-handlers/Network/IRC/Handlers/Greet.hs index 448a83a..291e579 100644 --- a/hask-irc-handlers/Network/IRC/Handlers/Greet.hs +++ b/hask-irc-handlers/Network/IRC/Handlers/Greet.hs @@ -1,4 +1,4 @@ -module Network.IRC.Handlers.Greet (mkMsgHandler) where +module Network.IRC.Handlers.Greet (greetMsgHandlerMaker) where import ClassyPrelude import Control.Monad.Reader (ask) @@ -6,8 +6,8 @@ import Control.Monad.Reader (ask) import Network.IRC.Types import Network.IRC.Util -mkMsgHandler :: MsgHandlerMaker -mkMsgHandler = MsgHandlerMaker "greeter" go +greetMsgHandlerMaker :: MsgHandlerMaker +greetMsgHandlerMaker = MsgHandlerMaker "greeter" go where go _ _ "greeter" = return . Just $ newMsgHandler { onMessage = greeter } go _ _ "welcomer" = return . Just $ newMsgHandler { onMessage = welcomer } diff --git a/hask-irc-handlers/Network/IRC/Handlers/MessageLogger.hs b/hask-irc-handlers/Network/IRC/Handlers/MessageLogger.hs index 9619e81..fa9029d 100644 --- a/hask-irc-handlers/Network/IRC/Handlers/MessageLogger.hs +++ b/hask-irc-handlers/Network/IRC/Handlers/MessageLogger.hs @@ -1,6 +1,6 @@ {-# LANGUAGE FlexibleContexts #-} -module Network.IRC.Handlers.MessageLogger (mkMsgHandler) where +module Network.IRC.Handlers.MessageLogger (messageLoggerMsgHandlerMaker) where import qualified Data.Configurator as CF import qualified Data.Text.Format as TF @@ -19,8 +19,8 @@ import Network.IRC.Util type LoggerState = Maybe (Handle, Day) -mkMsgHandler :: MsgHandlerMaker -mkMsgHandler = MsgHandlerMaker "messagelogger" go +messageLoggerMsgHandlerMaker :: MsgHandlerMaker +messageLoggerMsgHandlerMaker = MsgHandlerMaker "messagelogger" go where go botConfig _ "messagelogger" = do state <- io $ newIORef Nothing diff --git a/hask-irc-handlers/Network/IRC/Handlers/NickTracker.hs b/hask-irc-handlers/Network/IRC/Handlers/NickTracker.hs index 0f9cd48..fd51659 100644 --- a/hask-irc-handlers/Network/IRC/Handlers/NickTracker.hs +++ b/hask-irc-handlers/Network/IRC/Handlers/NickTracker.hs @@ -1,7 +1,7 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} -module Network.IRC.Handlers.NickTracker (mkMsgHandler) where +module Network.IRC.Handlers.NickTracker (nickTrackerMsgHandlerMaker) where import qualified Data.Configurator as CF import qualified Data.IxSet as IS @@ -18,7 +18,7 @@ import Data.Convertible (convert) import Data.IxSet (getOne, (@=)) import Data.Time (addUTCTime, NominalDiffTime) -import Network.IRC.Handlers.NickTracker.Types +import Network.IRC.Handlers.NickTracker.Internal.Types import Network.IRC.Types import Network.IRC.Util @@ -101,7 +101,7 @@ updateNickTrack state user message msgTime = io $ do (_, Just (NickTrack { .. })) -> return (message, msgTime, canonicalNick) _ -> newCanonicalNick >>= \cn -> return (message, msgTime, cn) - saveNickTrack acid $ NickTrack nck cn (LastSeenOn msgTime) lastMessageOn' message' + saveNickTrack acid $ NickTrack nck cn msgTime lastMessageOn' message' handleNickChange :: MonadMsgHandler m => IORef NickTrackingState -> User -> Nick -> UTCTime -> m () handleNickChange state user newNick msgTime = io $ do @@ -119,7 +119,7 @@ handleNickChange state user newNick msgTime = io $ do _ -> return Nothing whenJust mInfo $ \(message, cn, lastMessageOn') -> - saveNickTrack acid $ NickTrack newNick cn (LastSeenOn msgTime) lastMessageOn' message + saveNickTrack acid $ NickTrack newNick cn msgTime lastMessageOn' message newCanonicalNick :: IO CanonicalNick newCanonicalNick = map (CanonicalNick . pack . U.toString) U.nextRandom @@ -141,22 +141,22 @@ withNickTracks f state message = io $ do handleNickCommand :: MonadMsgHandler m => IORef NickTrackingState -> Message -> m [Command] handleNickCommand = withNickTracks $ \nck nickTracks _ -> do let nicks = map ((\(Nick n) -> n) . nick) nickTracks - if length nicks == 1 - then return $ nck ++ " has only one nick" - else return $ nck ++ "'s other nicks are: " ++ intercalate ", " (filter (/= nck) nicks) + return . (nck ++) $ if length nicks == 1 + then " has only one nick" + else "'s other nicks are: " ++ intercalate ", " (filter (/= nck) nicks) handleSeenCommand :: MonadMsgHandler m => IORef NickTrackingState -> Message -> m [Command] handleSeenCommand = withNickTracks $ \nck nickTracks onlineNicks -> do - let NickTrack { lastSeenOn = LastSeenOn lastSeenOn' + let NickTrack { lastSeenOn = lastSeenOn' , nick = Nick lastSeenAs } = maximumByEx (comparing lastSeenOn) nickTracks let NickTrack { lastMessageOn = lastMessageOn' , lastMessage = lastMessage' , nick = Nick lastMessageAs } = maximumByEx (comparing lastMessageOn) nickTracks now <- io getCurrentTime - return $ + return . (nck ++) $ (if any (`member` onlineNicks) . map nick $ nickTracks - then nck ++ " is online now" - else nck ++ " was last seen " ++ relativeTime lastSeenOn' now) ++ + then " is online now" + else " was last seen " ++ relativeTime lastSeenOn' now) ++ (if nck /= lastSeenAs then " as " ++ lastSeenAs else "") ++ (if clean lastMessage' == "" then "" else " and " ++ relativeTime lastMessageOn' now ++ " " ++ nck ++ @@ -186,8 +186,8 @@ stopNickTracker state = io $ do createArchive acid createCheckpointAndClose acid -mkMsgHandler :: MsgHandlerMaker -mkMsgHandler = MsgHandlerMaker "nicktracker" go +nickTrackerMsgHandlerMaker :: MsgHandlerMaker +nickTrackerMsgHandlerMaker = MsgHandlerMaker "nicktracker" go where helpMsgs = mapFromList [ ("!nicks", "Shows alternate nicks of the user. !nicks "), diff --git a/hask-irc-handlers/Network/IRC/Handlers/NickTracker/Internal/Types.hs b/hask-irc-handlers/Network/IRC/Handlers/NickTracker/Internal/Types.hs new file mode 100644 index 0000000..41762fd --- /dev/null +++ b/hask-irc-handlers/Network/IRC/Handlers/NickTracker/Internal/Types.hs @@ -0,0 +1,53 @@ +{-# LANGUAGE TemplateHaskell #-} + +module Network.IRC.Handlers.NickTracker.Internal.Types where + +import ClassyPrelude +import Control.Concurrent.Lifted (Chan, writeChan) +import Data.Data (Data) +import Data.IxSet (IxSet, Indexable (..), ixSet, ixFun) +import Data.SafeCopy (base, deriveSafeCopy) + +import Network.IRC.Types + +newtype CanonicalNick = CanonicalNick { canonicalNickToText :: Text } + deriving (Eq, Ord, Show, Data, Typeable) +newtype LastSeenOn = LastSeenOn UTCTime deriving (Eq, Ord, Show, Data, Typeable) + +data NickTrack = NickTrack { + nick :: !Nick, + canonicalNick :: !CanonicalNick, + lastSeenOn :: !UTCTime, + lastMessageOn :: !UTCTime, + lastMessage :: !Text +} deriving (Eq, Ord, Show, Data, Typeable) + +instance Indexable NickTrack where + empty = ixSet [ ixFun $ (: []) . nick + , ixFun $ (: []) . canonicalNick + , ixFun $ (: []) . LastSeenOn . lastSeenOn ] + +newtype NickTracking = NickTracking { nickTracking :: IxSet NickTrack } + deriving (Eq, Ord, Show, Data, Typeable) + +$(deriveSafeCopy 0 'base ''CanonicalNick) +$(deriveSafeCopy 0 'base ''LastSeenOn) +$(deriveSafeCopy 0 'base ''NickTrack) +$(deriveSafeCopy 0 'base ''NickTracking) + +emptyNickTracking :: NickTracking +emptyNickTracking = NickTracking empty + +data NickTrackRequest = NickTrackRequest Nick (MVar (Maybe NickTrack)) deriving (Eq, Typeable) + +instance Event NickTrackRequest + +instance Show NickTrackRequest where + show (NickTrackRequest nick _) = "NickTrackRequest[" ++ unpack (nickToText nick) ++ "]" + +getCanonicalNick :: Chan SomeEvent -> Nick -> IO (Maybe CanonicalNick) +getCanonicalNick eventChan nick = do + reply <- newEmptyMVar + request <- toEvent $ NickTrackRequest nick reply + writeChan eventChan request + map (map canonicalNick) $ takeMVar reply diff --git a/hask-irc-handlers/Network/IRC/Handlers/NickTracker/Types.hs b/hask-irc-handlers/Network/IRC/Handlers/NickTracker/Types.hs index c9818b2..f45456f 100644 --- a/hask-irc-handlers/Network/IRC/Handlers/NickTracker/Types.hs +++ b/hask-irc-handlers/Network/IRC/Handlers/NickTracker/Types.hs @@ -1,53 +1,9 @@ -{-# LANGUAGE TemplateHaskell #-} +module Network.IRC.Handlers.NickTracker.Types + ( + CanonicalNick (..) + , NickTrack (..) + , getCanonicalNick + ) +where -module Network.IRC.Handlers.NickTracker.Types where - -import ClassyPrelude -import Control.Concurrent.Lifted (Chan, writeChan) -import Data.Data (Data) -import Data.IxSet (IxSet, Indexable (..), ixSet, ixFun) -import Data.SafeCopy (base, deriveSafeCopy) - -import Network.IRC.Types - -newtype CanonicalNick = CanonicalNick { canonicalNickToText :: Text } - deriving (Eq, Ord, Show, Data, Typeable) -newtype LastSeenOn = LastSeenOn UTCTime deriving (Eq, Ord, Show, Data, Typeable) - -data NickTrack = NickTrack { - nick :: !Nick, - canonicalNick :: !CanonicalNick, - lastSeenOn :: !LastSeenOn, - lastMessageOn :: !UTCTime, - lastMessage :: !Text -} deriving (Eq, Ord, Show, Data, Typeable) - -instance Indexable NickTrack where - empty = ixSet [ ixFun $ (: []) . nick - , ixFun $ (: []) . canonicalNick - , ixFun $ (: []) . lastSeenOn ] - -newtype NickTracking = NickTracking { nickTracking :: IxSet NickTrack } - deriving (Eq, Ord, Show, Data, Typeable) - -$(deriveSafeCopy 0 'base ''CanonicalNick) -$(deriveSafeCopy 0 'base ''LastSeenOn) -$(deriveSafeCopy 0 'base ''NickTrack) -$(deriveSafeCopy 0 'base ''NickTracking) - -emptyNickTracking :: NickTracking -emptyNickTracking = NickTracking empty - -data NickTrackRequest = NickTrackRequest Nick (MVar (Maybe NickTrack)) deriving (Eq, Typeable) - -instance Event NickTrackRequest - -instance Show NickTrackRequest where - show (NickTrackRequest nick _) = "NickTrackRequest[" ++ unpack (nickToText nick) ++ "]" - -getCanonicalNick :: Chan SomeEvent -> Nick -> IO (Maybe CanonicalNick) -getCanonicalNick eventChan nick = do - reply <- newEmptyMVar - request <- toEvent $ NickTrackRequest nick reply - writeChan eventChan request - map (map canonicalNick) $ takeMVar reply +import Network.IRC.Handlers.NickTracker.Internal.Types diff --git a/hask-irc-handlers/Network/IRC/Handlers/SongSearch.hs b/hask-irc-handlers/Network/IRC/Handlers/SongSearch.hs index cb2163a..2d743f0 100644 --- a/hask-irc-handlers/Network/IRC/Handlers/SongSearch.hs +++ b/hask-irc-handlers/Network/IRC/Handlers/SongSearch.hs @@ -1,7 +1,7 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TemplateHaskell #-} -module Network.IRC.Handlers.SongSearch (mkMsgHandler) where +module Network.IRC.Handlers.SongSearch (songSearchMsgHandlerMaker) where import qualified Data.Configurator as CF import qualified System.Log.Logger as HSL @@ -20,8 +20,8 @@ import Network.IRC.Types $(deriveLoggers "HSL" [HSL.ERROR]) -mkMsgHandler :: MsgHandlerMaker -mkMsgHandler = MsgHandlerMaker "songsearch" go +songSearchMsgHandlerMaker :: MsgHandlerMaker +songSearchMsgHandlerMaker = MsgHandlerMaker "songsearch" go where helpMsg = "Search for song. !m or !m - " diff --git a/hask-irc-handlers/Network/IRC/Handlers/Tell.hs b/hask-irc-handlers/Network/IRC/Handlers/Tell.hs index 23a0b24..0abced9 100644 --- a/hask-irc-handlers/Network/IRC/Handlers/Tell.hs +++ b/hask-irc-handlers/Network/IRC/Handlers/Tell.hs @@ -2,7 +2,7 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} -module Network.IRC.Handlers.Tell (mkMsgHandler) where +module Network.IRC.Handlers.Tell (tellMsgHandlerMaker) where import qualified Data.IxSet as IS @@ -17,7 +17,7 @@ import Data.IxSet ((@=)) import Data.Text (split, strip) import Network.IRC.Handlers.NickTracker.Types -import Network.IRC.Handlers.Tell.Types +import Network.IRC.Handlers.Tell.Internal.Types import Network.IRC.Types import Network.IRC.Util @@ -125,8 +125,8 @@ stopTell state = io $ do createArchive acid createCheckpointAndClose acid -mkMsgHandler :: MsgHandlerMaker -mkMsgHandler = MsgHandlerMaker "tell" go +tellMsgHandlerMaker :: MsgHandlerMaker +tellMsgHandlerMaker = MsgHandlerMaker "tell" go where go BotConfig { .. } eventChan "tell" = do acid <- openLocalState emptyTells diff --git a/hask-irc-handlers/Network/IRC/Handlers/Tell/Internal/Types.hs b/hask-irc-handlers/Network/IRC/Handlers/Tell/Internal/Types.hs new file mode 100644 index 0000000..af812f4 --- /dev/null +++ b/hask-irc-handlers/Network/IRC/Handlers/Tell/Internal/Types.hs @@ -0,0 +1,54 @@ +{-# LANGUAGE DeriveDataTypeable #-} +{-# LANGUAGE TemplateHaskell #-} + +module Network.IRC.Handlers.Tell.Internal.Types where + +import ClassyPrelude +import Control.Concurrent.Lifted (Chan, writeChan) +import Data.Data (Data) +import Data.IxSet (IxSet, Indexable (..), ixSet, ixFun) +import Data.SafeCopy (base, deriveSafeCopy) + +import Network.IRC.Handlers.NickTracker.Types +import Network.IRC.Types + +newtype TellId = TellId Int deriving (Eq, Ord, Show, Data, Typeable, Num) +data TellStatus = NewTell | DeliveredTell deriving (Eq, Ord, Show, Data, Typeable) + +data Tell = Tell { + tellId :: !TellId, + tellFromNick :: !Nick, + tellToNick :: !CanonicalNick, + tellTopic :: !(Maybe Text), + tellStatus :: !TellStatus, + tellCreatedOn :: !UTCTime, + tellDeliveredOn :: !(Maybe UTCTime), + tellContent :: !Text +} deriving (Eq, Ord, Show, Data, Typeable) + +instance Indexable Tell where + empty = ixSet [ ixFun $ (: []) . tellId + , ixFun $ (: []) . tellToNick + , ixFun $ (: []) . tellStatus ] + +data Tells = Tells { nextTellId :: TellId, tells :: IxSet Tell } + deriving (Eq, Ord, Show, Data, Typeable) + +$(deriveSafeCopy 0 'base ''TellId) +$(deriveSafeCopy 0 'base ''TellStatus) +$(deriveSafeCopy 0 'base ''Tell) +$(deriveSafeCopy 0 'base ''Tells) + +emptyTells :: Tells +emptyTells = Tells (TellId 1) empty + +data TellRequest = TellRequest User Text deriving (Eq, Typeable) + +instance Event TellRequest + +instance Show TellRequest where + show (TellRequest user tell) = + "TellRequest[" ++ unpack (nickToText (userNick user) ++ ": " ++ tell) ++ "]" + +sendTell :: Chan SomeEvent -> User -> Text -> IO () +sendTell eventChan user tell = toEvent (TellRequest user tell) >>= writeChan eventChan diff --git a/hask-irc-handlers/Network/IRC/Handlers/Tell/Types.hs b/hask-irc-handlers/Network/IRC/Handlers/Tell/Types.hs index 48ac2e5..8a83e77 100644 --- a/hask-irc-handlers/Network/IRC/Handlers/Tell/Types.hs +++ b/hask-irc-handlers/Network/IRC/Handlers/Tell/Types.hs @@ -1,54 +1,9 @@ -{-# LANGUAGE DeriveDataTypeable #-} -{-# LANGUAGE TemplateHaskell #-} +module Network.IRC.Handlers.Tell.Types + ( + TellId (..) + , TellStatus (..) + , Tell (..) + , sendTell + ) where -module Network.IRC.Handlers.Tell.Types where - -import ClassyPrelude -import Control.Concurrent.Lifted (Chan, writeChan) -import Data.Data (Data) -import Data.IxSet (IxSet, Indexable (..), ixSet, ixFun) -import Data.SafeCopy (base, deriveSafeCopy) - -import Network.IRC.Handlers.NickTracker.Types -import Network.IRC.Types - -newtype TellId = TellId Int deriving (Eq, Ord, Show, Data, Typeable, Num) -data TellStatus = NewTell | DeliveredTell deriving (Eq, Ord, Show, Data, Typeable) - -data Tell = Tell { - tellId :: !TellId, - tellFromNick :: !Nick, - tellToNick :: !CanonicalNick, - tellTopic :: !(Maybe Text), - tellStatus :: !TellStatus, - tellCreatedOn :: !UTCTime, - tellDeliveredOn :: !(Maybe UTCTime), - tellContent :: !Text -} deriving (Eq, Ord, Show, Data, Typeable) - -instance Indexable Tell where - empty = ixSet [ ixFun $ (: []) . tellId - , ixFun $ (: []) . tellToNick - , ixFun $ (: []) . tellStatus ] - -data Tells = Tells { nextTellId :: TellId, tells :: IxSet Tell } - deriving (Eq, Ord, Show, Data, Typeable) - -$(deriveSafeCopy 0 'base ''TellId) -$(deriveSafeCopy 0 'base ''TellStatus) -$(deriveSafeCopy 0 'base ''Tell) -$(deriveSafeCopy 0 'base ''Tells) - -emptyTells :: Tells -emptyTells = Tells (TellId 1) empty - -data TellRequest = TellRequest User Text deriving (Eq, Typeable) - -instance Event TellRequest - -instance Show TellRequest where - show (TellRequest user tell) = - "TellRequest[" ++ unpack (nickToText (userNick user) ++ ": " ++ tell) ++ "]" - -sendTell :: Chan SomeEvent -> User -> Text -> IO () -sendTell eventChan user tell = toEvent (TellRequest user tell) >>= writeChan eventChan +import Network.IRC.Handlers.Tell.Internal.Types diff --git a/hask-irc-handlers/hask-irc-handlers.cabal b/hask-irc-handlers/hask-irc-handlers.cabal index 74d3941..91e357c 100644 --- a/hask-irc-handlers/hask-irc-handlers.cabal +++ b/hask-irc-handlers/hask-irc-handlers.cabal @@ -86,6 +86,9 @@ library Network.IRC.Handlers.Tell, Network.IRC.Handlers.Tell.Types + other-modules: Network.IRC.Handlers.NickTracker.Internal.Types, + Network.IRC.Handlers.Tell.Internal.Types + default-language: Haskell2010 ghc-options: -Wall -fno-warn-unused-do-bind -O2 -funbox-strict-fields -fno-warn-orphans