Version 0.83.5

The minimum supported Python version has been bumped to 2.6.

utils.str.perlVariableSubstitute is deprecated in favor of using Python's
string.Template directly.  perlVariableSubstitute will be removed in a future
release.

Factoids' config variable supybot.plugins.Factoids.factoidPrefix has been
replaced by supybot.plugins.Factoids.format, which allows the user to
determine exactly how replies to Factoid queries are formatted.

supybot-botchk no longer runs supybot inside an instance of /bin/sh.


Version 0.83.4.1

Simple bug-fix release for a couple changes that were introduced last minute
before the previous release.

No incompatibilities.


Version 0.83.4

This release contains fixes for Python2.6 compability as well as a re-written
Google plugin which uses the AJAX API.  The re-written plugin gained a
translate command and no longer needs an API key.

ChannelLogger has a new config variable, supybot.plugins.ChannelLogger.enable,
which can be used on a per-channel basis to determine whether that channel is
logged.

The RSS announce command has been restructured into the commands "announce
list", "announce remove", and "announce add" in order to simplify the
command's use.

The supybot.directories.plugins config variable now determines its global
directory dynamically instead of adding the directory to the value.  This
means values like '/usr/lib/python2.5/site-packages/supybot/plugins' can be
removed from the variable.  This should help ease transitioning a Supybot
config from one Python release to another.

Incompatibilities:
supybot.plugins.Google.safeSearch has been renamed to
supybot.plugins.Google.searchFilter

supybot.plugins.Channel.banmask has been removed in favor of a new
supybot.protocols.irc.banmask config variable.  This general config variable
is used by the various commands which would need to know what style of banmask
to use.

Version 0.83.3

Overdue bug fix and Python2.5-compatible release.  No significant changes to
worry about from the user perspective.


Version 0.83.2

Mainly bug fix release.  The most noticeable change being a value of
'default' for supybot.drivers.module will use Socket instead of Twisted.


Version 0.83.1

No incompatibilities, just fixing an important bug with plugin loading.


Version 0.83.0

This far overdue release contains mostly bug-fixes.

Incompatibilities:
Changed the prefixName keyword argument (which appears in various places
in callbacks.py and the reply-related irc methods) to prefixNick.


Version 0.83.0rc3

This release candidate contains mostly bug-fixes.

Incompatibilities:
utils.changeFunctionName was moved to utils.python.changeFunctionName


Version 0.83.0rc2

This release candidate contains a few bug-fixes and some plugins we
forgot in the last RC.  Otherwise, everything is compatible.


Version 0.83.0rc1

There have been some fairly significant changes since our last release.
This means that you should uninstall your previous version before
installing this version.

First, plugins are now a directory of files rather than a single file.
This makes it much easier for an individual plugin to supply any
3rd-party modules it may depend on and resolves some bugs we had with
reloading plugins.  supybot-plugin-create (nee supybot-newplugin) has
been updated to reflect this.  A side effect of using a directory-based
plugin is that @load/@reload are now case-sensitive.  "@load foo" is not
the same as "@load Foo".

As part of the conversion to the new plugin format, some plugins were
broken up into more focused plugins.  Also, not all of the plugins that
we used to ship are part of this release.  Some we moved to the
supybot-plugins package and some others (which would be candidates for
supybot-plugins) have yet to be converted to the new format.

Second, we've updated the scripts that ship with Supybot.  As noted in
the previous section, supybot-newplugin is now named
supybot-plugin-create.  We've also added the following scripts:

supybot-botchk - Handy script for starting the bot and keeping it
                 running.  Ideal for having cron automatically start the
                 bot.
supybot-plugin-doc - Generates documentation for the specified
                     plugin(s).  Currently, the documentation is
                     generated using Structured TeXt so that it can
                     easily be uploaded to our website.
supybot-plugin-package - The beginning of a script to make a plugin
                         package which can be uploaded to our website
                         for general consumption.
supybot-test - Runs a plugin's test suite.

Third, we've broken supybot.utils into focused sub-modules.  There's no
longer a supybot.fix module and we now have the following modules:

supybot.utils.file - utilities for dealing with files (e.g. the old
                     supybot.utils.transactionalFile is now
                     supybot.utils.file.AtomicFile)
supybot.utils.iter - utilities for dealing with iterables (all, any,
                     partition, groupBy, choice, etc)
supybot.utils.gen - general purpose utilities which are imported into
                    the supybot.utils namespace
supybot.utils.net - utilities for dealing with the network
supybot.utils.python - utilities for dealing with Python
supybot.utils.seq - utilities for dealing with sequences
supybot.utils.str - utilities for dealing with strings (including our
                    new format() function)
supybot.utils.structures - general purpose structures used in Supybot
supybot.utils.web - utilities for dealing with the web (used to be
                    supybot.webutils)

Fourth, we've added source-nested plugins (using the class
callbacks.Commands).  This allows you to group similar commands
together.  Some examples are:

Channel.{ban add,ban list,ban remove}
User.{hostmask add,hostmask list,hostmask remove}

Fifth, we've removed the privmsgs module.  All of the functionality
that was offered in that module is now available by using commands.wrap.
Use of this is documented at:
http://supybot.com/documentation/help/tutorial/wrap

Sixth, we've renamed some plugin-related API changes.  Some classes had
their names changed.  The old names are still available for
backwards-compatibility.

callbacks.Privmsg -> callbacks.Plugin
callbacks.PrivmsgCommandAndRegexp -> callbacks.PluginRegexp
callbacks.IrcObjectProxy -> callbacks.NestedCommandsIrcProxy

callbacks.PrivmsgRegexp was removed since its functionality is covered
by setting using PluginRegexp.

Also, the prototype for a plugin's __init__ method changed:

def __init__(self): -> def __init__(self, irc):

Remember to pass the irc object on when you call the parent class's
__init__ method.


Version 0.80.0

We *finally* hit 0.80.0!  This release is completely compatible with
the last release candidate.

An update to Babelfish may cause an error message to be displayed in
the console when the bot is first run.  The error message should be
gone when the bot is restarted.

We also have a new community website at http://www.supybot.com/ where
our users can submit their own plugins, view/download other people's
plugins and discuss all things Supybot-related.


Version 0.80.0rc3

Another bugfix release.  This one was pretty important as it actually
makes supybot.database.plugins.channelSpecific work properly.


Version 0.80.0rc2

supybot.databases.plugins.channelSpecific.channel was renamed to
supybot.databases.plugins.channelSpecific.link.

supybot.databases.plugins.channelSpecific.link.allow was added, which
determines whether a channel will allow other channels to link to its
database.

Infobot is no longer deprecated and the following changes were made to
its config variables:
supybot.plugins.Infobot.answerUnaddressedQuestions was renamed to
supybot.plugins.Infobot.unaddressed.answerQuestions.
supybot.plugins.Infobot.snarfUnaddressedDefinitions was renamed to
supybot.plugins.Infobot.unaddressed.snarfDefinitions.
supybot.plugins.Infobot.unaddressed.replyExistingFactoid was added to
determine whether the bot will reply when someone attempts to create a
duplicate factoid.


Version 0.80.0pre6

Another bugfix release.  No incompatibilities known.  The only
registry change is that supybot.databases.users.hash has been
removed.


Version 0.80.0pre5

Completely bugfix release.  No incompatibilies known.


Version 0.80.0pre4

Mainly a bug fix release.  This will likely be the last release before
0.80.0final, but we're gonna let it stew for a couple weeks to attempt
to catch any lingering bugs.

ansycoreDrivers is now deprecated in favor of socketDrivers or
twistedDrivers.

supybot.databases.plugins.channelSpecific.channel is now a channelValue
so that you can link specific channels together (instead of all channels
being linked together).

For those of you that use eval and/or exec, they have been removed from
the Owner plugin and are now in sandbox/Debug.py (which you'll have to
grab from CVS).


Version 0.80.0pre3

The database format for the Note plugin has changed to a flatfile
format; use tools/noteConvert.py to convert it to the new format.

Ditto that for the URL database.

FunDB is deprecated and will be removed at the next major release;
use tools/fundbConvert.py to convert your old FunDB databases to Lart
and Praise databases.

If you had turned off supybot.databases.plugins.channelSpecific, your
non-channel-specific database files had gone directly into your data/
directory.  We had some problems with poor interactions between that
configuration variable and channel capabilities, though, so we
changed the implementation so that non-channel-specific databases are
considered databases of a single (configurable) channel (defaulting
to "#").  This will also help others who are converting from
channel-specific to non-channel-specific databases, but for you
who've already made the switch, you'll need to move your database
files again, from data/ to data/# (or whatever channel you might
change that variable to).

supybot.channels doesn't exist anymore; now the only list of channels
to join is per-network, in supybot.networks.<network>.channels.

We weren't serializing supybot.replies.* properly in older versions.
Now we are, but the old, improperly serialized versions won't work
properly.  Remove from your configuration file all variables
beginning with "supybot.replies" before you start the bot.

The URL database has been changed again, but it will use a different
filename so you shouldn't run into conflicts, just a newly-empty
database.

We upgraded the SOAP stuff in others; you may do well to do a
setup.py install --clean this time around.


Version 0.80.0pre2

Many more bugs have been fixed.  A few more plugins have been updated
to use our new-style database abstraction.  If it seems like your
databases are suddenly empty, look for a new database file named
Plugin.dbtype.db.  We've also added a few more configuration variables.


Version 0.80.0pre1

Tons of bugs fixed, many features and plugins added.  Everything
should be entirely compatible; many more configuration variables have
been added.


Version 0.79.9999

Some more bugs fixed, added a few features and a couple configuration
variabless.  This should hopefully be the last release before 0.80.0,
which will finally bring us to pure Beta status.


Version 0.79.999

Some bugs fixed, but the ones that were fixed were pretty big.  This
is, of course, completely compatible with the last release.


Version 0.79.99

Many bugs fixed, thanks to the users who reported them.  We're
getting asymptotically closer to 0.80.0 -- maybe this'll be the last
one, maybe we'll have to release an 0.79.999 -- either way, we're
getting close :)  Check out the ChangeLog for the fixes and a few new
features.


Version 0.79.9

We've changed so much stuff in this release that we've given up on
users upgrading their configuration files for the new release.  So
do a clean install (python2.3 setup.py install --clean), run the
wizard again, and kick some butt.

(It's rumored that you can save most of your old configuration by
appending your new configuration at the end of your old configuration
and running supybot with that new configuration file.  This, of
course, comes with no warranty or guarantee of utility -- try it if
you want, but backup your original configuration file!)


Version 0.77.2

This is a drop-in replacement for 0.77.1, with two exceptions.  The
configuration variable formerly known as
"supybot.plugins.Services.password" is now known as
"supybot.plugins.Services.NickServ.password", due to the fact that
there might be different passwords for NickServ and ChanServ (and
ChanServ passwords are per-channel, whereas NickServ passwords are
global).  If you're using the Services plugin, you'll need to make
this change in order to continue identifying with services. The
configuration variable formerly known as
"supybot.plugins.Babelfish.disabledLanguages" is now known as
"supybot.plugins.Babelfish.languages".  The configuration variable now
accepts the languages that *will* be translated as opposed to ones
that are *not* translated.

Tests and the developer sandbox are not longer delivered with our
release tarballs.  If you're a developer and you want these, you
should either check out CVS or download one of our weekly CVS
snapshots, available at http://supybot.sourceforge.net/snapshots/ .


Version 0.77.1

This is a drop-in replacement for 0.77.0 -- no incompatibilities, to
out knowledge.  Simply install over your old installation and restart
your bot :)


Version 0.77.0

Setup.py will automatically remove your old installations for you, no
need to worry about that yourself.

Configuration has been *entirely* redone.  Read the new
GETTING_STARTED document to see how to work with configuration
variables now.  Your old botscripts from earlier versions *will not*
work with the new configuration method.  We'd appreciate it if you'd
rerun the wizard in order for us to find any bugs that remain in it
before we officially declare ourselves Beta.  Note also that because
of the new configuration method, the interface for plugins' configure
function has changed: there are no longer any onStart or afterConnect
arguments, so all configuration should be performed via the registry.

Channel capabilities have been changed; rather than being
#channel.capability, they're now #channel,capability.  It's a bit
uglier, we know, but dots can be valid in channel names, and we
needed the dot for handling plugin.command capabilities.
tools/ircdbConvert.py should update this for you.

The on-disk format of the user/channel databases has changed to be far
more readable.  A conversion utility is included, as mentioned before:
tools/ircdbConvert.py.  Run this with no arguments to see the
directions for using it.

Uh, we were just kidding about the upgrade script in 0.76.0 :)  It'll
be a little while longer.  We do have several little upgrade scripts,
though.


Version 0.76.1

Almost entirely bugfixes, just some minor (and some less minor) bugs
that need to get in before we really start hacking on the next
version.  Should be *entirely* compatible with 0.76.0.


Version 0.76.0

Major bugfix release.  A great number of bugs fixed.  This is the last
release without an upgrade script.

The only hiccup in the upgrade from 0.75.0 should be that you'll need
to update your botscript to reflect the removal of the debug module.
We'd rather you use supybot-wizard to generate a new botscript, of
course, but if you insist on modifying your existing botscript, take a
look at
<http://cvs.sourceforge.net/viewcvs.py/supybot/supybot/src/template.py?r1=1.20&r2=1.21>
to see what you need to do.


Version 0.75.0

Don't forget to reinstall (i.e., run "python setup.py install" as
root).  Sometimes it even does good to remove the old installation;
$PYTHON/site-packages/supybot can be removed with no problems
whatsoever.

You will need to re-run supybot-wizard and generate a new botscript.

The Infobot plugin has been removed from this release; it's not ready
for prime time.  If you're interested in getting it running (i.e., you
want full Infobot compatibility and aren't satisfied with either
MoobotFactoids or Factoids) then swing over to #supybot and we can
discuss the tests.  We simply don't know enough about Infobot to make
sure our Infobot plugin is an exact replica, and need someone's help
with making the changes necessary for that.
