packages feed

ircbot-0.6.6.2: Network/IRC/Bot/Part/Hello.hs

{-# LANGUAGE OverloadedStrings #-}
module Network.IRC.Bot.Part.Hello where

import Control.Monad            (void)
import Control.Monad.Trans      (liftIO)
import Data.Maybe               (fromMaybe)
import Data.ByteString          (ByteString)
import Network.IRC.Bot.Log      (LogLevel(Debug))
import Network.IRC.Bot.BotMonad (BotMonad(..), maybeZero)
import Network.IRC.Bot.Commands (PrivMsg(..),askSenderNickName, replyTo, sendCommand)
import Network.IRC.Bot.Parsec   (botPrefix, parsecPart)
import System.Random            (randomRIO)
import Text.Parsec              (ParsecT, (<|>), string, try)

helloPart :: (BotMonad m) => m ()
helloPart = parsecPart helloCommand

helloCommand :: (BotMonad m) => ParsecT ByteString () m ()
helloCommand =
    do void $ try $ botPrefix >> string "hello"
       logM Debug "helloPart"
       target <- maybeZero =<< replyTo
       logM Debug $ "target: " <> target
       mNick <- askSenderNickName
       let greetings = ["Hello", "Howdy", "Greetings", "Word up"]
       n <- liftIO $ randomRIO (0, length greetings - 1)
       let message = greetings!!n <> ", " <> (fromMaybe "stranger" mNick)
       sendCommand (PrivMsg Nothing [target] message)
    <|> return ()