summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2007-09-13 00:14:53 +0000
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2007-09-13 00:14:53 +0000
commit922c6a35bb34598da397d2a0078adc397e84a853 (patch)
tree1cf50d155810dfc2bb48818e624137e0cd44884e
parent211ec431c1fe0cd5eba3a45b90c9267da3c125ae (diff)
more rdoc-ification
-rw-r--r--data/rbot/plugins/rss.rb18
-rw-r--r--lib/rbot/core/utils/utils.rb41
-rw-r--r--lib/rbot/irc.rb6
-rw-r--r--lib/rbot/ircbot.rb6
-rw-r--r--lib/rbot/rfc2812.rb975
-rw-r--r--lib/rbot/timer.rb68
6 files changed, 634 insertions, 480 deletions
diff --git a/data/rbot/plugins/rss.rb b/data/rbot/plugins/rss.rb
index 5a87e789..5e7eff21 100644
--- a/data/rbot/plugins/rss.rb
+++ b/data/rbot/plugins/rss.rb
@@ -283,15 +283,15 @@ class RSSFeedsPlugin < Plugin
# the restore to work.
#
# This is actually pretty safe for a number of reasons:
- # * the code is only called if standard marshalling fails
- # * the string we look for is quite unlikely to appear randomly
- # * if the string appears somewhere and the patched string isn't recoverable
- # either, we'll get another (unrecoverable) error, which makes the rss
- # plugin unsable, just like it was if no recovery was attempted
- # * if the string appears somewhere and the patched string is recoverable,
- # we may get a b0rked feed, which is eventually overwritten by a clean
- # one, so the worst thing that can happen is that a feed update spams
- # the watchers once
+ # * the code is only called if standard marshalling fails
+ # * the string we look for is quite unlikely to appear randomly
+ # * if the string appears somewhere and the patched string isn't recoverable
+ # either, we'll get another (unrecoverable) error, which makes the rss
+ # plugin unsable, just like it was if no recovery was attempted
+ # * if the string appears somewhere and the patched string is recoverable,
+ # we may get a b0rked feed, which is eventually overwritten by a clean
+ # one, so the worst thing that can happen is that a feed update spams
+ # the watchers once
@registry.recovery = Proc.new { |val|
patched = val.sub(":\v@mutexo:\nMutex", ":\v@mutexo:\vObject")
ret = Marshal.restore(patched)
diff --git a/lib/rbot/core/utils/utils.rb b/lib/rbot/core/utils/utils.rb
index a33f072f..a4f071a2 100644
--- a/lib/rbot/core/utils/utils.rb
+++ b/lib/rbot/core/utils/utils.rb
@@ -317,7 +317,7 @@ rescue LoadError
else
module ::Irc
module Utils
- # define some regular expressions to be used for first_html_par
+ # Define some regular expressions to be used by first_html_par
# H1, H2, etc
HX_REGEX = /<h(\d)(?:\s+[^>]*)?>(.*?)<\/h\1>/im
@@ -337,15 +337,17 @@ end
module ::Irc
- # miscellaneous useful functions
+ # Miscellaneous useful functions
module Utils
@@bot = nil unless defined? @@bot
@@safe_save_dir = nil unless defined?(@@safe_save_dir)
+ # The bot instance
def Utils.bot
@@bot
end
+ # Set up some Utils routines which depend on the associated bot.
def Utils.bot=(b)
debug "initializing utils"
@@bot = b
@@ -353,12 +355,18 @@ module ::Irc
end
+ # Seconds per minute
SEC_PER_MIN = 60
+ # Seconds per hour
SEC_PER_HR = SEC_PER_MIN * 60
+ # Seconds per day
SEC_PER_DAY = SEC_PER_HR * 24
+ # Seconds per (30-day) month
SEC_PER_MNTH = SEC_PER_DAY * 30
+ # Second per (30*12 = 360 day) year
SEC_PER_YR = SEC_PER_MNTH * 12
+ # Auxiliary method needed by Utils.secs_to_string
def Utils.secs_to_string_case(array, var, string, plural)
case var
when 1
@@ -368,8 +376,8 @@ module ::Irc
end
end
- # turn a number of seconds into a human readable string, e.g
- # 2 days, 3 hours, 18 minutes, 10 seconds
+ # Turn a number of seconds into a human readable string, e.g
+ # 2 days, 3 hours, 18 minutes and 10 seconds
def Utils.secs_to_string(secs)
ret = []
years, secs = secs.divmod SEC_PER_YR
@@ -395,9 +403,12 @@ module ::Irc
end
+ # Execute an external program, returning a String obtained by redirecting
+ # the program's standards errors and output
+ #
def Utils.safe_exec(command, *args)
- IO.popen("-") {|p|
- if(p)
+ IO.popen("-") { |p|
+ if p
return p.readlines.join("\n")
else
begin
@@ -414,6 +425,11 @@ module ::Irc
end
+ # Safely (atomically) save to _file_, by passing a tempfile to the block
+ # and then moving the tempfile to its final location when done.
+ #
+ # call-seq: Utils.safe_save(file, &block)
+ #
def Utils.safe_save(file)
raise 'No safe save directory defined!' if @@safe_save_dir.nil?
basename = File.basename(file)
@@ -425,6 +441,9 @@ module ::Irc
end
+ # Decode HTML entities in the String _str_, using HTMLEntities if the
+ # package was found, or UNESCAPE_TABLE otherwise.
+ #
def Utils.decode_html_entities(str)
if defined? ::HTMLEntities
return HTMLEntities.decode_entities(str)
@@ -447,9 +466,9 @@ module ::Irc
#
# It is possible to pass some options to determine how the stripping
# occurs. Currently supported options are
- # * :strip => Regex or String to strip at the beginning of the obtained
- # text
- # * :min_spaces => Minimum number of spaces a paragraph should have
+ # strip:: Regex or String to strip at the beginning of the obtained
+ # text
+ # min_spaces:: minimum number of spaces a paragraph should have
#
def Utils.ircify_first_html_par(xml_org, opts={})
if defined? ::Hpricot
@@ -459,7 +478,7 @@ module ::Irc
end
end
- # with hpricot
+ # HTML first par grabber using hpricot
def Utils.ircify_first_html_par_wh(xml_org, opts={})
doc = Hpricot(xml_org)
@@ -556,7 +575,7 @@ module ::Irc
end
end
- # without hpricot
+ # HTML first par grabber without hpricot
def Utils.ircify_first_html_par_woh(xml_org, opts={})
xml = xml_org.gsub(/<!--.*?-->/m, '').gsub(/<script(?:\s+[^>]*)?>.*?<\/script>/im, "").gsub(/<style(?:\s+[^>]*)?>.*?<\/style>/im, "")
diff --git a/lib/rbot/irc.rb b/lib/rbot/irc.rb
index 6a0bb2a2..371762cb 100644
--- a/lib/rbot/irc.rb
+++ b/lib/rbot/irc.rb
@@ -503,9 +503,9 @@ class Regexp
# Irc::User nicks and users and Irc::Channel names
#
# For each of them we define two versions of the regular expression:
- # * a generic one, which should match for any server but may turn out to
- # match more than a specific server would accept
- # * an RFC-compliant matcher
+ # * a generic one, which should match for any server but may turn out to
+ # match more than a specific server would accept
+ # * an RFC-compliant matcher
#
module Irc
diff --git a/lib/rbot/ircbot.rb b/lib/rbot/ircbot.rb
index ca40e0d6..3b42a3aa 100644
--- a/lib/rbot/ircbot.rb
+++ b/lib/rbot/ircbot.rb
@@ -338,9 +338,9 @@ class Bot
unless botclass and not botclass.empty?
# We want to find a sensible default.
- # * On POSIX systems we prefer ~/.rbot for the effective uid of the process
- # * On Windows (at least the NT versions) we want to put our stuff in the
- # Application Data folder.
+ # * On POSIX systems we prefer ~/.rbot for the effective uid of the process
+ # * On Windows (at least the NT versions) we want to put our stuff in the
+ # Application Data folder.
# We don't use any particular O/S detection magic, exploiting the fact that
# Etc.getpwuid is nil on Windows
if Etc.getpwuid(Process::Sys.geteuid)
diff --git a/lib/rbot/rfc2812.rb b/lib/rbot/rfc2812.rb
index 2d4d323b..9de781a8 100644
--- a/lib/rbot/rfc2812.rb
+++ b/lib/rbot/rfc2812.rb
@@ -1,35 +1,50 @@
+#-- 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 2821i (Internet Relay Chat: Client Protocol)
+
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
# <nick>!<user>@<host>"
- RPL_YOURHOST=002
+ #
+ RPL_WELCOME=001
+
# "Your host is <servername>, running version <ver>"
- RPL_CREATED=003
+ RPL_YOURHOST=002
+
# "This server was created <date>"
+ RPL_CREATED=003
+
+ # "<servername> <version> <available user modes> <available channel modes>"
RPL_MYINFO=004
- # "<servername> <version> <available user modes>
- # <available channel modes>"
+
+ # "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 <server name>, port <port number>"
- 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 <server name>, port <port number>"
+ #
+ # RPL_BOUNCE=005
+ #
+ RPL_ISUPPORT=005
+
# ":*1<reply> *( " " <reply> )"
#
# - 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 +53,158 @@ module Irc
# whether the client has set an AWAY message or not
# respectively.
#
- RPL_ISON=303
+ RPL_USERHOST=302
+
# ":*1<nick> *( " " <nick> )"
#
# - 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.
+
# "<nick> :<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.
+
# "<nick> <user> <host> * :<real name>"
- RPL_WHOISSERVER=312
+ RPL_WHOISUSER=311
+
# "<nick> <server> :<server info>"
- RPL_WHOISOPERATOR=313
+ RPL_WHOISSERVER=312
+
# "<nick> :is an IRC operator"
- RPL_WHOISIDLE=317
+ RPL_WHOISOPERATOR=313
+
# "<nick> <integer> :seconds idle"
- RPL_ENDOFWHOIS=318
+ RPL_WHOISIDLE=317
+
# "<nick> :End of WHOIS list"
- RPL_WHOISCHANNELS=319
+ RPL_ENDOFWHOIS=318
+
# "<nick> :*( ( "@" / "+" ) <channel> " " )"
- #
- # - 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).
+
# "<nick> <user> <host> * :<real name>"
- RPL_ENDOFWHOWAS=369
+ RPL_WHOWASUSER=314
+
# "<nick> :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
+
# "<channel> <# visible> :<topic>"
- 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
+
# "<channel> <nickname>"
- #
- RPL_CHANNELMODEIS=324
+ RPL_UNIQOPIS=325
+
# "<channel> <mode> <mode params>"
- #
- RPL_NOTOPIC=331
+ RPL_CHANNELMODEIS=324
+
# "<channel> :No topic is set"
- RPL_TOPIC=332
- # "<channel> :<topic>"
- #
+ 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.
+
+ # "<channel> :<topic>"
+ RPL_TOPIC=332
+
# <channel> <set by> <unixtime>
- RPL_INVITING=341
+ RPL_TOPIC_INFO=333
+
# "<channel> <nick>"
#
# - 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
+
# "<user> :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
+
# "<channel> <invitemask>"
- RPL_ENDOFINVITELIST=347
+ RPL_INVITELIST=346
+
# "<channel> :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
+
# "<channel> <exceptionmask>"
- RPL_ENDOFEXCEPTLIST=349
+ RPL_EXCEPTLIST=348
+
# "<channel> :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
+
# "<version>.<debuglevel> <server> :<comments>"
#
# - Reply by the server showing its version details.
+ #
# The <version> is the version of the software being
# used (including any patchlevel revisions) and the
# <debuglevel> is used to indicate if the server is
@@ -178,276 +213,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 <name> being
+ # the item.
+
# "<channel> <user> <host> <server> <nick>
# ( "H" / "G" > ["*"] [ ( "@" / "+" ) ]
# :<hopcount> <real name>"
#
- RPL_ENDOFWHO=315
+ RPL_WHOREPLY=352
+
# "<name> :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 <name> 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.
+
# "( "=" / "*" / "@" ) <channel>
# :[ "@" / "+" ] <nick> *( " " [ "@" / "+" ] <nick> )
# - "@" is used for secret channels, "*" for private
# channels, and "=" for others (public channels).
#
- RPL_ENDOFNAMES=366
+ RPL_NAMREPLY=353
+
# "<channel> :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.
+
# "<mask> <server> :<hopcount> <server info>"
- RPL_ENDOFLINKS=365
+ RPL_LINKS=364
+
# "<mask> :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.
+
# "<channel> <banmask>"
- RPL_ENDOFBANLIST=368
+ RPL_BANLIST=367
+
# "<channel> :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.
+
# ":<string>"
- 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
- # ":- <server> Message of the day - "
- RPL_MOTD=372
- # ":- <text>"
- 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
+
+ # ":- <server> Message of the day - "
+ RPL_MOTDSTART=375
+
+ # ":- <text>"
+ 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
+
# "<config file> :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 <servicename>"
#
# - Sent by the server to a service upon successful
- # registration.
+ # registration.
#
- RPL_TIME=391
+ RPL_YOURESERVICE=383
+
# "<server> :<string showing server's local time>"
#
# - 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
+
# ":<username> <ttyline> <hostname>"
- 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 <version & debug level> <destination>
# <next server> V<protocol version>
# <link uptime in seconds> <backstream sendq>
# <upstream sendq>"
- RPL_TRACECONNECTING=201
+ RPL_TRACELINK=200
+
# "Try. <class> <server>"
- RPL_TRACEHANDSHAKE=202
+ RPL_TRACECONNECTING=201
+
# "H.S. <class> <server>"
- RPL_TRACEUNKNOWN=203
+ RPL_TRACEHANDSHAKE=202
+
# "???? <class> [<client IP address in dot form>]"
- RPL_TRACEOPERATOR=204
+ RPL_TRACEUNKNOWN=203
+
# "Oper <class> <nick>"
- RPL_TRACEUSER=205
+ RPL_TRACEOPERATOR=204
+
# "User <class> <nick>"
- RPL_TRACESERVER=206
+ RPL_TRACEUSER=205
+
# "Serv <class> <int>S <int>C <server>
# <nick!user|*!*>@<host|server> V<protocol version>"
- RPL_TRACESERVICE=207
+ RPL_TRACESERVER=206
+
# "Service <class> <name> <type> <active type>"
- RPL_TRACENEWTYPE=208
+ RPL_TRACESERVICE=207
+
# "<newtype> 0 <client name>"
- RPL_TRACECLASS=209
+ RPL_TRACENEWTYPE=208
+
# "Class <class> <count>"
- RPL_TRACERECONNECT=210
+ RPL_TRACECLASS=209
+
# Unused.
- RPL_TRACELOG=261
+ RPL_TRACERECONNECT=210
+
# "File <logfile> <debug level>"
- RPL_TRACEEND=262
+ RPL_TRACELOG=261
+
# "<server name> <version & debug level> :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
+
# "<linkname> <sendq> <sent messages>
# <sent Kbytes> <received messages>
# <received Kbytes> <time open>"
#
# - reports statistics on a connection. <linkname>
- # identifies the particular connection, <sendq> is
- # the amount of data that is queued and waiting to be
- # sent <sent messages> the number of messages sent,
- # and <sent Kbytes> the amount of data sent, in
- # Kbytes. <received messages> and <received Kbytes>
- # are the equivalent of <sent messages> and <sent
- # Kbytes> for received data, respectively. <time
- # open> indicates how long ago the connection was
- # opened, in seconds.
+ # identifies the particular connection, <sendq> is
+ # the amount of data that is queued and waiting to be
+ # sent <sent messages> the number of messages sent,
+ # and <sent Kbytes> the amount of data sent, in
+ # Kbytes. <received messages> and <received Kbytes>
+ # are the equivalent of <sent messages> and <sent
+ # Kbytes> for received data, respectively. <time
+ # open> indicates how long ago the connection was
+ # opened, in seconds.
#
- RPL_STATSCOMMANDS=212
+ RPL_STATSLINKINFO=211
+
# "<command> <count> <byte count> <remote count>"
#
# - reports statistics on commands usage.
#
- RPL_ENDOFSTATS=219
+ RPL_STATSCOMMANDS=212
+
# "<stats letter> :End of STATS report"
#
- RPL_STATSUPTIME=242
+ RPL_ENDOFSTATS=219
+
# ":Server Up %d days %d:%02d:%02d"
#
# - reports the server uptime.
#
- RPL_STATSOLINE=243
+ RPL_STATSUPTIME=242
+
# "O <hostmask> * <name>"
#
# - reports the allowed hosts from where user may become IRC
- # operators.
+ # operators.
#
- RPL_UMODEIS=221
+ RPL_STATSOLINE=243
+
# "<user mode string>"
#
# - To answer a query about a client's own mode,
- # RPL_UMODEIS is sent back.
+ # RPL_UMODEIS is sent back.
#
- RPL_SERVLIST=234
+ RPL_UMODEIS=221
+
+ # - When listing services in reply to a SERVLIST message,
+ # a server is required to send the list back using the
+ # RPL_SERVLIST and RPL_SERVLISTEND messages. A separate
+ # RPL_SERVLIST is sent for each service. After the
+ # services have been listed (or if none present) a
+ # RPL_SERVLISTEND MUST be sent.
+
# "<name> <server> <mask> <type> <hopcount> <info>"
- #
- RPL_SERVLISTEND=235
+ RPL_SERVLIST=234
+
# "<mask> <type> :End of service listing"
- #
- # - When listing services in reply to a SERVLIST message,
- # a server is required to send the list back using the
- # RPL_SERVLIST and RPL_SERVLISTEND messages. A separate
- # RPL_SERVLIST is sent for each service. After the
- # services have been listed (or if none present) a
- # RPL_SERVLISTEND MUST be sent.
- #
- RPL_LUSERCLIENT=251
+ RPL_SERVLISTEND=235
+
+ # - In processing an LUSERS message, the server
+ # sends a set of replies from RPL_LUSERCLIENT,
+ # RPL_LUSEROP, RPL_USERUNKNOWN,
+ # RPL_LUSERCHANNELS and RPL_LUSERME. When
+ # replying, a server MUST send back
+ # RPL_LUSERCLIENT and RPL_LUSERME. The other
+ # replies are only sent back if a non-zero count
+ # is found for them.
+
# ":There are <integer> users and <integer>
# services on <integer> servers"
- RPL_LUSEROP=252
+ RPL_LUSERCLIENT=251
+
# "<integer> :operator(s) online"
- RPL_LUSERUNKNOWN=253
+ RPL_LUSEROP=252
+
# "<integer> :unknown connection(s)"
- RPL_LUSERCHANNELS=254
+ RPL_LUSERUNKNOWN=253
+
# "<integer> :channels formed"
+ RPL_LUSERCHANNELS=254
+
+ # ":I have <integer> clients and <integer> servers"
RPL_LUSERME=255
- # ":I have <integer> clients and <integer>
- # servers"
- #
- # - In processing an LUSERS message, the server
- # sends a set of replies from RPL_LUSERCLIENT,
- # RPL_LUSEROP, RPL_USERUNKNOWN,
- # RPL_LUSERCHANNELS and RPL_LUSERME. When
- # replying, a server MUST send back
- # RPL_LUSERCLIENT and RPL_LUSERME. The other
- # replies are only sent back if a non-zero count
- # is found for them.
- #
- RPL_ADMINME=256
- # "<server> :Administrative info"
- RPL_ADMINLOC1=257
- # ":<admin info>"
- RPL_ADMINLOC2=258
- # ":<admin info>"
- RPL_ADMINEMAIL=259
- # ":<admin info>"
- #
+
# - When replying to an ADMIN message, a server
# is expected to use replies RPL_ADMINME
# through to RPL_ADMINEMAIL and provide a text
@@ -458,323 +524,385 @@ module Irc
# and finally the administrative contact for the
# server (an email address here is REQUIRED)
# in RPL_ADMINEMAIL.
- #
- RPL_TRYAGAIN=263
+
+ # "<server> :Administrative info"
+ RPL_ADMINME=256
+
+ # ":<admin info>"
+ RPL_ADMINLOC1=257
+
+ # ":<admin info>"
+ RPL_ADMINLOC2=258
+
+ # ":<admin info>"
+ RPL_ADMINEMAIL=259
+
# "<command> :Please wait a while and try again."
#
# - When a server drops a command without processing it,
- # it MUST use the reply RPL_TRYAGAIN to inform the
- # originating client.
- #
+ # it MUST use the reply RPL_TRYAGAIN to inform the
+ # originating client.
+ RPL_TRYAGAIN=263
+
# 5.2 Error Replies
#
# Error replies are found in the range from 400 to 599.
- #
- ERR_NOSUCHNICK=401
+
# "<nickname> :No such nick/channel"
#
# - Used to indicate the nickname parameter supplied to a
- # command is currently unused.
+ # command is currently unused.
#
- ERR_NOSUCHSERVER=402
+ ERR_NOSUCHNICK=401
+
# "<server name> :No such server"
#
# - Used to indicate the server name given currently
- # does not exist.
+ # does not exist.
#
- ERR_NOSUCHCHANNEL=403
+ ERR_NOSUCHSERVER=402
+
# "<channel name> :No such channel"
#
# - Used to indicate the given channel name is invalid.
#
- ERR_CANNOTSENDTOCHAN=404
+ ERR_NOSUCHCHANNEL=403
+
# "<channel name> :Cannot send to channel"
#
# - Sent to a user who is either (a) not on a channel
- # which is mode +n or (b) not a chanop (or mode +v) on
- # a channel which has mode +m set or where the user is
- # banned and is trying to send a PRIVMSG message to
- # that channel.
+ # which is mode +n or (b) not a chanop (or mode +v) on
+ # a channel which has mode +m set or where the user is
+ # banned and is trying to send a PRIVMSG message to
+ # that channel.
#
- ERR_TOOMANYCHANNELS=405
+ ERR_CANNOTSENDTOCHAN=404
+
# "<channel name> :You have joined too many channels"
#
# - Sent to a user when they have joined the maximum
- # number of allowed channels and they try to join
- # another channel.
+ # number of allowed channels and they try to join
+ # another channel.
#
- ERR_WASNOSUCHNICK=406
+ ERR_TOOMANYCHANNELS=405
+
# "<nickname> :There was no such nickname"
#
# - Returned by WHOWAS to indicate there is no history
- # information for that nickname.
+ # information for that nickname.
#
- ERR_TOOMANYTARGETS=407
+ ERR_WASNOSUCHNICK=406
+
# "<target> :<error code> recipients. <abort message>"
#
# - Returned to a client which is attempting to send a
- # PRIVMSG/NOTICE using the user@host destination format
- # and for a user@host which has several occurrences.
+ # PRIVMSG/NOTICE using the user@host destination format
+ # and for a user@host which has several occurrences.
#
# - Returned to a client which trying to send a
- # PRIVMSG/NOTICE to too many recipients.
+ # PRIVMSG/NOTICE to too many recipients.
#
# - Returned to a client which is attempting to JOIN a safe
- # channel using the shortname when there are more than one
- # such channel.
+ # channel using the shortname when there are more than one
+ # such channel.
#
- ERR_NOSUCHSERVICE=408
+ ERR_TOOMANYTARGETS=407
+
# "<service name> :No such service"
#
# - Returned to a client which is attempting to send a SQUERY
- # to a service which does not exist.
+ # to a service which does not exist.
#
- ERR_NOORIGIN=409
+ ERR_NOSUCHSERVICE=408
+
# ":No origin specified"
#
# - PING or PONG message missing the originator parameter.
#
- ERR_NORECIPIENT=411
+ ERR_NOORIGIN=409
+
# ":No recipient given (<command>)"
- ERR_NOTEXTTOSEND=412
+ ERR_NORECIPIENT=411
+
+ # - 412 - 415 are returned by PRIVMSG to indicate that
+ # the message wasn't delivered for some reason.
+ # ERR_NOTOPLEVEL and ERR_WILDTOPLEVEL are errors that
+ # are returned when an invalid use of
+ # "PRIVMSG $<server>" or "PRIVMSG #<host>" is attempted.
+
# ":No text to send"
- ERR_NOTOPLEVEL=413
+ ERR_NOTEXTTOSEND=412
+
# "<mask> :No toplevel domain specified"
- ERR_WILDTOPLEVEL=414
+ ERR_NOTOPLEVEL=413
+
# "<mask> :Wildcard in toplevel domain"
- ERR_BADMASK=415
+ ERR_WILDTOPLEVEL=414
+
# "<mask> :Bad Server/host mask"
- #
- # - 412 - 415 are returned by PRIVMSG to indicate that
- # the message wasn't delivered for some reason.
- # ERR_NOTOPLEVEL and ERR_WILDTOPLEVEL are errors that
- # are returned when an invalid use of
- # "PRIVMSG $<server>" or "PRIVMSG #<host>" is attempted.
- #
- ERR_UNKNOWNCOMMAND=421
+ ERR_BADMASK=415
+
# "<command> :Unknown command"
#
# - Returned to a registered client to indicate that the
- # command sent is unknown by the server.
+ # command sent is unknown by the server.
#
- ERR_NOMOTD=422
+ ERR_UNKNOWNCOMMAND=421
+
# ":MOTD File is missing"
#
# - Server's MOTD file could not be opened by the server.
#
- ERR_NOADMININFO=423
+ ERR_NOMOTD=422
+
# "<server> :No administrative info available"
#
# - Returned by a server in response to an ADMIN message
- # when there is an error in finding the appropriate
- # information.
+ # when there is an error in finding the appropriate
+ # information.
#
- ERR_FILEERROR=424
+ ERR_NOADMININFO=423
+
# ":File error doing <file op> on <file>"
#
# - Generic error message used to report a failed file
- # operation during the processing of a message.
+ # operation during the processing of a message.
#
- ERR_NONICKNAMEGIVEN=431
+ ERR_FILEERROR=424
+
# ":No nickname given"
#
# - Returned when a nickname parameter expected for a
- # command and isn't found.
+ # command and isn't found.
#
- ERR_ERRONEUSNICKNAME=432
+ ERR_NONICKNAMEGIVEN=431
+
# "<nick> :Erroneous nickname"
#
# - Returned after receiving a NICK message which contains
- # characters which do not fall in the defined set. See
- # section 2.3.1 for details on valid nicknames.
+ # characters which do not fall in the defined set. See
+ # section 2.3.1 for details on valid nicknames.
#
- ERR_NICKNAMEINUSE=433
+ ERR_ERRONEUSNICKNAME=432
+
# "<nick> :Nickname is already in use"
#
# - Returned when a NICK message is processed that results
- # in an attempt to change to a currently existing
- # nickname.
+ # in an attempt to change to a currently existing
+ # nickname.
#
- ERR_NICKCOLLISION=436
+ ERR_NICKNAMEINUSE=433
+
# "<nick> :Nickname collision KILL from <user>@<host>"
#
# - Returned by a server to a client when it detects a
- # nickname collision (registered of a NICK that
- # already exists by another server).
+ # nickname collision (registered of a NICK that
+ # already exists by another server).
#
- ERR_UNAVAILRESOURCE=437
+ ERR_NICKCOLLISION=436
+
# "<nick/channel> :Nick/channel is temporarily unavailable"
#
# - Returned by a server to a user trying to join a channel
- # currently blocked by the channel delay mechanism.
+ # currently blocked by the channel delay mechanism.
#
# - Returned by a server to a user trying to change nickname
- # when the desired nickname is blocked by the nick delay
- # mechanism.
+ # when the desired nickname is blocked by the nick delay
+ # mechanism.
#
- ERR_USERNOTINCHANNEL=441
+ ERR_UNAVAILRESOURCE=437
+
# "<nick> <channel> :They aren't on that channel"
#
# - Returned by the server to indicate that the target
- # user of the command is not on the given channel.
+ # user of the command is not on the given channel.
#
- ERR_NOTONCHANNEL=442
+ ERR_USERNOTINCHANNEL=441
+
# "<channel> :You're not on that channel"
#
# - Returned by the server whenever a client tries to
- # perform a channel affecting command for which the
- # client isn't a member.
+ # perform a channel affecting command for which the
+ # client isn't a member.
#
- ERR_USERONCHANNEL=443
+ ERR_NOTONCHANNEL=442
+
# "<user> <channel> :is already on channel"
#
# - Returned when a client tries to invite a user to a
- # channel they are already on.
+ # channel they are already on.
#
- ERR_NOLOGIN=444
+ ERR_USERONCHANNEL=443
+
# "<user> :User not logged in"
#
# - Returned by the summon after a SUMMON command for a
- # user was unable to be performed since they were not
- # logged in.
- #
+ # user was unable to be performed since they were not
+ # logged in.
#
- ERR_SUMMONDISABLED=445
+ ERR_NOLOGIN=444
+
# ":SUMMON has been disabled"
#
# - Returned as a response to the SUMMON command. MUST be
- # returned by any server which doesn't implement it.
+ # returned by any server which doesn't implement it.
#
- ERR_USERSDISABLED=446
+ ERR_SUMMONDISABLED=445
+
# ":USERS has been disabled"
#
# - Returned as a response to the USERS command. MUST be
- # returned by any server which does not implement it.
+ # returned by any server which does not implement it.
#
- ERR_NOTREGISTERED=451
+ ERR_USERSDISABLED=446
+
# ":You have not registered"
#
# - Returned by the server to indicate that the client
- # MUST be registered before the server will allow it
- # to be parsed in detail.
+ # MUST be registered before the server will allow it
+ # to be parsed in detail.
#
- ERR_NEEDMOREPARAMS=461
+ ERR_NOTREGISTERED=451
+
# "<command> :Not enough parameters"
#
# - Returned by the server by numerous commands to
- # indicate to the client that it didn't supply enough
- # parameters.
+ # indicate to the client that it didn't supply enough
+ # parameters.
#
- ERR_ALREADYREGISTRED=462
+ ERR_NEEDMOREPARAMS=461
+
# ":Unauthorized command (already registered)"
#
# - Returned by the server to any link which tries to
- # change part of the registered details (such as
- # password or user details from second USER message).
+ # change part of the registered details (such as
+ # password or user details from second USER message).
#
- ERR_NOPERMFORHOST=463
+ ERR_ALREADYREGISTRED=462
+
# ":Your host isn't among the privileged"
#
# - Returned to a client which attempts to register with
- # a server which does not been setup to allow
- # connections from the host the attempted connection
- # is tried.
+ # a server which does not been setup to allow
+ # connections from the host the attempted connection
+ # is tried.
#
- ERR_PASSWDMISMATCH=464
+ ERR_NOPERMFORHOST=463
+
# ":Password incorrect"
#
# - Returned to indicate a failed attempt at registering
- # a connection for which a password was required and
- # was either not given or incorrect.
+ # a connection for which a password was required and
+ # was either not given or incorrect.
#
- ERR_YOUREBANNEDCREEP=465
+ ERR_PASSWDMISMATCH=464
+
# ":You are banned from this server"
#
# - Returned after an attempt to connect and register
- # yourself with a server which has been setup to
- # explicitly deny connections to you.
- #
- ERR_YOUWILLBEBANNED=466
+ # yourself with a server which has been setup to
+ # explicitly deny connections to you.
#
+ ERR_YOUREBANNEDCREEP=465
+
# - Sent by a server to a user to inform that access to the
- # server will soon be denied.
+ # server will soon be denied.
#
- ERR_KEYSET=467
+ ERR_YOUWILLBEBANNED=466
+
# "<channel> :Channel key already set"
- ERR_CHANNELISFULL=471
+ ERR_KEYSET=467
+
# "<channel> :Cannot join channel (+l)"
- ERR_UNKNOWNMODE=472
+ ERR_CHANNELISFULL=471
+
# "<char> :is unknown mode char to me for <channel>"
- ERR_INVITEONLYCHAN=473
+ ERR_UNKNOWNMODE=472
+
# "<channel> :Cannot join channel (+i)"
- ERR_BANNEDFROMCHAN=474
+ ERR_INVITEONLYCHAN=473
+
# "<channel> :Cannot join channel (+b)"
- ERR_BADCHANNELKEY=475
+ ERR_BANNEDFROMCHAN=474
+
# "<channel> :Cannot join channel (+k)"
- ERR_BADCHANMASK=476
+ ERR_BADCHANNELKEY=475
+
# "<channel> :Bad Channel Mask"
- ERR_NOCHANMODES=477
+ ERR_BADCHANMASK=476
+
# "<channel> :Channel doesn't support modes"
- ERR_BANLISTFULL=478
+ ERR_NOCHANMODES=477
+
# "<channel> <char> :Channel list is full"
#
- ERR_NOPRIVILEGES=481
+ ERR_BANLISTFULL=478
+
# ":Permission Denied- You're not an IRC operator"
#
# - Any command requiring operator privileges to operate
- # MUST return this error to indicate the attempt was
- # unsuccessful.
+ # MUST return this error to indicate the attempt was
+ # unsuccessful.
#
- ERR_CHANOPRIVSNEEDED=482
+ ERR_NOPRIVILEGES=481
+
# "<channel> :You're not channel operator"
#
# - Any command requiring 'chanop' privileges (such as
- # MODE messages) MUST return this error if the client
- # making the attempt is not a chanop on the specified
- # channel.
+ # MODE messages) MUST return this error if the client
+ # making the attempt is not a chanop on the specified
+ # channel.
#
#
- ERR_CANTKILLSERVER=483
+ ERR_CHANOPRIVSNEEDED=482
+
# ":You can't kill a server!"
#
# - Any attempts to use the KILL command on a server
- # are to be refused and this error returned directly
- # to the client.
+ # are to be refused and this error returned directly
+ # to the client.
#
- ERR_RESTRICTED=484
+ ERR_CANTKILLSERVER=483
+
# ":Your connection is restricted!"
#
# - Sent by the server to a user upon connection to indicate
- # the restricted nature of the connection (user mode "+r").
+ # the restricted nature of the connection (user mode "+r").
#
- ERR_UNIQOPPRIVSNEEDED=485
+ ERR_RESTRICTED=484
+
# ":You're not the original channel operator"
#
# - Any MODE requiring "channel creator" privileges MUST
- # return this error if the client making the attempt is not
- # a chanop on the specified channel.
+ # return this error if the client making the attempt is not
+ # a chanop on the specified channel.
#
- ERR_NOOPERHOST=491
+ ERR_UNIQOPPRIVSNEEDED=485
+
# ":No O-lines for your host"
#
# - If a client sends an OPER message and the server has
- # not been configured to allow connections from the
- # client's host as an operator, this error MUST be
- # returned.
+ # not been configured to allow connections from the
+ # client's host as an operator, this error MUST be
+ # returned.
#
- ERR_UMODEUNKNOWNFLAG=501
+ ERR_NOOPERHOST=491
+
# ":Unknown MODE flag"
#
# - Returned by the server to indicate that a MODE
- # message was sent with a nickname parameter and that
- # the a mode flag sent was not recognized.
+ # message was sent with a nickname parameter and that
+ # the a mode flag sent was not recognized.
#
- ERR_USERSDONTMATCH=502
+ ERR_UMODEUNKNOWNFLAG=501
+
# ":Cannot change mode for other users"
#
# - Error sent to any user trying to view or change the
- # user mode for a user other than themselves.
+ # user mode for a user other than themselves.
#
+ ERR_USERSDONTMATCH=502
+
# 5.3 Reserved numerics
#
# These numerics are not described above since they fall into one of
@@ -785,7 +913,8 @@ module Irc
# 2. reserved for future planned use;
#
# 3. in current use but are part of a non-generic 'feature' of
- # the current IRC server.
+ # the current IRC server.
+ #
RPL_SERVICEINFO=231
RPL_ENDOFSERVICES=232
RPL_SERVICE=233
@@ -811,14 +940,18 @@ module Irc
ERR_NOSERVICEHOST=492
RPL_DATASTR=290
- # implements RFC 2812 and prior IRC RFCs.
- # clients register handler proc{}s for different server events and Client
- # handles dispatch
+ # Implements RFC 2812 and prior IRC RFCs.
+ #
+ # Clients should register Proc{}s to handle the various server events, and
+ # the Client class will handle dispatch.
class Client
- attr_reader :server, :user
+ # the Server we're connected to
+ attr_reader :server
+ # the User representing us on that server
+ attr_reader :user
- # create a new Client instance
+ # Create a new Client instance
def initialize
@server = Server.new # The Server
@user = @server.user("") # The User representing the client on this Server
@@ -830,7 +963,7 @@ module Irc
@tmpusers = []
end
- # clear the server and reset the User
+ # Clear the server and reset the user
def reset
@server.clear
@user = @server.user("")
diff --git a/lib/rbot/timer.rb b/lib/rbot/timer.rb
index 10a6f318..8adb14d8 100644
--- a/lib/rbot/timer.rb
+++ b/lib/rbot/timer.rb
@@ -26,19 +26,19 @@ class Timer
# Time when the Action should be called next
attr_accessor :next
- # options are:
- # start:: Time when the Action should be run for the first time.
- # Repeatable Actions will be repeated after that, see
- # :period. One-time Actions will not (obviously)
- # Default: Time.now + :period
- # period:: How often repeatable Action should be run, in seconds.
- # Default: 1
- # blocked:: if true, Action starts as blocked (i.e. will stay dormant
- # until unblocked)
- # args:: Arguments to pass to the Action callback. Default: []
- # repeat:: Should the Action be called repeatedly? Default: false
- # code:: You can specify the Action body using &block, *or* using
- # this option.
+ # Options are:
+ # start:: Time when the Action should be run for the first time.
+ # Repeatable Actions will be repeated after that, see
+ # :period. One-time Actions will not (obviously)
+ # Default: Time.now + :period
+ # period:: How often repeatable Action should be run, in seconds.
+ # Default: 1
+ # blocked:: if true, Action starts as blocked (i.e. will stay dormant
+ # until unblocked)
+ # args:: Arguments to pass to the Action callback. Default: []
+ # repeat:: Should the Action be called repeatedly? Default: false
+ # code:: You can specify the Action body using &block, *or* using
+ # this option.
def initialize(options = {}, &block)
opts = {
@@ -129,11 +129,12 @@ class Timer
self.start
end
- # creates and installs a new Action, repeatable by default.
- # period:: Action period
- # opts:: options for Action#new, see there
- # block:: Action callback code
- # returns the id of the created Action
+ # Creates and installs a new Action, repeatable by default.
+ # _period_:: Action period
+ # _opts_:: options for Action#new, see there
+ # _block_:: Action callback code
+ #
+ # Returns the id of the created Action
def add(period, opts = {}, &block)
a = Action.new({:repeat => true, :period => period}.merge(opts), &block)
self.synchronize do
@@ -143,24 +144,25 @@ class Timer
return a.object_id
end
- # creates and installs a new Action, one-time by default.
- # period:: Action delay
- # opts:: options for Action#new, see there
- # block:: Action callback code
- # returns the id of the created Action
+ # Creates and installs a new Action, one-time by default.
+ # _period_:: Action delay
+ # _opts_:: options for Action#new, see there
+ # _block_:: Action callback code
+ #
+ # Returns the id of the created Action
def add_once(period, opts = {}, &block)
self.add(period, {:repeat => false}.merge(opts), &block)
end
# blocks an existing Action
- # aid:: Action id, obtained previously from add() or add_once()
+ # _aid_:: Action id, obtained previously from add() or add_once()
def block(aid)
debug "blocking #{aid}"
self.synchronize { self[aid].block }
end
# unblocks an existing blocked Action
- # aid:: Action id, obtained previously from add() or add_once()
+ # _aid_:: Action id, obtained previously from add() or add_once()
def unblock(aid)
debug "unblocking #{aid}"
self.synchronize do
@@ -170,7 +172,7 @@ class Timer
end
# removes an existing blocked Action
- # aid:: Action id, obtained previously from add() or add_once()
+ # _aid_:: Action id, obtained previously from add() or add_once()
def remove(aid)
self.synchronize do
@actions.delete(aid) # or raise "nonexistent action #{aid}"
@@ -180,9 +182,9 @@ class Timer
alias :delete :remove
# Provides for on-the-fly reconfiguration of Actions
- # aid:: Action id, obtained previously from add() or add_once()
- # opts:: see Action#new
- # block:: (optional) new Action callback code
+ # _aid_:: Action id, obtained previously from add() or add_once()
+ # _opts_:: see Action#new
+ # _block_:: (optional) new Action callback code
def configure(aid, opts = {}, &block)
self.synchronize do
self[aid].configure(opts, &block)
@@ -191,9 +193,9 @@ class Timer
end
# changes Action period
- # aid:: Action id
- # period:: new period
- # block:: (optional) new Action callback code
+ # _aid_:: Action id
+ # _period_:: new period
+ # _block_:: (optional) new Action callback code
def reschedule(aid, period, &block)
self.configure(aid, :period => period, &block)
end
@@ -244,7 +246,7 @@ class Timer
ensure
@current = nil
end
-
+
unless v
@actions.delete k
next