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