irc-core- IRC core library for glirc

Copyright(c) Eric Mertens, 2016
Safe HaskellNone




This module provides a parser and printer for the low-level IRC message format. It handles splitting up IRC commands into the prefix, command, and arguments.


Low-level IRC messages

data RawIrcMsg Source #

RawIrcMsg breaks down the IRC protocol into its most basic parts. The "trailing" parameter indicated in the IRC protocol with a leading colon will appear as the last parameter in the parameter list.

Note that RFC 2812 specifies a maximum of 15 parameters.

This parser is permissive regarding spaces. It aims to parse carefully constructed messages exactly and to make a best effort to recover from extraneous spaces. It makes no effort to validate nicknames, usernames, hostnames, commands, etc. Servers don't all agree on these things.

:prefix COMMAND param0 param1 param2 .. paramN




data TagEntry Source #

Key value pair representing an IRCv3.2 message tag. The value in this pair has had the message tag unescape algorithm applied.


TagEntry !Text !Text 

rawIrcMsg Source #


:: Text


-> [Text]


-> RawIrcMsg 

Construct a new RawIrcMsg without a time or prefix.

msgTags :: Functor f => ([TagEntry] -> f [TagEntry]) -> RawIrcMsg -> f RawIrcMsg Source #

Lens for _msgTags

msgParams :: Functor f => ([Text] -> f [Text]) -> RawIrcMsg -> f RawIrcMsg Source #

Lens for _msgParams

Text format for IRC messages

parseRawIrcMsg :: Text -> Maybe RawIrcMsg Source #

Attempt to split an IRC protocol message without its trailing newline information into a structured message.

renderRawIrcMsg :: RawIrcMsg -> ByteString Source #

Serialize a structured IRC protocol message back into its wire format. This command adds the required trailing newline.

prefixParser :: Parser UserInfo Source #

Parse a rendered UserInfo token.

simpleTokenParser :: Parser Text Source #

Take the next space-delimited lexeme

Permissive text decoder

asUtf8 :: ByteString -> Text Source #

Try to decode a message as UTF-8. If that fails interpret it as Windows CP1252 This helps deal with clients like XChat that get clever and otherwise misconfigured clients.