ircbot 0.2.1 → 0.2.3
raw patch · 5 files changed
+47/−15 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Network.IRC.Bot.BotMonad: askSenderNickName :: BotMonad m => m (Maybe String)
+ Network.IRC.Bot.Part.Hello: helloCommand :: BotMonad m => String -> ParsecT String () m ()
+ Network.IRC.Bot.Part.Hello: helloPart :: BotMonad m => m ()
Files
- Network/IRC/Bot/BotMonad.hs +10/−1
- Network/IRC/Bot/Commands.hs +1/−1
- Network/IRC/Bot/Part/Dice.hs +10/−12
- Network/IRC/Bot/Part/Hello.hs +24/−0
- ircbot.cabal +2/−1
Network/IRC/Bot/BotMonad.hs view
@@ -5,6 +5,7 @@ , BotEnv(..) , runBotPartT , mapBotPartT+ , askSenderNickName ) where import Control.Applicative (Applicative, Alternative, (<$>))@@ -36,7 +37,7 @@ , outChan :: Chan Message , logFn :: Logger , botName :: String- , cmdPrefix :: String+ , cmdPrefix :: String } newtype BotPartT m a = BotPartT { unBotPartT :: ReaderT BotEnv m a }@@ -67,3 +68,11 @@ BotPartT $ do l <- logFn <$> ask liftIO $ l lvl msg whoami = BotPartT $ botName <$> ask++-- | get the nickname of the user who sent the message+askSenderNickName :: (BotMonad m) => m (Maybe String)+askSenderNickName =+ do msg <- askMessage+ case msg_prefix msg of+ (Just (NickName nick _ _)) -> return (Just nick)+ _ -> return Nothing
Network/IRC/Bot/Commands.hs view
@@ -32,7 +32,7 @@ data PrivMsg = PrivMsg { prefix :: (Maybe Prefix) - , receivers :: [String] + , receivers :: [String] , msg :: String } deriving (Eq, Read, Show)
Network/IRC/Bot/Part/Dice.hs view
@@ -1,23 +1,21 @@ module Network.IRC.Bot.Part.Dice where -import Control.Monad-import Control.Monad.Trans-import Network.IRC.Bot.Log-import Network.IRC.Bot.BotMonad-import Network.IRC.Bot.Commands-import Network.IRC.Bot.Parsec-import System.Random (randomRIO)-import Text.Parsec-import Text.Parsec.Error (errorMessages, messageString)-import qualified Text.Parsec.Error as P+import Control.Monad (replicateM)+import Control.Monad.Trans (liftIO)+import Network.IRC.Bot.Log (LogLevel(Debug))+import Network.IRC.Bot.BotMonad (BotMonad(..))+import Network.IRC.Bot.Commands (PrivMsg(..), sendCommand)+import Network.IRC.Bot.Parsec (botPrefix, nat, parsecPart)+import System.Random (randomRIO)+import Text.Parsec (ParsecT, (<|>), (<?>), char, skipMany1, space, string, try) dicePart :: (BotMonad m) => m () dicePart = parsecPart diceCommand diceCommand :: (BotMonad m) => String -> ParsecT String () m () diceCommand target =- do botPrefix- try $ string "dice"+ do try $ botPrefix >> string "dice"+ logM Debug "dicePart" (numDice, numSides, modifier) <- (do skipMany1 space nd <- nat <|> return 1
+ Network/IRC/Bot/Part/Hello.hs view
@@ -0,0 +1,24 @@+module Network.IRC.Bot.Part.Hello where++import Control.Monad.Trans (liftIO)+import Data.Maybe (fromMaybe)+import Network.IRC.Bot.Log (LogLevel(Debug))+import Network.IRC.Bot.BotMonad (BotMonad(..), askSenderNickName)+import Network.IRC.Bot.Commands (PrivMsg(..), 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) => String -> ParsecT String () m ()+helloCommand target =+ do try $ botPrefix >> string "hello"+ logM Debug "helloPart"+ mNick <- askSenderNickName+ let greetings = ["Hello", "Howdy", "Greetings", "Word up"]+ n <- liftIO $ randomRIO (0, length greetings - 1)+ let msg = greetings!!n ++ ", " ++ (fromMaybe "stranger" mNick)+ sendCommand (PrivMsg Nothing [target] msg)+ <|> return ()
ircbot.cabal view
@@ -1,5 +1,5 @@ Name: ircbot-Version: 0.2.1+Version: 0.2.3 Synopsis: A library for writing irc bots Homepage: http://patch-tag.com/r/stepcut/ircbot License: BSD3@@ -22,6 +22,7 @@ Network.IRC.Bot.Log Network.IRC.Bot.Part.Channels Network.IRC.Bot.Part.Dice+ Network.IRC.Bot.Part.Hello Network.IRC.Bot.Part.Ping Network.IRC.Bot.Part.NickUser Network.IRC.Bot.Parsec