{-# 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 :: forall (m :: * -> *). BotMonad m => m () helloPart = forall (m :: * -> *) a. BotMonad m => ParsecT ByteString () m a -> m a parsecPart forall (m :: * -> *). BotMonad m => ParsecT ByteString () m () helloCommand helloCommand :: (BotMonad m) => ParsecT ByteString () m () helloCommand :: forall (m :: * -> *). BotMonad m => ParsecT ByteString () m () helloCommand = do forall (f :: * -> *) a. Functor f => f a -> f () void forall a b. (a -> b) -> a -> b $ forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a try forall a b. (a -> b) -> a -> b $ forall (m :: * -> *). BotMonad m => ParsecT ByteString () m () botPrefix forall (m :: * -> *) a b. Monad m => m a -> m b -> m b >> forall s (m :: * -> *) u. Stream s m Char => String -> ParsecT s u m String string String "hello" forall (m :: * -> *). BotMonad m => LogLevel -> ByteString -> m () logM LogLevel Debug ByteString "helloPart" ByteString target <- forall (m :: * -> *) a. MonadPlus m => Maybe a -> m a maybeZero forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< forall (m :: * -> *). BotMonad m => m (Maybe ByteString) replyTo forall (m :: * -> *). BotMonad m => LogLevel -> ByteString -> m () logM LogLevel Debug forall a b. (a -> b) -> a -> b $ ByteString "target: " forall a. Semigroup a => a -> a -> a <> ByteString target Maybe ByteString mNick <- forall (m :: * -> *). BotMonad m => m (Maybe ByteString) askSenderNickName let greetings :: [ByteString] greetings = [ByteString "Hello", ByteString "Howdy", ByteString "Greetings", ByteString "Word up"] Int n <- forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO forall a b. (a -> b) -> a -> b $ forall a (m :: * -> *). (Random a, MonadIO m) => (a, a) -> m a randomRIO (Int 0, forall (t :: * -> *) a. Foldable t => t a -> Int length [ByteString] greetings forall a. Num a => a -> a -> a - Int 1) let message :: ByteString message = [ByteString] greetingsforall a. [a] -> Int -> a !!Int n forall a. Semigroup a => a -> a -> a <> ByteString ", " forall a. Semigroup a => a -> a -> a <> (forall a. a -> Maybe a -> a fromMaybe ByteString "stranger" Maybe ByteString mNick) forall c (m :: * -> *). (ToMessage c, BotMonad m, Functor m) => c -> m () sendCommand (Maybe Prefix -> [ByteString] -> ByteString -> PrivMsg PrivMsg forall a. Maybe a Nothing [ByteString target] ByteString message) forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a <|> forall (m :: * -> *) a. Monad m => a -> m a return ()