module Network.FastIRC.Users
( UserSpec(..),
userParser )
where
import qualified Data.ByteString.Char8 as B
import Control.Applicative
import Control.Monad
import Data.Attoparsec.Char8 as P
import Network.FastIRC.ServerSet
import Network.FastIRC.Utils
data UserSpec
= Nick B.ByteString
| User B.ByteString B.ByteString B.ByteString
| Server B.ByteString
deriving (Eq, Read, Show)
userParser :: ServerSet -> Parser UserSpec
userParser servers =
try server <|> try full <|> nickOnly
where
server :: Parser UserSpec
server = do
srv <- P.takeWhile1 isIRCTokChar
guard $ srv `isServer` servers
return (Server srv)
full :: Parser UserSpec
full =
User <$> P.takeWhile1 isNickChar <* char '!'
<*> P.takeWhile1 isUserChar <* char '@'
<*> P.takeWhile1 isHostChar
nickOnly :: Parser UserSpec
nickOnly = Nick <$> P.takeWhile1 isNickChar