xdcc-1.1.2: src/IRC/Types.hs
module IRC.Types
( Network
, Channel
, Nickname
, Password
, Hook(..)
, addHandler'
) where
import Control.Concurrent.STM (atomically)
import Control.Concurrent.STM.TVar (readTVar, writeTVar)
import Control.Monad.IO.Class (liftIO)
import Data.ByteString.Char8 (ByteString)
import Data.CaseInsensitive (CI)
import qualified Data.Text as T (Text)
import Network.IRC.Client (EventHandler, InstanceConfig (..),
StatefulIRC, instanceConfigTVar)
type Network = ByteString
type Channel = CI T.Text
type Nickname = T.Text
type Password = T.Text
data Hook s = Hook { onConnect :: StatefulIRC s ()
, events :: [EventHandler s]
, onDisconnect :: StatefulIRC s ()
}
-- TODO Remove when https://github.com/barrucadu/irc-client/pull/19 is merged.
-- | Add an event handler
addHandler' :: EventHandler s -> StatefulIRC s ()
addHandler' handler = do
tvarI <- instanceConfigTVar
liftIO . atomically $ do
iconf <- readTVar tvarI
writeTVar tvarI iconf { _eventHandlers = handler : _eventHandlers iconf }