irc-core-2.12: IRC core library for glirc
Copyright(c) Eric Mertens 2016
LicenseISC
Maintaineremertens@gmail.com
Safe HaskellSafe-Inferred
LanguageHaskell2010

Irc.RawIrcMsg

Description

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.

Synopsis

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

Constructors

RawIrcMsg 

Fields

Instances

Instances details
Read RawIrcMsg Source # 
Instance details

Defined in Irc.RawIrcMsg

Show RawIrcMsg Source # 
Instance details

Defined in Irc.RawIrcMsg

Eq RawIrcMsg Source # 
Instance details

Defined in Irc.RawIrcMsg

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.

Constructors

TagEntry !Text !Text 

Instances

Instances details
Read TagEntry Source # 
Instance details

Defined in Irc.RawIrcMsg

Show TagEntry Source # 
Instance details

Defined in Irc.RawIrcMsg

Eq TagEntry Source # 
Instance details

Defined in Irc.RawIrcMsg

rawIrcMsg Source #

Arguments

:: Text

command

-> [Text]

parameters

-> 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.