module Network.IRC.Bot.Part.NickUser where import Control.Monad.Trans (liftIO) import Data.ByteString (ByteString) import Data.ByteString.Char8 (pack) import Network.IRC.Bot.BotMonad (BotMonad(..) ) import Network.IRC.Bot.Types (User(..)) import Network.IRC.Bot.ErrorCodes import Network.IRC.Bot.Log (LogLevel(..)) import Network.IRC (Message(..), showMessage) import qualified Network.IRC as IRC import System.Random (randomRIO) nickUserPart :: (BotMonad m) => m () nickUserPart :: forall (m :: * -> *). BotMonad m => m () nickUserPart = do Message msg <- forall (m :: * -> *). BotMonad m => m Message askMessage let cmd :: Command cmd = Message -> Command msg_command Message msg case () of () | Command cmd forall a. Eq a => a -> a -> Bool == Command noNicknameGiven -> forall (m :: * -> *). BotMonad m => LogLevel -> Command -> m () logM LogLevel Important (Message -> Command showMessage Message msg) | Command cmd forall a. Eq a => a -> a -> Bool == Command erroneusNickname -> forall (m :: * -> *). BotMonad m => LogLevel -> Command -> m () logM LogLevel Important (Message -> Command showMessage Message msg) | Command cmd forall a. Eq a => a -> a -> Bool == Command nickCollision -> forall (m :: * -> *). BotMonad m => LogLevel -> Command -> m () logM LogLevel Important (Message -> Command showMessage Message msg) | Command cmd forall a. Eq a => a -> a -> Bool == Command nicknameInUse -> do forall (m :: * -> *). BotMonad m => LogLevel -> Command -> m () logM LogLevel Important (Message -> Command showMessage Message msg) Command n <- forall (m :: * -> *). BotMonad m => m Command whoami Int i <- 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 1, Int 100 :: Int) forall (m :: * -> *). BotMonad m => Command -> Maybe User -> m () changeNickUser (Command n forall a. Semigroup a => a -> a -> a <> String -> Command pack (forall a. Show a => a -> String show Int i)) forall a. Maybe a Nothing | Bool otherwise -> forall (m :: * -> *) a. Monad m => a -> m a return () changeNickUser :: (BotMonad m) => ByteString -> Maybe User -> m () changeNickUser :: forall (m :: * -> *). BotMonad m => Command -> Maybe User -> m () changeNickUser Command n Maybe User mUser = do forall (m :: * -> *). BotMonad m => Message -> m () sendMessage (Command -> Message IRC.nick Command n) case Maybe User mUser of Maybe User Nothing -> forall (m :: * -> *) a. Monad m => a -> m a return () (Just User u) -> forall (m :: * -> *). BotMonad m => Message -> m () sendMessage (Command -> Command -> Command -> Command -> Message IRC.user (User -> Command username User u) (String -> Command pack forall a b. (a -> b) -> a -> b $ User -> String hostname User u) (String -> Command pack forall a b. (a -> b) -> a -> b $ User -> String servername User u) (User -> Command realname User u))