+2007-04-12 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Basic class extensions: Module#define_structure() method. Syntax:
+ define_structure :SomeName, :attr_a, :attr_b
+ is equivalent to
+ SomeName = Struct.new("SomeName", :attr_a, :attr_b)
+ except that the new Struct is not created if it already exists and the
+ attributes list is the same.
+
+2007-03-31 Dmitry Kim <dmitry.kim@gmail.com>
+
+ * HttpUtil: major rework. get_response() method now respects
+ caching (can be turned off via options) and supports different HTTP
+ methods (GET (default), HEAD and POST) and ranged requests. get() and
+ head() methods are now just a thin wrappers around get_request().
+ Semantics for user-supplied &block has been made consistent across
+ these methods.
+ * HttpUtil: get_cached() method has been removed (obsoleted by new
+ get()). post() method has been added. get_partial() method for ranged
+ requests has been added. Net::HTTPResponse partial_body() method has
+ been removed (mostly because it won't play well with future HTTP
+ encodings support), please use get_partial() or get_request() instead.
+ * Utils: http_get() method has been removed (long obsoleted by
+ HttpUtil)
+ * different plugins: modified to accomodate for HttpUtil changes.
+
+2007-03-24 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * HttpUtil: new get_response method to follow redirects and get an
+ Net::HTTPResponse object with an open connection, allowing partial
+ body retrieval.
+ * HttpUtil: extend Net::HTTPResponse with a #partial_body() method. The
+ method take an argument (max bytes to download) and an optional block;
+ the method yields all the partial content that it's being downloaded,
+ instead of the single chunks yield by #read_body().
+ * url plugin: use the new HttpUtil methods.
+ * url plugin: do not block while trying to get link info.
+
+2007-03-14 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Socket filtering: socket data, both input and output, can now be
+ filtered. This is used for example to transcode all input and output
+ so that messages are internally managed as UTF-8. By default, the bot
+ will try cp1252 (Windows Western European) encoding for non-UTF-8
+ strings. Thanks to jsn (Dmitry Kim <dmitry.kim@gmail.com>).
+
+2007-03-10 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * IRC settings: ability to change the IRC name for the bot. Thanks to
+ jsn (Dmitry Kim <dmitry.kim@gmail.com>).
+ * Plugin: allow customization of the plugin load path. Thanks to
+ jsn (Dmitry Kim <dmitry.kim@gmail.com>).
+
+2007-02-20 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Timers: failing timer actions don't prevent the global timer ticker
+ from functioning properly.
+ * Shiritori plugin: new word game, contributed by Yaohan Chen
+ <yaohan.chen@gmail.com>. People take turns to continue a chain of
+ words by saying words that begin with the final letter(s) of the
+ previous word.
+ * IRC messages are not UTF-8: Most of the string processing across
+ rbot is done against IRC messages, which do not have a well-defined
+ encoding. Although many clients are now using UTF-8, there is no
+ guarantee that an arbitrary string received from IRC will be UTF-8
+ encoded. We have to force ASCII (byte-wise/charset agnostic) matching
+ because otherwise some strings can give problems: in particular, for
+ example, the bytesequence "\340\350\354\362\371" (that is the aeiou
+ vowels, each with a grave accent) will cause the string to be
+ considered up to the "\354" (i with grave accent) only: so either the
+ rest of the message is ignored, or the matching fails.
+
+2007-02-18 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Plugin: Provide a plugin.header file with boilerplate plugin
+ title/author/copyright/license information. Authors of new plugins are
+ encouraged to use it. Many existing plugins have been changed to
+ follow the same spec.
+ * NickServ plugin: delegate #identified() to other plugins after
+ successfull identification. Also provide #identified?() method to test
+ if the bot has successfully identified. Not perfect yet (gets reset
+ after a rescan.)
+
+2007-02-15 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Plugin: new unreplied() method to handle PRIVMSGs which have not
+ been replied to.
+ * Regexp: more regexp madness. BasicUserMessage and derivate classes
+ now have a new method parse_channel_list() to parse list of channel
+ names.
+
+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
+ last-modified and etag HTTP headers
+
+2006-10-17 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Salut plugin: handles (multilingual) salutations (hello/goodbye)
+
+2006-10-15 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Language stuff: plugins can now handle language changes in a natural
+ fashion. lart is the first plugin to make use of this. NOTE: this
+ is not (yet) backwards compatible: the old larts/praises files from
+ previous rbot setups have to be renamed manually
+ * Language stuff: italian translations
+ * Utils.safe_save(filename): allows 'safe' saving of a file: it needs a
+ block, to which it will yield a temporary file on which operations can
+ be carried out. When the block returns, the tempfile will be renamed to
+ the given filename
+
+2006-09-21 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * New Auth Framework: restore backwards compatibility: 'auth
+ <masterpassword>' and 'login owner <masterpassword>' both work.
+ * Topic plugin: cleanups. Implement 'topic undo'. 'topic undo' after a
+ 'topic undo' undoes the last undo.
+
+2006-09-09 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * New Auth Framework: rbot was opping anyone who asked for it (opme
+ plugin). Fixed, and cleaned up.
+
+2006-09-01 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * New Auth Framework: document and fine tune permissions view the auth
+ core botmodule.
+ * Version: when run from a svn checkout, the bot now tries to report
+ which svn revision it's at, and if there are local changes
+
+2006-08-31 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Nickserv plugin: bot will now try to inform nickserv when password
+ is changed. Moreover it's not necessary to specify the nick anymore if
+ you want to change the password for the current bot nick. Also do some
+ internal cleanups while we're at it.
+
+2006-08-29 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Script plugin: new (UNSAFE!) echo functions. Just like eval, but
+ m.replies the result of the evaluation.
+ * New Auth Framework: config keys now have their own permissions. So
+ you can allow people to view or edit only some of the config values.
+ auth.password defaults to false. Still needs some work.
+
+2006-08-26 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Plugin message mapper: new implementation. Multi-word parameters now
+ need not be the last, and it is possible to retrieve the entire
+ substring with preserved whitespace by using to_s. Also, parts of the
+ map string can be bracketed to make them optional. Examples:
+ remind :user [about] *stuff
+ will respond to
+ remind me about washing my teeth
+ and also to
+ remind me washing my teeth
+ It is possible to have parameters in brackets, in which case they will
+ be optional too, and default to nil or [] (resp. single- and
+ multi-word parameters) unless an alternative is provided in the
+ :defaults hash for the message map options.
+ * Script plugin: new (UNSAFE!) eval function. Not documented in help.
+ Not permitted by default.
+
+2006-08-25 Mark Kretschmann <markey@web.de>
+
+ * Added quiz plugin, a multiplayer trivia quiz game.
+
+2006-08-20 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Topic plugin: fix a bug that prevented it from loading
+ correctly.
+ * New IRC Framework: make sure that NOTICEs and PRIVMSGs do not
+ raise an exception when the target is in one of the special forms
+ #<mask> or $<mask>. Needs some work, though, since this case should be
+ handled specifically.
+
+2006-08-17 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Fix help: It got broken while rearranging the plugin stuff, now it's
+ properly fixed.
+ * New Auth Framework: forgot to create the InvalidPassword exception.
+ It's a RuntimeError now.
+ * Fix help: this time for real (or so I hope).
+ * New IRC Framework: topic plugin now works correctly.
+ * New Auth Framework: nickserv plugin now defaults to false for its
+ auth, so that only owner can do stuff with it
+ * New Auth Framework: fix horrible typo, assignment instead of
+ equality test when checking for the username during login.
+ * Keywords plugin: tell and forget work again without 'keyword' before
+ them.
+
+2006-08-12 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Subregistry: force prefix to be a String with to_s
+
+2006-08-11 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * AutoOp plugin: adapted to the new IRC framework.
+ * AutoOp plugin: trigger autoop on nick change too.
+ * New Auth Framework: allow? method now informs a user when they don't
+ have permission to do what they asked for.
+ * New nickreply and nickokay methods: they act like the old reply
+ method, but include the nick of the user the bot is replying to when
+ talking in public. The usual reply method can be configured to act
+ like this as default.
+
+2006-08-10 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Fix a bug in new IRC Framework: the list of channels a quitting user was
+ on was not built correctly, causing an exception when the user was not
+ in the first channel in the list of channels.
+ * Fix a bug in new Auth Framework: BotUser's name is changed via
+ username=, not name=.
+ * New HalfLife 2 plugin from ocr: queries online servers for online
+ status and number of users.
+
+2006-08-07 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Add kick method to kernel: plugins can now use
+ @bot.kick channel, user, reason
+ to kick a user from a channel
+ * RSS plugin: fix rewatch_rss method
+ * RSS plugin: the different ways to represent channels before and
+ after the New IRC Framework was causing strange problems such as
+ watched feed not being listed as such, undeletable watches, double
+ watches etc. Fix this by checking both for the Channel objects and
+ their to_s form when checking for watches or deleting them.
+
+2006-08-06 Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
+
+ * Updating the ChangeLog again: describe the new stuff in trunk which
+ will be made available in the next release. Use Gnu style for new
+ changelog entries (yyyy-mm-dd name <email address>\n<tab> ...):
+ there's a macro for this since at least Vim 6.x and higher, called by
+ <Leader>o (default leader: slash (\))
+ * New IRC Framework: Server, Channels, User, Netmasks etc are all
+ proper Ruby objects. The better organization will allow multi-server
+ connections to be implemented more easily
+ * Modularize core: split the internal functionality from what can be
+ implemented as botmodules (which work just the same as plugins). Move
+ Configuration, Basics and Auth out of the 'kernel' into core
+ botmodules.
+ * New Auth Framework: BotUsers are now Ruby objects with attached
+ PermissionSets which define what the BotUser can do, by channel if
+ necessary. The new framework allows very fine-grained control while
+ still being very easy to manage for elementary usage. BotUser data can
+ be exported and imported, but no backwards compatibility has been
+ implemented yet. Most plugins still have to be updated to the new
+ command-path-based mechanism.
+
+Sun Aug 06 17:33:55 BST 2006 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * 0.9.10 released
+ * Changes: Lots of new and updated plugins, including one to poll RSS feeds.
+ A first step towards a better auth system (total revamp due in 0.9.11).
+ Improvements to network and server code which should provide greater
+ stability. A new message queueing mechanism with bitrate throttling. A new
+ logging framework for debugging and tracing the activities of the bot. A
+ new split-db registry system for better performance and transactional
+ usage of bdb for resilience. More integration with Nickserv where
+ available including optional automatic ghost-killing.
+
+Wed Sep 07 20:16:46 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Fixed quit, broke it last commit
+ * Fixed trap() for win32
+
+Sun Aug 21 13:29:55 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * fix for bug in quakenet plugin (trac #14)
+ * multiple fixes for unescaped bot nick in regexp's (trac #13)
+
+Fri Aug 12 20:51:38 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * fix up autoop plugin a bit
+
+Thu Aug 11 00:13:11 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Added two plugins from Robin Kearney <robin@riviera.org.uk>
+ * Threat (US threat level :P)
+ * bash (bash.org quotes)
+
+Thu Aug 11 00:04:31 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Patches from "Alexey I. Froloff" <raorn@altlinux.ru>
+ * Do not use "/home/#{Etc.getlogin}/" for default home directory, use
+ "#{Etc.getpwnam(Etc.getlogin).dir}/" instead.
+ * Do not try to load same plugin from different locations. Added ability
+ to disable system-wide plugins - create PLUGIN.rb.disabled in user's
+ plugins directory.
+ * For example, to disable freshmeat plugin installed in /usr/share/rbot/plugins/freshmeat.rb one can create empty file ~/.rbot/plugins/freshmeat.rb.disabled
+
+Mon Aug 08 23:08:01 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * new markov plugin for random inane chat
+
+Sun Aug 07 18:20:24 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * stop insult plugin being used to insult the bot
+
+Sun Aug 07 17:53:06 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * workaround for people without YAML::load_file
+ * quit message for restart
+
+Sun Aug 07 15:11:07 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * fix address_prefix, broken in 0.9.9, reported by ruskie.
+
+Sat Aug 06 00:54:34 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Released 0.9.9
+
+Fri Aug 05 23:55:20 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * few more tweaks preparing to release 0.9.9
+
+Thu Aug 04 23:03:30 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Improved ircd recognition of rfc2812.rb
+ * de-string'd, de-cap'd rfc2812.rb, looks less shouty now
+ * moved the Q auth stuff (for quakenet) into a new qauth plugin (untested!)
+ * finish fixing the httputil
+
+Thu Aug 04 00:11:52 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Tweaked the debug() stuff a bit. Need to do this more cleanly really
+ * Added a fair bit of documentation for some of the new features
+
+Wed Aug 03 15:25:07 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Added french language file (TODO most of the plugins just talk english)
+ * The way the Enum configs were set up, it wasn't possible to add language
+ files to rbot at runtime (the directory was only scanned at startup). Now
+ you can set a values Proc, which is called to return a list of allowed
+ values whenever it's queried.
+ * Added Config module for determining where we were installed.
+ Unfortunately rubygems is a total whore in this regard, and I hope the
+ current hackery I have to do to support it becomes redundant in the
+ future.
+
+Wed Aug 03 00:31:41 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Added Rakefile, tweaked gemspec
+
+Tue Aug 02 16:27:36 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Fixed the new http.proxy* settings, they work!
+ * Fixed a bug with auth-checking for the config module
+ * misc tweaks
+
+Sun Jul 31 02:20:08 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Updated docgen to generate rdoc again with the new repo structure
+ * added new restart command to the core bot, quits irc and reexecs the
+ bot, to pick up new code/libraries etc.
+
+Sat Jul 30 22:33:36 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Config items are now objects, various types are available.
+ * The config wizard will now use registered config items if :wizard is set
+ to true for those items. It will ask questions in the order they were
+ registered.
+ * The config module now works for doing runtime configuration.
+ * misc refactoring
+
+Sat Jul 30 01:19:32 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * config module for configuring the running bot via IRC
+ * BotConfig.register method for various modules and any plugin to register
+ bot configuration which the new config module will expose for them.
+ * various other tweaks as I continue to refactor..
+
+Fri Jul 29 13:07:56 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Moved some stuff out of util.rb into the plugins that actually need
+ them. Those methods didn't belong in util as they were plugin-specific.
+ * moved a few more plugins to use map() where appropriate
+ * made the url plugin only store unique urls
+
+Thu Jul 28 23:45:26 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Reworked the Timer module. The Timer now has a smart thread manager to
+ start/stop the tick() thread. This means the timer isn't called every 0.1
+ seconds to see what needs doing, which is much more efficient
+ * reworked the ircsocket queue mechanism to use a Timer
+ * reworked the nickserv plugin to use maps
+ * made server.reconnect_wait configurable
+ * added Class tracing mechanism to bin/rbot, use --trace Classname for
+ debugging
+
+Tue Jul 26 14:41:34 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Prevent multiple plugin registrations of the same name
+ * reworking the config system to use yaml for persistence
+ * reworking the config system key names
+ * on first startup, the bot will prompt for the essential startup config
+ * new config module for configuring the bot at runtime
+ * new config module includes new configurables, for example changing the
+ bot's language at runtime.
+ * various other fixes
+ * New way of mapping plugins to strings, using maps. These may be
+ familiar to rails users. This is to reduce the amount of regexps plugins
+ currently need to do to parse arguments. The old method (privmsg) is still
+ supported, of course. Example plugin now:
+ def MyPlugin < Plugin
+ def foo(m, params)
+ m.reply "bar"
+ end
+
+ def complexfoo(m, params)
+ m.reply "qux! (#{params[:bar]} #{params[:baz]})"
+ end
+ end
+ plugin = MyPlugin.new
+ # simple map
+ plugin.map 'foo'
+
+ # this will match "rbot: foo somestring otherstring" and pass the
+ # parameters as a hash using the names in the map.
+ plugin.map 'foo :bar :baz', :action => 'complexfoo'
+ # this means :foo is an optional parameter
+ plugin.map 'foo :foo', :defaults => {:foo => 'bar'}
+ # you can also gobble up into an array
+ plugin.map 'foo *bar' # params[:bar] will be an array of string elements
+ # and you can validate, here the first param must be a number
+ plugin.map 'foo :bar', :requirements => {:foo => /^\d+$/}
+
+
+Sat Jul 23 01:39:08 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Changed BotConfig to use yaml storage, method syntax instead of hash for
+ get/set, to allow more flexibility and encapsulation
+ * Added convenience method Message.okay (m.okay is the same as the
+ old-style @bot.okay m.replyto)
+
+Wed Jul 20 23:30:01 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Move some core plugins to use the new httputil
+ * fix wserver's redirection handling for relative (i.e. broken) redirects
+ * fix tube plugin's html parsing
+
+Wed Jul 20 01:18:06 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Add new httputil object to the bot object, to be used by plugins etc
+ that wish to make http requests. It sets up all the proxies etc for them
+ according to bot config.
+
+Sat Jul 16 02:23:13 BST 2005 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Apply most of Rene's patch and fix various plugins.
+ * New plugin: autoop (auto ops via hostmask)
+ * New feature: karmastats
+
+Wed Oct 13 16:16:31 BST 2004 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Fix bug with quotes plugin where it gets confused and sees both a quote
+ and a keyword, both plugins are triggered by, for example "addquote foo is
+ bar"
+ * fixed this by implementing the "has_responded" flag on a message. When a
+ plugin replied to a message (or it manually sets m.replied to true), the
+ keywords plugin will honour that flag and not examine the message for
+ keywords. This flag can also be checked by listen plugins that don't want to
+ interfere with other plugin commands.
+
+Mon Oct 11 00:37:52 BST 2004 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Fixes to the NickServ plugin
+
+Sat Oct 09 23:23:24 BST 2004 Tom Gilbert <tom@linuxbrit.co.uk>
+
+ * Keyword searching
+
Fri Oct 08 00:40:07 BST 2004 Tom Gilbert <tom@linuxbrit.co.uk>
* fixed insult plugin