Documentation
¶
Overview ¶
Package irc allows your application to speak the IRC protocol.
The Message and Prefix structs provide translation to and from raw IRC messages:
// Parse the IRC-encoded data and store the result in a new struct: message := irc.ParseMessage(raw) // Translate back to a raw IRC message string: raw = message.String()
Decoder and Encoder can be used to decode and encode messages in a stream:
// Create a decoder that reads from given io.Reader dec := irc.NewDecoder(reader) // Decode the next IRC message message, err := dec.Decode() // Create an encoder that writes to given io.Writer enc := irc.NewEncoder(writer) // Send a message to the writer. enc.Encode(message)
The Conn type combines an Encoder and Decoder for a duplex connection.
c, err := irc.Dial("irc.server.net:6667")
// Methods from both Encoder and Decoder are available
message, err := c.Decode()
Index ¶
Constants ¶
const ( Channel = '#' // Normal channel Distributed = '&' // Distributed channel Owner = '~' // Channel owner +q (non-standard) Admin = '&' // Channel admin +a (non-standard) Operator = '@' // Channel operator +o HalfOperator = '%' // Channel half operator +h (non-standard) Voice = '+' // User has voice +v )
Various prefixes extracted from RFC1459.
const ( PASS = "PASS" NICK = "NICK" USER = "USER" OPER = "OPER" MODE = "MODE" SERVICE = "SERVICE" QUIT = "QUIT" SQUIT = "SQUIT" JOIN = "JOIN" PART = "PART" TOPIC = "TOPIC" NAMES = "NAMES" LIST = "LIST" INVITE = "INVITE" KICK = "KICK" PRIVMSG = "PRIVMSG" NOTICE = "NOTICE" MOTD = "MOTD" LUSERS = "LUSERS" VERSION = "VERSION" STATS = "STATS" LINKS = "LINKS" TIME = "TIME" CONNECT = "CONNECT" TRACE = "TRACE" ADMIN = "ADMIN" INFO = "INFO" SERVLIST = "SERVLIST" SQUERY = "SQUERY" WHO = "WHO" WHOIS = "WHOIS" WHOWAS = "WHOWAS" KILL = "KILL" PING = "PING" PONG = "PONG" ERROR = "ERROR" AWAY = "AWAY" REHASH = "REHASH" DIE = "DIE" RESTART = "RESTART" SUMMON = "SUMMON" USERS = "USERS" WALLOPS = "WALLOPS" USERHOST = "USERHOST" ISON = "ISON" )
IRC commands extracted from RFC2812 section 3.
const ( RPL_WELCOME = "001" RPL_YOURHOST = "002" RPL_CREATED = "003" RPL_MYINFO = "004" RPL_BOUNCE = "005" RPL_USERHOST = "302" RPL_ISON = "303" RPL_AWAY = "301" RPL_UNAWAY = "305" RPL_NOWAWAY = "306" RPL_WHOISUSER = "311" RPL_WHOISSERVER = "312" RPL_WHOISOPERATOR = "313" RPL_WHOISIDLE = "317" RPL_ENDOFWHOIS = "318" RPL_WHOISCHANNELS = "319" RPL_WHOWASUSER = "314" RPL_ENDOFWHOWAS = "369" RPL_LISTSTART = "321" RPL_LIST = "322" RPL_LISTEND = "323" RPL_UNIQOPIS = "325" RPL_CHANNELMODEIS = "324" RPL_NOTOPIC = "331" RPL_TOPIC = "332" RPL_INVITING = "341" RPL_SUMMONING = "342" RPL_INVITELIST = "346" RPL_ENDOFINVITELIST = "347" RPL_EXCEPTLIST = "348" RPL_ENDOFEXCEPTLIST = "349" RPL_VERSION = "351" RPL_WHOREPLY = "352" RPL_ENDOFWHO = "315" RPL_NAMREPLY = "353" RPL_ENDOFNAMES = "366" RPL_LINKS = "364" RPL_ENDOFLINKS = "365" RPL_BANLIST = "367" RPL_ENDOFBANLIST = "368" RPL_INFO = "371" RPL_ENDOFINFO = "374" RPL_MOTDSTART = "375" RPL_MOTD = "372" RPL_ENDOFMOTD = "376" RPL_YOUREOPER = "381" RPL_REHASHING = "382" RPL_YOURESERVICE = "383" RPL_TIME = "391" RPL_USERSSTART = "392" RPL_USERS = "393" RPL_ENDOFUSERS = "394" RPL_NOUSERS = "395" RPL_TRACELINK = "200" RPL_TRACECONNECTING = "201" RPL_TRACEHANDSHAKE = "202" RPL_TRACEUNKNOWN = "203" RPL_TRACEOPERATOR = "204" RPL_TRACEUSER = "205" RPL_TRACESERVER = "206" RPL_TRACESERVICE = "207" RPL_TRACENEWTYPE = "208" RPL_TRACECLASS = "209" RPL_TRACERECONNECT = "210" RPL_TRACELOG = "261" RPL_TRACEEND = "262" RPL_STATSLINKINFO = "211" RPL_STATSCOMMANDS = "212" RPL_ENDOFSTATS = "219" RPL_STATSUPTIME = "242" RPL_STATSOLINE = "243" RPL_UMODEIS = "221" RPL_SERVLIST = "234" RPL_SERVLISTEND = "235" RPL_LUSERCLIENT = "251" RPL_LUSEROP = "252" RPL_LUSERUNKNOWN = "253" RPL_LUSERCHANNELS = "254" RPL_LUSERME = "255" RPL_ADMINME = "256" RPL_ADMINLOC1 = "257" RPL_ADMINLOC2 = "258" RPL_ADMINEMAIL = "259" RPL_TRYAGAIN = "263" ERR_NOSUCHNICK = "401" ERR_NOSUCHSERVER = "402" ERR_NOSUCHCHANNEL = "403" ERR_CANNOTSENDTOCHAN = "404" ERR_TOOMANYCHANNELS = "405" ERR_WASNOSUCHNICK = "406" ERR_TOOMANYTARGETS = "407" ERR_NOSUCHSERVICE = "408" ERR_NOORIGIN = "409" ERR_NORECIPIENT = "411" ERR_NOTEXTTOSEND = "412" ERR_NOTOPLEVEL = "413" ERR_WILDTOPLEVEL = "414" ERR_BADMASK = "415" ERR_UNKNOWNCOMMAND = "421" ERR_NOMOTD = "422" ERR_NOADMININFO = "423" ERR_FILEERROR = "424" ERR_NONICKNAMEGIVEN = "431" ERR_ERRONEUSNICKNAME = "432" ERR_NICKNAMEINUSE = "433" ERR_NICKCOLLISION = "436" ERR_UNAVAILRESOURCE = "437" ERR_USERNOTINCHANNEL = "441" ERR_NOTONCHANNEL = "442" ERR_USERONCHANNEL = "443" ERR_NOLOGIN = "444" ERR_SUMMONDISABLED = "445" ERR_USERSDISABLED = "446" ERR_NOTREGISTERED = "451" ERR_NEEDMOREPARAMS = "461" ERR_ALREADYREGISTRED = "462" ERR_NOPERMFORHOST = "463" ERR_PASSWDMISMATCH = "464" ERR_YOUREBANNEDCREEP = "465" ERR_YOUWILLBEBANNED = "466" ERR_KEYSET = "467" ERR_CHANNELISFULL = "471" ERR_UNKNOWNMODE = "472" ERR_INVITEONLYCHAN = "473" ERR_BANNEDFROMCHAN = "474" ERR_BADCHANNELKEY = "475" ERR_BADCHANMASK = "476" ERR_NOCHANMODES = "477" ERR_BANLISTFULL = "478" ERR_NOPRIVILEGES = "481" ERR_CHANOPRIVSNEEDED = "482" ERR_CANTKILLSERVER = "483" ERR_RESTRICTED = "484" ERR_UNIQOPPRIVSNEEDED = "485" ERR_NOOPERHOST = "491" ERR_UMODEUNKNOWNFLAG = "501" ERR_USERSDONTMATCH = "502" )
Numeric IRC replies extracted from RFC2812 section 5.
const ( CAP = "CAP" CAP_LS = "LS" // Subcommand (param) CAP_LIST = "LIST" // Subcommand (param) CAP_REQ = "REQ" // Subcommand (param) CAP_ACK = "ACK" // Subcommand (param) CAP_NAK = "NAK" // Subcommand (param) CAP_CLEAR = "CLEAR" // Subcommand (param) CAP_END = "END" // Subcommand (param) AUTHENTICATE = "AUTHENTICATE" )
IRC commands extracted from the IRCv3 spec at http://www.ircv3.org/.
const ( RPL_LOGGEDIN = "900" RPL_LOGGEDOUT = "901" RPL_NICKLOCKED = "902" RPL_SASLSUCCESS = "903" ERR_SASLFAIL = "904" ERR_SASLTOOLONG = "905" ERR_SASLABORTED = "906" ERR_SASLALREADY = "907" RPL_SASLMECHS = "908" )
Numeric IRC replies extracted from the IRCv3 spec.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Conn ¶
A Conn represents an IRC network protocol connection. It consists of an Encoder and Decoder to manage I/O.
func Dial ¶
Dial connects to the given address using net.Dial and then returns a new Conn for the connection.
func NewConn ¶
func NewConn(rwc io.ReadWriteCloser) *Conn
NewConn returns a new Conn using rwc for I/O.
type Decoder ¶
type Decoder struct {
// contains filtered or unexported fields
}
A Decoder reads Message objects from an input stream.
func NewDecoder ¶
NewDecoder returns a new Decoder that reads from r.
type Encoder ¶
type Encoder struct {
// contains filtered or unexported fields
}
An Encoder writes Message objects to an output stream.
func NewEncoder ¶
NewEncoder returns a new Encoder that writes to w.
func (*Encoder) Encode ¶
Encode writes the IRC encoding of m to the stream.
This method may be used from multiple goroutines.
Returns an non-nil error if the write to the underlying stream stopped early.
type Message ¶
Message represents an IRC protocol message. See RFC1459 section 2.3.1.
<message> ::= [':' <prefix> <SPACE> ] <command> <params> <crlf>
<prefix> ::= <servername> | <nick> [ '!' <user> ] [ '@' <host> ]
<command> ::= <letter> { <letter> } | <number> <number> <number>
<SPACE> ::= ' ' { ' ' }
<params> ::= <SPACE> [ ':' <trailing> | <middle> <params> ]
<middle> ::= <Any *non-empty* sequence of octets not including SPACE
or NUL or CR or LF, the first of which may not be ':'>
<trailing> ::= <Any, possibly *empty*, sequence of octets not including
NUL or CR or LF>
<crlf> ::= CR LF
func ParseMessage ¶
ParseMessage takes a string and attempts to create a Message struct. Returns nil if the Message is invalid.
func (*Message) Bytes ¶
Bytes returns a []byte representation of this message.
As noted in rfc2812 section 2.3, messages should not exceed 512 characters in length. This method forces that limit by discarding any characters exceeding the length limit.
type Prefix ¶
type Prefix struct {
Name string // Nick- or servername
User string // Username
Host string // Hostname
}
Prefix represents the prefix (sender) of an IRC message. See RFC1459 section 2.3.1.
<servername> | <nick> [ '!' <user> ] [ '@' <host> ]
func ParsePrefix ¶
ParsePrefix takes a string and attempts to create a Prefix struct.
func (*Prefix) IsHostmask ¶
IsHostmask returns true if this prefix looks like a user hostmask.
type Sender ¶
Objects implementing the Sender interface are able to send messages to an IRC server.
As there might be a message queue, it is possible that Send returns a nil error, but the message is not sent (yet). The error value is only used when it is certain that sending the message is impossible.
