+2007-02-12 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Remote Service Provider: from an idea by halorgium <rbot@spork.in>,
+ initial steps towards a DRb-based remote service provider for rbot.
+ When complete, it will give plugins the ability to listen to
+ 'messages' from remote clients connected to the bot, allowing for such
+ things as svn notification without RSS polling, remote control of
+ the bot, or even (why not?) botnets.
+ * Remote Service Provider: BotModules can now include the
+ RemoteBotModule interface that provides them with the remote_map()
+ method that works just like the map() method, but for remote commands
+ * Remote Service Provider: Remote clients can now login remotely
+ before executing commands. This in fact integrates the remote access
+ auth security with the User/BotUser used on IRC itself.
+
+2007-02-08 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Languages: Japanese support with language files, salutations, larts
+ and praises, thanks to hagabaka (Yaohan Chen <yaohan.chen@gmail.com>)
+
+2007-02-05 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * sendmsg improvements: the bot sendmsg() method and all the methods
+ that rely on it (say(), notice(), and message methods such as reply())
+ now accept an option hash to customize its behaviour.
+ * :newlines, which can be set to either :split or :join,
+ depending on whether newlines in messages should be used as
+ split-points, or should be be replaced by some string (defined
+ in the :join_with option)
+ * :max_lines, which determines the maximum number of lines to be
+ sent by each messages. Last line is truncated (see next
+ options). Set to nil to have no limits.
+ * :overlong, which determines the behaviour when overlong lines
+ are to be sent; possible values are :split or :truncate.
+ * If :overlong is set to :split, :split_at determines the
+ string/regexp to split at; default is /\s+/, other usual
+ choice could be /\s+\|\s+/.
+ * If :overlong is set to :split, the :purge_split option
+ determines whether the :split_at expression should be removed
+ from the next lines (defaults to true).
+ * If :overlong is set to :truncate, the value of the option
+ :truncate_text is replaced at the end of the truncated line
+ * LinkBot plugin: initial commit of a plugin to handle messages from
+ eggdrops and other bots that act as cross-network channel links.
+ Suggested by hagabaka (Yaohan Chen <yaohan.chen@gmail.com>)
+
+
+2007-02-03 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Plugin message mapper: Enhancements to the :requirements option.
+ When the requirement of a parameter is a regular expression with
+ capturing groups /(...)/, the corresponding map parameters will be
+ assigned (by default) the first non-nil capture instead of the whole
+ regular expression. If a specific capture group is desired instead,
+ the requirement should be in the form
+ [/some regexp/, integer_index_of_the_desired_group]
+ or in the form
+ {
+ :regexp => /some regexp/,
+ :index => integer_index_of_the_desired_group
+ }
+ and a nil index will still give the default behavior.
+ If you want the whole regular expression to be the matched parameter
+ value, there are three options: use an index of 0, wrap the whole
+ regular expression in a capturing group, or use non-capturing groups
+ /(?:...)/. The latter is preferred because it's much faster.
+ When exploiting the capturing groups feature, please try to remember
+ to use /\s+/ instead of plain spaces / /, unless it's absolutely
+ necessary to have single spaces.
+
+2007-02-02 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Plugin message mapper: Requirements (as set by the :requirements
+ hash) are now embedded in the regular expression matcher rather than
+ being cheked separately afterwards.
+
+2007-01-30 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * New IRC Framework: Server methods to retrieve a Channel or User are
+ now more robust to empty or nil nicks and channel names passed as
+ parameters.
+
+2007-01-29 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Timer rescheduling: it is now possible to reschedule the period
+ any particular Action is taken by issuing the command
+ @bot.timer.reschedule(handle, new_period)
+ where +handle+ is a timer handle returned by the @bot.timer.add() that
+ created the action, and new_period is the new period for the Action.
+
+2007-01-23 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Reduced saving: the salut, lart, and quotes plugin now only save
+ their datafiles if anything changed since last time. This speeds up
+ operations such as saving and rescanning; it also allow hand-editing
+ of the data files while the bot is running, since a rescan will load
+ the changed data files without overwriting them with a useless save
+ before. Of course this only works if there are no pending changes in
+ the running bot.
+
+2007-01-12 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Server timeout: rework the server timeout code. Instead of PINGing
+ the server unconditionally every server.ping_timeout seconds, we only
+ PING it if we don't receive anything in the user-chosen timeout (lazy
+ PING). The code rewrite also seems to have fixed the "bot stalling
+ doing nothing" problem, which seemed to have been a consequence of
+ @socket.select not having a timeout.
+
+2006-11-01 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * SSL support: patch from Robin H. Johnson <robbat2@gentoo.org>
+
+2006-10-28 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * A-Z game: try to guess the word the bot is thinking of: every miss
+ helps by reducing the range of allowed words, until it's so small
+ around the correct one that you can't miss it.
+
+2006-10-27 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Flood protection: first attempt at penalty-based flood protection.
+ This should make rbot much less prone to Excess Floods *and* still
+ serve normally without excessive delays.
+
+2006-10-25 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * HttpUtil: Strings returned by get_cached now have a cached? method
+ which returns true or false depending on whether the result was taken
+ from the cache or not; this can be exploited by plugins that parse the
+ result in some particular way, since they can now skip the parsing
+ stage if they cache the parse result.
+
2006-10-24 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
* HttpUtil: initial implementation of proper caching based on