CHANGES:

1.9.5 - code cleanups/reductions, feedback agent
- We now use fields/AUTOLOAD in many of our modules to reduce bloat
- Beginnings of the Feedback agent are in place
- Added notice, kick and mode subs to Perlbot.pm to abstract some more
- Miscellaneous tracking added to the Channel object, like who's opped
- Logs.pm -> LogFile.pm
- Better debug() output
- Fixed a couple of bugs with auto-opping
Plugins:
- PluginControl: reloadallplugins works now
- UserUpdater: better nick tracking
- Alarm: new, lets users set reminders to be sent to them
- Cal: now uses Cal::Simple so it's cross-platform
- LogServer: misc tweaks
- Pricewatch: now reports MaxTotalCost (cost + shipping)
- StatsServer: definedness checking to reduce whining
- Trivia: misc fixes

1.9.4 - showstopper forking bug in webserver fixed, misc fixes, additions
- Added the Perlbot::schedule method to abstract some more IRC-specific stuff
- DTD updates, MLView (http://www.freesoftware.fsf.org/mlview/) can now
  edit our stuff.
- Added the process id to debug output to ease tracing of forking problems.
- Moved accept() before fork() to fix hung children problem in the webserver.
Plugins:
- Redir: fixed the list command.
- UserUpdater: Converted to use Perlbot::schedule instead of
  Perlbot::ircconn::schedule
- BitchOps: Unnecessary debugging info removed
- IRCStats: Added, publishes hourly channel traffic figures and average
  channel membership to a web page
- LogServer: Definedness checks added to reduce whining
- StatsServer: Better HTML output, topic setter published, sorted userlist,
  member count, etc.
- Trivia: Checks for existence before outputting web trivia stats.
- URLEater: Web stuff made to print URLs in a sane order
- Weather: Better definedness checking.

1.9.3 - new web services functionality, buxfixes
- Now perlbot runs a built-in webserver so plugins can publish data over
  the web.  web_hook added to Plugin.pm API, and several existing plugins
  now use this feature.  The webserver only starts if plugins that use
  it are loaded, and soon we should have a config option to disable it
  outright.
- Numerous patches from Rich Newhook
- Plugins are now unloaded correctly on bot shutdown
- Internal changes to make delop work correctly (part of UserAdmin plugin)
- Logs.pm/Channel.pm file opening/closing logic centralized and improved
- Config objects may now be constructed read-only (will not modify XML
  file on disk when save() is called)
- Plugins will try to read config-sample.xml (read-only) if a config.xml
  is not found.  This lets plugin authors ship a config with sane defaults
  that will be read automatically.
Plugins:
- BitchOps: this plugin used to modify the Net::IRC Event objects by
  accident, and this could cause unexpected behavior for other plugins
  hooking the same events.  Fixed.
- Google: new plugin, searches Google using the Google SOAP api.  You will
  need to aquire a key from google; the key you get with a free account is
  good for 1000 queries per day.  This should satisfy most people; let us
  know if you need more than that and we might merge the old code back in
  as a backup.
- Infobot: factpacks loaded into dbm files instead of kept memory-resident
- LogServer: converted to use Web Services
- Outlander: rewritten to use all-perl code, but it's still not as good as
  when it used megahal.
- RottenTomatoes: new plugin, written by Paul Sharpe.  Displays freshness
  statistics for movies via rottentomatoes.com .
- SpelCheck: also uses Google API now.  Once again, let us know if the
  1000-query limit will pose a problem for you.
- StatsServer: new plugin, publishes some information through Web Services
  in both XML and HTML.  External systems can now show some stuff about
  your bot.
- Trivia: Rankings totally redone; your old db files will have to go.
  Trivia files now in XML.  Many bugfixes.  Also, publishes top ranked
  player lists through Web Services.
- URLEater: publishes urls through Web Services
- Weather: better output formatting

1.9.2 - more bugfixes and cleanups, some new plugins
- Ident username now configurable
- Passwords now MD5 crypted, but "legacy" crypt()ed passwords are also
  supported transparently.  Some groundwork has been laid for a more
  flexible authorization system.
- Config and config-sample are now config.xml and config-sample.xml
- Sigterm now handled gracefully (basically the same as sigint)
- Fixed logic in logging code so closed logfiles are never re-closed, which
  was causing some warning messages before.
- Improved debug messages
- You may now have a single logfile per channel if you like, configurable
  via the "singlelogfile" attribute of channel objects.  The old behavior of
  one file for each day remains the default.
- nickappend now defaults to "_" (single underscore)
- !quit now replies "Quitting..." to give some positive feedback
- !debug command added to change the debug level on the fly
- Per-plugin info.xml added, with author, contact and url fields.  This
  information is returned as part of the top-level help text for each
  plugin.
- Plugins will now try to open a config-sample.xml in their directory if a
  config.xml is not found.  The config-sample.xml will be opened read-only.
- Plugin unload/load now works (!unloadplugin and !loadplugin)
- Trivia plugin added - runs trivia games and keeps many statistics
- URLEater plugin added - keeps a list of the last URLs said in the channel.
  !urls will list them (max of 10).
- BitchOps typo fixed.  Random errors in BitchOps.pm and certain other
  strange behavior should no longer occur.
- Logserver logs now display "hot" URL links (clickable)
- Outlander is somewhat less talkative now, and translates through English
  as well now (bugfix).
- Weather output made nicer and more compact
- Plugins with config.xml files now have config-sample.xml files instead,
  just like the main bot, so CVS doesn't interfere with your real config
  files.
- Sample initscript now handles the typical usage of symlinking something
  like S97botname to the initscript itself, by stripping the prefix part
  before the botname.
- hook() with just a single coderef parameter will now hook on every line
- All hooks now additionally get the irc event as the last argument
- Config objects can now be read-only to prevent saving out to the file

1.9.1 - fixes and cleanups
- DTD fixed in the sample config
- Typo fixes in Plugin.pm
- Can specify a config file on the command line now
- Perlbot::start() now does print-and-exit instead of die
- Added a bot.localaddr option for people with either multiple network
  interfaces
- Finished up the conversion to debug()
- Help now watches msg AND public, but only replies via msg
- Seen now is case-insensitive
- Config was having problems when you asked for undefined things because it
  would try to dereference 'undef'... fixed.
- Now "botname[,: ] command" is equivalent to "commandprefixcommand", ie:
  you can just address the bot: perlbot, math 2+2
- Added a <usage> tag to the help syntax, see the end of
  plugins-authoring.txt
- Added author, version, contact and url fields to Plugin, which should be
  set in the plugin's init function.

1.9.0 - rewrite of much of the bot
- Made everything much more object oriented
- Moved much of what was in PerlbotCore into appropriate plugins
- Totally changed the plugin interface to simplify plugin authoring
- Integrated XML config file handling
- Integrated XML help system, easing plugin authors' burden
- Integrated web-based log viewing/searching
- Added plugins for Babelfish, BitchOps (ala eggdrop), FServ (basic),
  InfoBot functionality (basic, supports factpacks)

1.5.2 - misc fixes, web-based services improved
- The web interface to the logs in miscscripts has been significantly
  improved
- Fixed a bug that wouldn't id a user who had multiple identical hostmasks

1.5.1 - misc fixes
- Logging actions now works correctly
- If you don't specify hostmasks for users, it now works correctly
- #status now msgs you back with bot status
- made our hostmasks code better, you now can't specify really out-there
  hostmasks that would break our user identification
- made host_to_user() only return correctly if it finds one user, not
  multiple ones (shouldn't happen since our hostmask fix)

1.5.0 - crash log, configurable plugin and command trigger prefixes,
        new plugin, plugin fixes, misc core updates/fixes
- Due to popular demand, the character/string that prefixes spoken commands
  to the bot is now configurable!  bot.commandprefix and bot.pluginprefix
  are the config values to set (the defaults are # and ! to mimic previous
  behavior).  All stock plugins have been modified to work with this
  setting.  (Note: this is actually a regexp, shhh!)
- Due to further popular demand, perlbot now supports password-based user
  authentication.  What does this mean?
    If you log in from someplace other than the usual, you can now
    authenticate yourself, change your password, add a hostmask to your
    list of hostmasks, remove old hostmasks, op themselves, etc.
- Mike Edwards contributed the neat Internals plugin.  It allows bot owners
  to debug things remotely by viewing internal perlbot variables.  Sometimes
  this can be easier than using "perl -d" and mucking with breakpoints...
- Mike Edwards made the Perldoc plugin safer.
- Ian Higgs pointed out some problems with logging channels you've told
  the bot to join... fixed.
- Dmitry Agaphonov submitted a patch that allows the bot to join a server
  that has no MOTD. Applied.
- Added debug statement when rolling log file to the next day
- Added debug statement on inability to write to logfile
- Most fatal crashes should now log the error message and a stack trace
  to crashlog.txt.  Also a new config option bot.crashlogdir allows
  specifying the directory for this log file.
- Cleaned up on-join mode setting
- Fixed the server-cycling logic - now it works  :)
- Fixed some forking problems in a few plugins
- The Perlbot package now exports $currentnick which is the bot's current
  IRC nick.
- Plugins no longer support the "unimport" mechanism.  Just use perl's
  END instead.
- On shutdown, all plugins are now explicitly unloaded
- Added a SysV-style init script to miscscripts/
- Logsearch plugin now has a much more robust interface
- Improved the matching logic in the Define plugin somewhat.  Now long
  responses shouldn't trigger a match for no apparent reason.
- Freshmeat plugin now uses FM's XML backend
- Linuxtoday now uses LT XML backend (for news only; search is still
  HTML)
- Blues, AVNews and AVDemos plugins all updated to work with the
  latest HTML syntax from the sites
- Updated Host plugin to deal with CNAMEs and other such DNS details
- PriceWatch plugin now works a lot better and the code is cleaner
- Guile plugin now only prints stuff to the console if debugging is on

1.3.x - skipped, big enough changes made to the 1.2.x tree to warrant
        1.4.x

1.2.2 - misc updates, stability fixes, plugin modifications
- Fixed the flooding crashing the bot bug, stupid fork
- Now perlbot.pl will print a warning and exit if it doesn't find the
  default config file, or the one specified on the commandline.
- Debugging is now enabled by setting the environment variable
  PERLBOT_DEBUG to 1 (or 2, etc.) instead of editing perlbot.pl
- Changed sample config and renamed it to config-sample so people who
  run the bot without reading the readme can be scolded.
- updated manual.txt and plugins.txt
- NSLookup plugin: Removed, since the nslookup utility is deprecated.
  It has been replaced with the Host plugin (!host).
- Host plugin added: As mentioned above
- PriceWatch plugin: Fixed to work with the new HTML on the site.
  Note that it now requires HTML::TableExtract.
- Cal plugin added.  !cal displays a calendar for the current month.

1.2.1 - documentation fixes and additions; logsearch CGIs
- Added a readme to the miscscripts/ directory and cleaned up the comments
  in the scripts there.
- Brought the main documentation (manual.txt) up to date with version 1.2.0.
  (we were so eager to release 1.2.0, we didn't bother to update the
  documentation first :)
- Included the CGI scripts we wrote to allow searching of logs from a web
  interface.  See miscscripts/irclogs/
- Subtopic list in '#help <plugin>' is now alphabetized
- Many plugins have a help.txt (online help), but not all.

1.2.0 -
- Plugin unloading now works correctly - reloading a plugin will now cause
  its code to be read in from disk again.  This makes plugin development
  MUCH MUCH easier.  Just '/msg bot #plugin reload MyPlugin' when you want
  to test your changes.  No need to restart the bot anymore.
  Many thaks to Hanno Hecker (Vetinari) for the helpful hint.
- gperlbotcfg (Luke Petre <petre@jhu.edu>) merged with the main bot
  tree.  This is a GTK+ based perlbot configurator and is pretty neat
  stuff, check it out.
- doh, should have made sure we were in a channel before we go trying
  to leave it and hence crashing the bot... my fault -andy (i'm
  surprised we didn't see this earlier...)
- #quit can now take an optional param: a quit message for the bot
- SIGINT handler implemented.   If ctrl-c is pressed at the console, the
  bot will quit cleanly, as if #quit were used.
- SIGHUP handler implemented. kill -HUP <bot_pid> will now force a
  reload of the config file... this is useful for two reasons: one, if
  your hostmask isn't right, you wouldn't be able to force a reload
  from irc, as you wouldn't be recognized as an owner.  Secondly, this
  will help with future integration with gperlbotcfg.
- added 2 second delay when the bot is quitting to allow it to disconnect
  from the IRC server cleanly before the perl script exits.
- fixed printing of fatal error message when there are no servers in the
  config file (now it actually gets printed!)
- two new plugins from Chris Thompson: Stock and Whois.  Both are very
  usefull, but they aren't loaded by default because they depend on
  Finance::YahooQuote and Net::Whois respectively. Check their associated
  README files.
- Misc MegaHal plugin changes...
- Anyone out there interested in making sure perlbot runs on BeOS or any
  other alt-os?
- Moved some documentation to Documentation directory
- other misc fixes... we'll call this stable.

1.1.9 -
- should pretty much run on mac and win32... all bets are off on the
  majority of the plugins... fork is kind of a nice thing, you know?
- included jeremy's plugin docs...
- fixes to Define Plugin
- channel keys now supported... ie:

  chan {
    name llama
    key  they_are_near
    ...
  }

  thanks to z00p for noticing it didn't work :>
- updates to Slashdot and Freshmeat plugins...
- Weather plugin updated...
- #say and #msg added...

   /msg <botnick> #say <channel> <text>

   /msg <botnick> #msg <nick> <text>

1.1.8 -
- !! New Net::IRC came out. (0.62) It fixes a bug in schedule(), you
  should upgrade, as new plugins are planned which require schedule to
  work correctly.
- fixes to Slashdot and Dictionary plugins
- security fixes to math, perldoc, etc...
- logging changes, important note to developers: logging calls are now
  different, it simply takes a string which is inserted in the logs
  with a timestamp.
- topic/mode/actions are all now logged correctly...
- nickchange/quit messages are now logged correctly
- multiple, semicolon seperated #commands can be given to the bot now,
  ie:

   /msg <botnick> #nick timmykins; #join billykins; #logging billykins on
- Added bot.unload config option to prevent loading of plugins on
  startup.  ex: (note: plugin name is case sensitive!)

  bot {
    ...
    noload SpelCheck
    noload Math
    ...
  }

- New commands to allow dynamic loading/unloading of plugins !!while
  the bot is running!! (note: plugin_name is case sensitive!)
  -> #plugins (load|start) plugin_name
  -> #plugins (unload|stop) plugin_name
  -> #plugins (reload|restart) plugin_name
  (If you unload a plugin and then load it back in, it won't actually
  re-read the code from disk for some reason.  We're working on that!)
- A plugin may now optionally implement a sub named 'unimport' that
  will be called when the plugin is about to be unloaded.

1.1.7 - redesigned help system
- There is a file help.txt in the main directory.  Each plugin can also have
  a help.txt in its own directory.  The format is:

  default help line
  topic1
  help for topic1\\second line
  topic2
  help for topic2\\second\\third

  Blank lines and lines with only whitespace are ignored.  Each topic's help
  text MUST be on a single line!  If you would like multi-line responses, use
  '\\' to separate the lines.  Each 'line' will be sent as a separate message.
  Perhaps in a later version the parser will be improved to allow a more
  natural format...
- Message the bot '#help' to find out about the syntax.  I won't go into it
  here.
- Fixed up the Define plugin to remove redundant code and stuff.  Someone
  really needs to do this to all the other included plugins...  If you want to
  help with this, just take a look at the Define code and apply that structure
  elsewhere.  Email us if you have questions.
- More plugins added, including: Blue's News, Avault News, Avault
  Demos, Dictionary, SpelCheck, Freshmeat...
- Freshmeat and Slashdot plugins can now do searches...
- misc other fixes...


1.1.6 - some major changes
- fixed a bug where if you made the bot #part a channel it was
  configured for, and then rejoin it, he would forget everything he
  once knew about it... so that is fixed
- Added a bunch of plugins, thanks mainly to some infobot code...
  Many thanks to Kevin Lenzo for the ideas and for the threading
  inspiration...
- Some of the plugins are now threaded... ie: if you do a:
    !traceroute some.host.com
  It will continue to function as it normally would, even if the
  traceroute is taking up a lot of time...
- New Plugins:
    - Math
      - uses bc to do its calculations
      - example:

<ender__> !math 2^32
<perldev> 4294967296
<ender__> !math 10/3
<perldev> 3.33333333333333333333

    - Perldoc
      - accesses perldoc (oddly enough)
      - example:

<ender__> !perldoc my
<perldev>     my EXPR A `my()' declares the listed variables to be local
<perldev>             (lexically) to the enclosing block, file, or `eval()'.
<perldev>             If more than one value is listed, the list must be
<perldev>             placed in parentheses. See the section on "Private
<perldev>             Variables via my()" in the perlsub manpage for details.

    - Slashdot
      - uses the get_slashdot_news script by David Dellanave
        <ddn@hps.com> as its basis
      - example:

<ender__> !slashdot
<perldev> Slashdot last updated on: August 24 13:51:18
<perldev>                     Wearable PCs /   CmdrTaco / 14:51:18
<perldev>  Wacky port of BSD to Dreamcast  /      Hemos / 14:24:08
<perldev>  Belluzo post-SGI joining Micros /      Hemos / 14:17:10

    - Traceroute
      - based on the infobot version
      - example:

<ender__> !traceroute brisby.fdntech.com
<perldev>  1  mirage (10.0.0.1)  0.568 ms  0.45 ms  0.437 ms
<perldev>  2  24.95.208.1 (24.95.208.1)  29.838 ms  10.064 ms  19.626 ms
<perldev>  3  mthope-rtr-a-mcr2.nyroc.rr.com (24.93.0.145)  20.117 ms  14.153
           ms  13.394 ms
<perldev>  4  24.93.0.9 (24.93.0.9)  13.266 ms  12.16 ms  12.882 ms
<perldev>  5  spp-gsr.twcny.rr.com (24.92.224.5)  19.832 ms  16.53 ms  14.368
...

    - Weather
      - based on erm, someone's script... it's in the header
      - example:

<ender__> !weather rochester,ny
<perldev> Rochester, NY / Sunrise: 6:25 am EDT / Sunset: 7:59 pm EDT
<perldev> Rochester, NY / Temp: 79 / Wind: from the SE at 13 mph
<perldev> Rochester, NY / Humidity: 64% / Barometer: 30.00 inches

    - PriceWatch
      - Based loosly on the weather script
      - example:

<ender__> !pricewatch intel box 600 cpu
<perldev> $  653 / Intel / boxed piii 600mhz cpu 512k cache 100mhz fsb, p3,
          pentium iii / * order online and use promo code: 772P, qty 1/order *
          intel  performance enhancements, part bx80525u600512e
<ender__> !pw half-life
<perldev> $   37 / Sierra OnLine / Half Life  (Retail) / Big Game



1.1.5 - major reorg
- Added #plugins command to get a list of installed plugins.
--NOTE: The rest of the changes will only be of interest to developers or
  people who have been following the code.
- Useful variables and subs that would ideally be globals, such as %users,
  %channels, host_to_user, etc., are now in Perlbot.pm, which exports them all
  by default.  This means that now you don't need main:: on the front of
  the affected variables and subs; just 'use Perlbot'.  See the top of
  Perlbot.pm for more details.
- Moved all the core handlers and the parser for the main config file into
  PerlbotCore.pm.  It acts like a plugin and is handled by the plugin system
  (with a little 'encouragement' since it's not in the plugins dir :).
- perlbot.pl is now just the skeleton code necessary for creating the
  Net::IRC::Connection object, loading plugins, handling events from Net::IRC,
  and calling the handlers that the plugins register.
- Finally moved what used to be $main::logdir into Log.pm.  It's now
  $Log::basedir.  Why didn't we do this sooner?  Oh yeah.  We're lazy.
- Changed $version and $authors to $VERSION and $AUTHORS to reflect the fact
  that they're treated as constants.  Also, $AUTHORS now has our email
  addresses instead of just 'plastik, ender'.

1.1.4 - 
- fixed some of the orginal bot code to add users, etc in order... (we are
  dumb sometimes...)
  -> fixed it even better with a fix from Christian Mogensen
- some plugin work, some cleanups...
- we're going to move our default stuff into a seperate file which is
  treated just like a plugin... this should be ready for 1.1.5, and we're
  thinking of doing a "feature freeze" for now... so look for 2.0 soon...

1.1.3 -
- misc UserInfo fixes
- servers now roll the right way for real instead of just pretend like
  they used to
- now plugins can call parse_config and pass the name of a config file, and
  parse_config will return a hash ref with all the data from the config file,
  nicely packaged.  See the comments above the code for parse_config for a
  more detailed explanation.
- standard bot behavior unchanged
- Beginnings of the Protection and UserInfo plugins, patches welcome...

1.1.2 - hostmask behavior change
- Hostmasks now need to follow the user!ident@host format instead of the
  ident@host that was used in prior versions.
- Hostmasks are now also case INsensitive.  (They weren't before)  This
  includes the part of RFC1459 that says that {}| are the lowercase versions
  of []\ due to IRC's Scandanavian origins.  (Trust me... Read the RFC if you
  don't believe me.  :)  This involved a little hack, see the code if you're
  interested.  So the nicks [bob] {bob} {bob] and [bob} are all equivalent,
  as they should be.

1.1.0 - plugins!
- Added a plugin architecture.  I'll write some docs on it later.  In a
  nutshell: plugins can hook any event, and multiple plugins can hook the same
  event.  Each plugin is loaded as a perl module, but that module could use
  other modules, make system() calls, etc.  Whatever you can dream up.  :)
- Built-in handlers now use the plugin infrastructure.  Instead of calling
  $conn->add_handler(...) to add one just call add_handler(...) .
- You can now specify multiple nicks for the bot... ie: In the bot { }
  area of the config file, specifying multiple nick values will store
  them in order of preference:
       bot {
	   nick		timmy
	   nick		billy
	   nick		samuelkins
	   ...
       }
  would cause the bot to cycle to billy if timmy were in use, and to
  samuelkins if timmy and billy were in use.  If only one nick is
  specified, "_" is appended until we find a free nick.  Likewise, if
  all the preferred nicks are in use, "_" is appended to the first
  nick until a free one is found.  This should be changed to allow
  "_" to be a user-specified character. And now it is... "addchar"

1.0.1 -
- minor log filenaming change...

1.0.0 -
- basically just a tested 0.1.9

0.1.9 -
- decision to move bridging to an entirely seperate bot made
- miscellaneous fixes
- stability seems good

0.1.8 -
- opping works again
- rolls servers on disconnect or lack of initial connect
- rolls nicks if his is in use
- replied to pings, versions
- logs actions
- logging is now toggleable on channels... this means when he
  gets a #join command, he won't start logging the channel he
  joins unless told otherwise... we feel this is generally a
  Good Thing.  In addition, you can have him manage a channel and
  not log...
- notify_users only notifies owners now (still needs to be
  configgable)
- other misc fixes...

0.1.7 -
- patched in the new config parser, broke recognizing of owners/ops
- the new config parsing code is in
- unfortunately I broke something when rewriting the %config_parser subs,
  and now it won't op me or recognize me as a user/owner.  I think it might
  not be storing the users' hostmasks in the User objects correctly.  too late
  to search for the bug tonight.  shouldn't be hard to find, anyway.

0.1.6 - 
- finally split each class into its own file, cleanups
- each class is in its own file, <Classname>.pm
- you must have '.' in your perl's @INC or else this won't work.  Type this
  in your shell:
    perl -e 'print scalar(grep(/^\./,@INC))."\n";'
  If it prints a 1, you're all set.  If it prints a 0, you need to fix this.
  (How?)
- added User->notes which returns the number of notes.  changed places that
  used to call User->add_note just to get the number of notes to use ->notes
  insteasd.  (cleaner and more understandable)
- cleaned some misc. stuff up
- made $logdir a global (not a lexical like it used to be) so that Log.pm
  can see it.  this value should really be a package/class variable in Log.pm.

0.1.5 -
- notes work correctly (debating functionality of readnote and rmnote)
- redirection working
- notify_users works but needs to be configgable
- the bot will try to update the current nick of all its users ASAP
- notes notification sorta works
- beginnings of more user info are there
- channel joining now done the Right Way
- #nick command added
- many miscellaneous stability and bug fixes

0.1.4 - more cleanup, more fixes, more functionality, oh my
- notes work for the most part... reading them happens backwards... ?
- users now have a list of hostmasks
- help is sorta there...
- logfile cleanups/fixes
- CHANGES and TODO file made
- preliminary redirection working

0.1.3 - general cleanup, some new stuff and fixes
- Now the config parser silently skips blank lines.  yum.
- The logdir directive works
   - Specifies the base log dir, under which the channel dirs go:
      +--logdir
        +--chan1
        | `--yyyy.mm.dd
        `--chan2
          `--yyyy.mm.dd
   - Can be relative or absolute. (absolute paths not yet tested)
- Directories for logs (and logdir itself) are created as needed
- Log dirs for channels now have the '#' on them, since channels
  *can* start with a '&' too.  Now that I think about it, maybe
  the right thing would be to have naked #-less dirs unless it
  actually is a & channel.  & would be bad as a char in a filename,
  so we should figure out what to do with it... (low priority)
- A biggie: Moved Log objects *inside* their respective Chan
  objects.  Seemed like the Right Thing to do.  Now, call
  $my_chan->log_write($nick, $text) to log something.  Also,
  Log::open automatically calls update_date and closes the previous
  file if it there was one open.  The logic to roll the logfile
  on a date change should really be in Log::write, which it
  currently is not.  Also, the 0.1.2 roll test was broken; it just
  checked to see if the day of the month had changed.  It checks
  all 3 date components now, but it should still be moved to
  inside Log::write.
- Notes are saved correctly, but they're always marked as coming
  from perlbot.  This stems from the way I (plas) tried to save
  some coding time with the way I pass params to the handlers.  We
  need to figure out a better way to do that passing.

0.1.2 - some decent, useful functionality
- good things:
   - it joins AND logs multiple channels IF
     you have your logs/ dir set up right.
     ie: you need to have a dir for each
     channel made, and I will not try to 
     predict what would happen if you don't.
   - it auto-ops people
   - it understands the join, part and reload
     commands. It MIGHT understand the load
     command, but no promises...
- bad things:
   - it THINKS it understands the note command,
     but it's delusional.
   - it's getting messy... :<

0.1.1 - it joined channels or something...

0.1.0 - erm, plas got it to come to irc...
