hask-irc/Network/IRC/Handlers.hs

49 lines
1.7 KiB
Haskell
Raw Normal View History

{-# LANGUAGE RecordWildCards, OverloadedStrings, NoImplicitPrelude, FlexibleContexts #-}
2014-05-04 02:57:43 +05:30
module Network.IRC.Handlers (coreMsgHandlerNames, getMsgHandler) where
2014-05-11 22:41:10 +05:30
import qualified Network.IRC.Handlers.MessageLogger as L
import qualified Network.IRC.Handlers.SongSearch as SS
2014-05-04 02:57:43 +05:30
2014-05-10 21:45:16 +05:30
import ClassyPrelude
import Control.Monad.Reader
2014-05-10 21:45:16 +05:30
import Data.Text (strip)
2014-05-04 02:57:43 +05:30
import Network.IRC.Types
2014-05-07 14:35:25 +05:30
clean :: Text -> Text
2014-05-10 21:45:16 +05:30
clean = toLower . strip
2014-05-04 07:43:37 +05:30
coreMsgHandlerNames :: [Text]
coreMsgHandlerNames = ["pingpong", "messagelogger"]
getMsgHandler :: MsgHandlerName -> Maybe MsgHandler
getMsgHandler "greeter" = Just $ newMsgHandler { msgHandlerRun = greeter }
getMsgHandler "welcomer" = Just $ newMsgHandler { msgHandlerRun = welcomer }
2014-05-11 22:41:10 +05:30
getMsgHandler "pingpong" = Just $ newMsgHandler { msgHandlerRun = pingPong }
getMsgHandler name = listToMaybe $ mapMaybe (\f -> f name)
2014-05-11 22:41:10 +05:30
[L.getMsgHandler, SS.getMsgHandler]
2014-05-04 02:57:43 +05:30
2014-05-11 22:41:10 +05:30
pingPong :: MonadMsgHandler m => Message -> m (Maybe Command)
pingPong Ping { .. } = return . Just $ Pong msg
pingPong _ = return Nothing
greeter :: MonadMsgHandler m => Message -> m (Maybe Command)
greeter ChannelMsg { .. } = case find (== clean msg) greetings of
2014-05-04 04:28:44 +05:30
Nothing -> return Nothing
Just greeting -> return . Just . ChannelMsgReply $ greeting ++ " " ++ userNick user
2014-05-04 02:57:43 +05:30
where
greetings = ["hi", "hello", "hey", "sup", "bye"
, "good morning", "good evening", "good night"
, "ohayo", "oyasumi"]
greeter _ = return Nothing
welcomer :: MonadMsgHandler m => Message -> m (Maybe Command)
welcomer JoinMsg { .. } = do
BotConfig { .. } <- ask
if userNick user /= botNick
then return . Just . ChannelMsgReply $ "welcome back " ++ userNick user
else return Nothing
2014-05-04 02:57:43 +05:30
welcomer _ = return Nothing