irc-core-2.1.0.0: IRC core library for glirc

Copyright(c) Eric Mertens, 2016
LicenseISC
Maintaineremertens@gmail.com
Safe HaskellNone
LanguageHaskell2010

Irc.Message

Contents

Description

This module defines high-level IRC commands. Commands are interpreted and their arguments are extracted into the appropriate types.

Synopsis

High-level messages

data IrcMsg Source #

High-level IRC message representation

Constructors

UnknownMsg !RawIrcMsg

pass-through for unhandled messages

Reply !ReplyCode [Text]

code arguments

Nick !UserInfo !Identifier

old new

Join !UserInfo !Identifier

user channel

Part !UserInfo !Identifier (Maybe Text)

user channel reason

Quit !UserInfo (Maybe Text)

user reason

Kick !UserInfo !Identifier !Identifier !Text

kicker channel kickee comment

Topic !UserInfo !Identifier !Text

user channel topic

Privmsg !UserInfo !Identifier !Text

source target txt

Ctcp !UserInfo !Identifier !Text !Text

source target command txt

CtcpNotice !UserInfo !Identifier !Text !Text

source target command txt

Notice !UserInfo !Identifier !Text

source target txt

Mode !UserInfo !Identifier [Text]

source target txt

Authenticate !Text

parameters

Cap !CapCmd [Text]

command parameters

Ping [Text]

parameters

Pong [Text]

parameters

Error !Text

message

BatchStart Text Text [Text]

reference-id type parameters

BatchEnd Text

reference-id

Instances

data CapCmd Source #

Sub-commands of the CAP command

Constructors

CapLs

request list of supported caps

CapList

request list of active caps

CapReq

request activation of cap

CapAck

request accepted

CapNak

request denied

CapEnd

end negotiation

cookIrcMsg :: RawIrcMsg -> IrcMsg Source #

Interpret a low-level RawIrcMsg as a high-level IrcMsg. Messages that can't be understood are wrapped in UnknownMsg.

Properties of messages

data MessageTarget Source #

Targets used to direct a message to a window for display

Constructors

TargetUser !Identifier

Metadata update for a user

TargetWindow !Identifier

Directed message to channel or from user

TargetNetwork

Network-level message

TargetHidden

Completely hidden message

ircMsgText :: IrcMsg -> Text Source #

Text representation of an IRC message to be used for matching with regular expressions.

msgTarget :: Identifier -> IrcMsg -> MessageTarget Source #

Target information for the window that could be appropriate to display this message in.

msgActor :: IrcMsg -> Maybe UserInfo Source #

UserInfo of the user responsible for a message.

Helper functions

nickSplit :: Text -> [Text] Source #

Split a nick into text parts group by whether or not those parts are valid nickname characters.

computeMaxMessageLength :: UserInfo -> Text -> Int Source #

Maximum length computation for the message part for privmsg and notice. Note that the need for the limit is because the server will limit the length of the message sent out to each client, not just the length of the messages it will recieve.

Note that the length is on the *encoded message* which is UTF-8 The calculation isn't using UTF-8 on the userinfo part because I'm assuming that the channel name and userinfo are all ASCII

:my!user@info PRIVMSG #channel :messagebodyrn