X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=lib%2Frbot%2Frfc2812.rb;h=0839d1d52593db514d4458a92c19b57c4c6c7b1a;hb=6cf365c49ce5fbe24c0a4ff0663550390b501fea;hp=4a095dc8dac0b0dc0bfb95d812f702b53fedfd5a;hpb=edd1cf77be07ae507014574141e920ad23eb164d;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/lib/rbot/rfc2812.rb b/lib/rbot/rfc2812.rb index 4a095dc8..0839d1d5 100644 --- a/lib/rbot/rfc2812.rb +++ b/lib/rbot/rfc2812.rb @@ -1,35 +1,53 @@ +#-- vim:sw=2:et +#++ +# +# :title: RFC 2821 Client Protocol module +# +# This module defines the Irc::Client class, a class that can handle and +# dispatch messages based on RFC 2821 (Internet Relay Chat: Client Protocol) + +class ServerMessageParseError < ServerError +end + module Irc - # RFC 2812 Internet Relay Chat: Client Protocol - # - RPL_WELCOME=001 + # - The server sends Replies 001 to 004 to a user upon + # successful registration. + # "Welcome to the Internet Relay Network # !@" - RPL_YOURHOST=002 + # + RPL_WELCOME=001 + # "Your host is , running version " - RPL_CREATED=003 + RPL_YOURHOST=002 + # "This server was created " + RPL_CREATED=003 + + # " " RPL_MYINFO=004 - # " - # " + + # "005 nick PREFIX=(ov)@+ CHANTYPES=#& :are supported by this server" # - # - The server sends Replies 001 to 004 to a user upon - # successful registration. + # defines the capabilities supported by the server. # - # RPL_BOUNCE=005 - # # "Try server , port " - RPL_ISUPPORT=005 - # "005 nick PREFIX=(ov)@+ CHANTYPES=#& :are supported by this server" + # Previous RFCs defined message 005 as follows: # # - Sent by the server to a user to suggest an alternative - # server. This is often used when the connection is - # refused because the server is already full. + # server. This is often used when the connection is + # refused because the server is already full. # - RPL_USERHOST=302 + # # "Try server , port " + # + # RPL_BOUNCE=005 + # + RPL_ISUPPORT=005 + # ":*1 *( " " )" # # - Reply format used by USERHOST to list replies to - # the query list. The reply string is composed as - # follows: + # the query list. The reply string is composed as + # follows: # # reply = nickname [ "*" ] "=" ( "+" / "-" ) hostname # @@ -38,138 +56,164 @@ module Irc # whether the client has set an AWAY message or not # respectively. # - RPL_ISON=303 + RPL_USERHOST=302 + # ":*1 *( " " )" # # - Reply format used by ISON to list replies to the - # query list. + # query list. # - RPL_AWAY=301 + RPL_ISON=303 + + # - These replies are used with the AWAY command (if + # allowed). RPL_AWAY is sent to any client sending a + # PRIVMSG to a client which is away. RPL_AWAY is only + # sent by the server to which the client is connected. + # Replies RPL_UNAWAY and RPL_NOWAWAY are sent when the + # client removes and sets an AWAY message. + # " :" - RPL_UNAWAY=305 + RPL_AWAY=301 + # ":You are no longer marked as being away" - RPL_NOWAWAY=306 + RPL_UNAWAY=305 + # ":You have been marked as being away" - # - # - These replies are used with the AWAY command (if - # allowed). RPL_AWAY is sent to any client sending a - # PRIVMSG to a client which is away. RPL_AWAY is only - # sent by the server to which the client is connected. - # Replies RPL_UNAWAY and RPL_NOWAWAY are sent when the - # client removes and sets an AWAY message. - # - RPL_WHOISUSER=311 + RPL_NOWAWAY=306 + + # - Replies 311 - 313, 317 - 319 are all replies + # generated in response to a WHOIS message. Given that + # there are enough parameters present, the answering + # server MUST either formulate a reply out of the above + # numerics (if the query nick is found) or return an + # error reply. The '*' in RPL_WHOISUSER is there as + # the literal character and not as a wild card. For + # each reply set, only RPL_WHOISCHANNELS may appear + # more than once (for long lists of channel names). + # The '@' and '+' characters next to the channel name + # indicate whether a client is a channel operator or + # has been granted permission to speak on a moderated + # channel. The RPL_ENDOFWHOIS reply is used to mark + # the end of processing a WHOIS message. + # " * :" - RPL_WHOISSERVER=312 + RPL_WHOISUSER=311 + # " :" - RPL_WHOISOPERATOR=313 + RPL_WHOISSERVER=312 + # " :is an IRC operator" - RPL_WHOISIDLE=317 + RPL_WHOISOPERATOR=313 + # " :seconds idle" - RPL_ENDOFWHOIS=318 + RPL_WHOISIDLE=317 + # " :End of WHOIS list" - RPL_WHOISCHANNELS=319 + RPL_ENDOFWHOIS=318 + # " :*( ( "@" / "+" ) " " )" - # - # - Replies 311 - 313, 317 - 319 are all replies - # generated in response to a WHOIS message. Given that - # there are enough parameters present, the answering - # server MUST either formulate a reply out of the above - # numerics (if the query nick is found) or return an - # error reply. The '*' in RPL_WHOISUSER is there as - # the literal character and not as a wild card. For - # each reply set, only RPL_WHOISCHANNELS may appear - # more than once (for long lists of channel names). - # The '@' and '+' characters next to the channel name - # indicate whether a client is a channel operator or - # has been granted permission to speak on a moderated - # channel. The RPL_ENDOFWHOIS reply is used to mark - # the end of processing a WHOIS message. - # - RPL_WHOWASUSER=314 + RPL_WHOISCHANNELS=319 + + # - When replying to a WHOWAS message, a server MUST use + # the replies RPL_WHOWASUSER, RPL_WHOISSERVER or + # ERR_WASNOSUCHNICK for each nickname in the presented + # list. At the end of all reply batches, there MUST + # be RPL_ENDOFWHOWAS (even if there was only one reply + # and it was an error). + # " * :" - RPL_ENDOFWHOWAS=369 + RPL_WHOWASUSER=314 + # " :End of WHOWAS" - # - # - When replying to a WHOWAS message, a server MUST use - # the replies RPL_WHOWASUSER, RPL_WHOISSERVER or - # ERR_WASNOSUCHNICK for each nickname in the presented - # list. At the end of all reply batches, there MUST - # be RPL_ENDOFWHOWAS (even if there was only one reply - # and it was an error). - # - RPL_LISTSTART=321 + RPL_ENDOFWHOWAS=369 + + # - Replies RPL_LIST, RPL_LISTEND mark the actual replies + # with data and end of the server's response to a LIST + # command. If there are no channels available to return, + # only the end reply MUST be sent. + # Obsolete. Not used. - # - RPL_LIST=322 + RPL_LISTSTART=321 + # " <# visible> :" - RPL_LISTEND=323 + RPL_LIST=322 + # ":End of LIST" - # - # - Replies RPL_LIST, RPL_LISTEND mark the actual replies - # with data and end of the server's response to a LIST - # command. If there are no channels available to return, - # only the end reply MUST be sent. - # - RPL_UNIQOPIS=325 + RPL_LISTEND=323 + # " " - # - RPL_CHANNELMODEIS=324 + RPL_UNIQOPIS=325 + # " " - # - RPL_NOTOPIC=331 + RPL_CHANNELMODEIS=324 + + # " " + RPL_CREATIONTIME=329 + + # " " + RPL_CHANNEL_URL=328 + # " :No topic is set" - RPL_TOPIC=332 - # " :" - # + RPL_NOTOPIC=331 + # - When sending a TOPIC message to determine the - # channel topic, one of two replies is sent. If - # the topic is set, RPL_TOPIC is sent back else - # RPL_NOTOPIC. - # - RPL_TOPIC_INFO=333 + # channel topic, one of two replies is sent. If + # the topic is set, RPL_TOPIC is sent back else + # RPL_NOTOPIC. + + # " :" + RPL_TOPIC=332 + # - RPL_INVITING=341 + RPL_TOPIC_INFO=333 + # " " # # - Returned by the server to indicate that the - # attempted INVITE message was successful and is - # being passed onto the end client. + # attempted INVITE message was successful and is + # being passed onto the end client. # - RPL_SUMMONING=342 + RPL_INVITING=341 + # " :Summoning user to IRC" # # - Returned by a server answering a SUMMON message to - # indicate that it is summoning that user. + # indicate that it is summoning that user. # - RPL_INVITELIST=346 + RPL_SUMMONING=342 + # " " - RPL_ENDOFINVITELIST=347 + RPL_INVITELIST=346 + # " :End of channel invite list" # # - When listing the 'invitations masks' for a given channel, - # a server is required to send the list back using the - # RPL_INVITELIST and RPL_ENDOFINVITELIST messages. A - # separate RPL_INVITELIST is sent for each active mask. - # After the masks have been listed (or if none present) a - # RPL_ENDOFINVITELIST MUST be sent. + # a server is required to send the list back using the + # RPL_INVITELIST and RPL_ENDOFINVITELIST messages. A + # separate RPL_INVITELIST is sent for each active mask. + # After the masks have been listed (or if none present) a + # RPL_ENDOFINVITELIST MUST be sent. # - RPL_EXCEPTLIST=348 + RPL_ENDOFINVITELIST=347 + # " " - RPL_ENDOFEXCEPTLIST=349 + RPL_EXCEPTLIST=348 + # " :End of channel exception list" # # - When listing the 'exception masks' for a given channel, - # a server is required to send the list back using the - # RPL_EXCEPTLIST and RPL_ENDOFEXCEPTLIST messages. A - # separate RPL_EXCEPTLIST is sent for each active mask. - # After the masks have been listed (or if none present) - # a RPL_ENDOFEXCEPTLIST MUST be sent. + # a server is required to send the list back using the + # RPL_EXCEPTLIST and RPL_ENDOFEXCEPTLIST messages. A + # separate RPL_EXCEPTLIST is sent for each active mask. + # After the masks have been listed (or if none present) + # a RPL_ENDOFEXCEPTLIST MUST be sent. # - RPL_VERSION=351 + RPL_ENDOFEXCEPTLIST=349 + # ". :" # # - Reply by the server showing its version details. + # # The is the version of the software being # used (including any patchlevel revisions) and the # is used to indicate if the server is @@ -178,276 +222,307 @@ module Irc # The "comments" field may contain any comments about # the version or further version details. # - RPL_WHOREPLY=352 + RPL_VERSION=351 + + # - The RPL_WHOREPLY and RPL_ENDOFWHO pair are used + # to answer a WHO message. The RPL_WHOREPLY is only + # sent if there is an appropriate match to the WHO + # query. If there is a list of parameters supplied + # with a WHO message, a RPL_ENDOFWHO MUST be sent + # after processing each list item with being + # the item. + # " # ( "H" / "G" > ["*"] [ ( "@" / "+" ) ] # : " # - RPL_ENDOFWHO=315 + RPL_WHOREPLY=352 + # " :End of WHO list" - # - # - The RPL_WHOREPLY and RPL_ENDOFWHO pair are used - # to answer a WHO message. The RPL_WHOREPLY is only - # sent if there is an appropriate match to the WHO - # query. If there is a list of parameters supplied - # with a WHO message, a RPL_ENDOFWHO MUST be sent - # after processing each list item with being - # the item. - # - RPL_NAMREPLY=353 + RPL_ENDOFWHO=315 + + # - To reply to a NAMES message, a reply pair consisting + # of RPL_NAMREPLY and RPL_ENDOFNAMES is sent by the + # server back to the client. If there is no channel + # found as in the query, then only RPL_ENDOFNAMES is + # returned. The exception to this is when a NAMES + # message is sent with no parameters and all visible + # channels and contents are sent back in a series of + # RPL_NAMEREPLY messages with a RPL_ENDOFNAMES to mark + # the end. + # "( "=" / "*" / "@" ) # :[ "@" / "+" ] *( " " [ "@" / "+" ] ) # - "@" is used for secret channels, "*" for private # channels, and "=" for others (public channels). # - RPL_ENDOFNAMES=366 + RPL_NAMREPLY=353 + # " :End of NAMES list" - # - # - To reply to a NAMES message, a reply pair consisting - # of RPL_NAMREPLY and RPL_ENDOFNAMES is sent by the - # server back to the client. If there is no channel - # found as in the query, then only RPL_ENDOFNAMES is - # returned. The exception to this is when a NAMES - # message is sent with no parameters and all visible - # channels and contents are sent back in a series of - # RPL_NAMEREPLY messages with a RPL_ENDOFNAMES to mark - # the end. - # - RPL_LINKS=364 + RPL_ENDOFNAMES=366 + + # - In replying to the LINKS message, a server MUST send + # replies back using the RPL_LINKS numeric and mark the + # end of the list using an RPL_ENDOFLINKS reply. + # " : " - RPL_ENDOFLINKS=365 + RPL_LINKS=364 + # " :End of LINKS list" - # - # - In replying to the LINKS message, a server MUST send - # replies back using the RPL_LINKS numeric and mark the - # end of the list using an RPL_ENDOFLINKS reply. - # - RPL_BANLIST=367 + RPL_ENDOFLINKS=365 + + # - When listing the active 'bans' for a given channel, + # a server is required to send the list back using the + # RPL_BANLIST and RPL_ENDOFBANLIST messages. A separate + # RPL_BANLIST is sent for each active banmask. After the + # banmasks have been listed (or if none present) a + # RPL_ENDOFBANLIST MUST be sent. + # " " - RPL_ENDOFBANLIST=368 + RPL_BANLIST=367 + # " :End of channel ban list" - # - # - When listing the active 'bans' for a given channel, - # a server is required to send the list back using the - # RPL_BANLIST and RPL_ENDOFBANLIST messages. A separate - # RPL_BANLIST is sent for each active banmask. After the - # banmasks have been listed (or if none present) a - # RPL_ENDOFBANLIST MUST be sent. - # - RPL_INFO=371 + RPL_ENDOFBANLIST=368 + + # - A server responding to an INFO message is required to + # send all its 'info' in a series of RPL_INFO messages + # with a RPL_ENDOFINFO reply to indicate the end of the + # replies. + # ":" - RPL_ENDOFINFO=374 + RPL_INFO=371 + # ":End of INFO list" - # - # - A server responding to an INFO message is required to - # send all its 'info' in a series of RPL_INFO messages - # with a RPL_ENDOFINFO reply to indicate the end of the - # replies. - # - RPL_MOTDSTART=375 - # ":- Message of the day - " - RPL_MOTD=372 - # ":- " - RPL_ENDOFMOTD=376 - # ":End of MOTD command" - # + RPL_ENDOFINFO=374 + # - When responding to the MOTD message and the MOTD file # is found, the file is displayed line by line, with # each line no longer than 80 characters, using # RPL_MOTD format replies. These MUST be surrounded # by a RPL_MOTDSTART (before the RPL_MOTDs) and an # RPL_ENDOFMOTD (after). - # - RPL_YOUREOPER=381 + + # ":- Message of the day - " + RPL_MOTDSTART=375 + + # ":- " + RPL_MOTD=372 + + # ":End of MOTD command" + RPL_ENDOFMOTD=376 + # ":You are now an IRC operator" # # - RPL_YOUREOPER is sent back to a client which has - # just successfully issued an OPER message and gained - # operator status. + # just successfully issued an OPER message and gained + # operator status. # - RPL_REHASHING=382 + RPL_YOUREOPER=381 + # " :Rehashing" # # - If the REHASH option is used and an operator sends - # a REHASH message, an RPL_REHASHING is sent back to - # the operator. + # a REHASH message, an RPL_REHASHING is sent back to + # the operator. # - RPL_YOURESERVICE=383 + RPL_REHASHING=382 + # "You are service " # # - Sent by the server to a service upon successful - # registration. + # registration. # - RPL_TIME=391 + RPL_YOURESERVICE=383 + # " :" # # - When replying to the TIME message, a server MUST send - # the reply using the RPL_TIME format above. The string - # showing the time need only contain the correct day and - # time there. There is no further requirement for the - # time string. + # the reply using the RPL_TIME format above. The string + # showing the time need only contain the correct day and + # time there. There is no further requirement for the + # time string. # - RPL_USERSSTART=392 + RPL_TIME=391 + + # - If the USERS message is handled by a server, the + # replies RPL_USERSTART, RPL_USERS, RPL_ENDOFUSERS and + # RPL_NOUSERS are used. RPL_USERSSTART MUST be sent + # first, following by either a sequence of RPL_USERS + # or a single RPL_NOUSER. Following this is + # RPL_ENDOFUSERS. + # ":UserID Terminal Host" - RPL_USERS=393 + RPL_USERSSTART=392 + # ": " - RPL_ENDOFUSERS=394 + RPL_USERS=393 + # ":End of users" - RPL_NOUSERS=395 + RPL_ENDOFUSERS=394 + # ":Nobody logged in" + RPL_NOUSERS=395 + + # - The RPL_TRACE* are all returned by the server in + # response to the TRACE message. How many are + # returned is dependent on the TRACE message and + # whether it was sent by an operator or not. There + # is no predefined order for which occurs first. + # Replies RPL_TRACEUNKNOWN, RPL_TRACECONNECTING and + # RPL_TRACEHANDSHAKE are all used for connections + # which have not been fully established and are either + # unknown, still attempting to connect or in the + # process of completing the 'server handshake'. + # RPL_TRACELINK is sent by any server which handles + # a TRACE message and has to pass it on to another + # server. The list of RPL_TRACELINKs sent in + # response to a TRACE command traversing the IRC + # network should reflect the actual connectivity of + # the servers themselves along that path. # - # - If the USERS message is handled by a server, the - # replies RPL_USERSTART, RPL_USERS, RPL_ENDOFUSERS and - # RPL_NOUSERS are used. RPL_USERSSTART MUST be sent - # first, following by either a sequence of RPL_USERS - # or a single RPL_NOUSER. Following this is - # RPL_ENDOFUSERS. - # - RPL_TRACELINK=200 + # RPL_TRACENEWTYPE is to be used for any connection + # which does not fit in the other categories but is + # being displayed anyway. + # RPL_TRACEEND is sent to indicate the end of the list. + # "Link # V # # " - RPL_TRACECONNECTING=201 + RPL_TRACELINK=200 + # "Try. " - RPL_TRACEHANDSHAKE=202 + RPL_TRACECONNECTING=201 + # "H.S. " - RPL_TRACEUNKNOWN=203 + RPL_TRACEHANDSHAKE=202 + # "???? []" - RPL_TRACEOPERATOR=204 + RPL_TRACEUNKNOWN=203 + # "Oper " - RPL_TRACEUSER=205 + RPL_TRACEOPERATOR=204 + # "User " - RPL_TRACESERVER=206 + RPL_TRACEUSER=205 + # "Serv S C # @ V" - RPL_TRACESERVICE=207 + RPL_TRACESERVER=206 + # "Service " - RPL_TRACENEWTYPE=208 + RPL_TRACESERVICE=207 + # " 0 " - RPL_TRACECLASS=209 + RPL_TRACENEWTYPE=208 + # "Class " - RPL_TRACERECONNECT=210 + RPL_TRACECLASS=209 + # Unused. - RPL_TRACELOG=261 + RPL_TRACERECONNECT=210 + # "File " - RPL_TRACEEND=262 + RPL_TRACELOG=261 + # " :End of TRACE" - # - # - The RPL_TRACE* are all returned by the server in - # response to the TRACE message. How many are - # returned is dependent on the TRACE message and - # whether it was sent by an operator or not. There - # is no predefined order for which occurs first. - # Replies RPL_TRACEUNKNOWN, RPL_TRACECONNECTING and - # RPL_TRACEHANDSHAKE are all used for connections - # which have not been fully established and are either - # unknown, still attempting to connect or in the - # process of completing the 'server handshake'. - # RPL_TRACELINK is sent by any server which handles - # a TRACE message and has to pass it on to another - # server. The list of RPL_TRACELINKs sent in - # response to a TRACE command traversing the IRC - # network should reflect the actual connectivity of - # the servers themselves along that path. - # - # RPL_TRACENEWTYPE is to be used for any connection - # which does not fit in the other categories but is - # being displayed anyway. - # RPL_TRACEEND is sent to indicate the end of the list. - # - RPL_LOCALUSERS=265 + RPL_TRACEEND=262 + # ":Current local users: 3 Max: 4" - RPL_GLOBALUSERS=266 + RPL_LOCALUSERS=265 + # ":Current global users: 3 Max: 4" - RPL_STATSCONN=250 + RPL_GLOBALUSERS=266 + # "::Highest connection count: 4 (4 clients) (251 since server was # (re)started)" - RPL_STATSLINKINFO=211 + RPL_STATSCONN=250 + # " # #