2004-04-16  Jeremy Fincher  <jemfinch@supybot.org>
	
	* Version 0.77.2!
	
	* Fixed numerous bugs, high and low, big and small and
	in-between.  Definitely worthy of a release.
	
	* Added supybot.plugins.ChannelLogger.includeNetworkName, so the
	logs aren't strangified when relaying between channels.
	
	* Added a --capability option to User.list, to allow people to
	list all the users possessing a certain capability.  The main
	reason this was added is so jemfinch can tell who owns which
	Supybots on #supybot :)
	
	* Added Utilities.success, mostly for making aliases such that
	they can respond with success if no errors were encountered in
	any nested commands.
	
	* Changed the name of the new filter, colorstrip, to be
	stripcolor.  Better now than after it was highly established :)
	
	* Added configuration variables
	supybot.plugins.Services.NickServ.password (which replaces the
	old supybot.plugins.Services.password) for specifying the
	NickServ password, as well as
	supybot.plugins.Services.ChanServ.{op,halfop,voice}, which
	determine what the bot should request of ChanServ when it
	identifies or joins a channel.  These latter variables are, of
	course, channel variables.

	* Added configuration variable
	supybot.plugins.Babelfish.languages (which replaces the old
	supybot.plugins.Babelfish.disabledLanguages) for specifying
	which languages will be translated/spoken.
	
	* Fixed bug #863601, plugin BadWords fails on color codes.

	* Replaced Sourceforge.{rfe,bug} with Sourceforge.tracker, which
	can query any tracker type (not just RFEs and bugs) and responds
	with more information, a la trackerSnarfer.

	* Added supybot.log.individualPluginLogfiles, which determines
	whether plugin logs will be logged to their individual logfiles
	in addition to the misc.log logfile.
	
	* Added supybot.plugins.WordStats.ignoreQueries, which, when
	true, makes the bot ignore queries (and not increment its word
	statistics).
	
	* Added the LogToIrc plugin, for sending logs to an IRC
	channel or nick.  Useful for traceback notification and whatnot.
	
	* Changed supybot.log.timestampFormat to specially handle the
	empty string -- if it's set to the empty string, it will log
	times in seconds-since-epoch format.
	
	* Added supybot.plugins.Weather.convert, which determines whether
	or not Weather.{weather,cnn,ham} will convert temperature to the
	configured temperatureUnit.

	* Changed User.setpassword not to require the <old password> to
	be correct if the requesting user has the owner capability (and
	isn't the owner himself).
	
	* Added ircutils.strip{Bold,Reverse,Underline,Formatting}, which
	will remove the specified formatting or all forms of formatting
	in the case of stripFormatting.

	
2004-04-09  Jeremy Fincher  <jemfinch@supybot.org>
	
	* Version 0.77.1!
	
	* Added supybot.reply.errorWithNotice to make the bot give its
	error messages in a notice.
	
	* Added Filter.colorstrip, an outfilter that strips all color
	codes from messages.

	* Added supybot.plugins.BadWords.{replaceMethod, nastyChars,
	simpleReplacement, requireWordBoundaries}; see the associated
	help strings to find out what they do.
	
	* Added supybot.plugins.Babelfish.disabledLanguages, to disable
	certain languages from being translated/spoken.

	* Added supybot.reply.maximumMores, to give users the ability to
	set the maximum number of "more" chunks replies will generate.
	
	* Added supybot.reply.truncate, to turn off the normal chunking
	of replies that later can be retrieved with the more command.
	Setting this variable to On means that no chunks will ever be
	created.
	
	* Added supybot.plugins.Enforcer.takeRevengeOnOps, which makes
	the bot even take revenge on #channel,ops who try to violate the
	channel configuration.  Of course, such people can change the
	channel configuration to their bidding, but it's a decent
	protection against errant botscripts or something.
	
	* Added supybot.plugins.Channels.alwaysRejoin, to make the bot
	always rejoin when it's kicked.
	
	* Added supybot.databases.users.hash, allowing those running bots
	to specify the default hashed/unhashed state of user passwords in
	the config file.
	
	* Added Debian.bug, which retrieve bug info from Debian's BTS.

	* Changed Relay.names to Relay.nicks, to be consistent with
	Channel.nicks.
	
	* Added supybot.brackets, a configuration variable for specifying
	which set of matching brackets to use for nested commands.  Valid
	values are [] (the default), {}, <>, and ().
	
	* Added a configuration variable to ChannelLogger, timestamp,
	which determines whether the bot will timestamp its logfiles.
	This is a channel-specific variable, of course.
	
	* Updated ChannelLogger not to log messages starting with
	[nolog], in order to allow private information to remain private.

	* Added a configuration variable to ChannelLogger,
	flushImmediately, to cause all channel logs to be flushed every
	time they're modified, for those people who like to read the logs
	through tail -f or something similar.
	
	* Updated WordStats to allow removing of tracked words.

	* Updated Seen.seen to accept no arguments and return the last
	message spoken by anyone.

	* Updated the Herald plugin to use the standard substitute until
	we get it updated to use commands as heralds instead of plain
	strings.

	* Updated echo to use the standard substitute on its reply.

	* Updated Network.whois so that it can now retrieve
	information on all domains.

	* Updated the Weather plugin to be retrieve weather from either
	hamweather.net or cnn.com.  Also added
	supybot.plugins.Weather.{command,temperatureUnit} so that you can
	specify which command (Weather.cnn or Weather.ham) to use when
	Weather.weather is called and in which unit (C, F, K) to report
	the weather.

	* Updated standard replies (such as supybot.replies.success, etc.)
	to use the standard substitute (such as $nick, $who, $channel,
	etc.) in their text.

	* Fixed snarfers to respect lobotomies.

	* Fixed Admin.join not to add the channel to the supybot.channels
	registry entry if joining the channel wasn't successful.

2004-02-20  Jeremy Fincher  <jemfinch@supybot.org>

	* Version 0.77.0!

	* Changed the format of the user and channel databases to
	something much more readable and user-editable.  Be sure, if
	you're upgrading, to run tools/ircdbConvert.py on your user and
	channel databases *BEFORE* installing the new version.

	* Updated almost every document we have, and added a
	GETTING_STARTED document.  Yay!

	* Added several new options for Channel.kban: --exact, --nick,
	--user, --host, for more flexibility in determining what the
	banmask is.

	* Added a Scheduler plugin for scheduling events to occur at
	specific times.

	* Added a Herald plugin for announcing to the channel the arrival
	of certain users.

	* Changed the reply method of the irc object given to plugins not
	to require a msg object.

	* Added inter-factoid references for MoobotFactoids.  Simply
	define a factoid as "see <factoid-key>" (and nothing else) and it
	will automatically go pick up the value for that factoid and
	display it in its place.  Sort of a "symlink" for MoobotFactoids.

	* Added the ability to reply to factoids without the "whatis" in
	the Factoids plugin.  Now, you can use "@foo" instead of "@whatis
	foo".

	* Added --{from,to} and --sent options to Note.sent.

	* Changed Note.get to simply be "note".  Instead of "note get
	145", you should use "note 145".

	* Changed channel capabilities to use a comma to separate the
	channel from the capability instead of a period.  This is because
	channels can include periods (but not commas) and since we now
	allow "plugin.command" capabilities, there's no way to know
	whether a given dot is separating the channel from the capability
	or the plugin from the command.

	* Removed Admin.setprefixchar, since it's unneeded with the new
	configuration.

	* Removed Status.bestuptime, since it was buggy and no one felt
	like maintaining it.

	* Added Http.cyborg, a fun little command for getting cyborg
	abbreviations for names.

	* Added Sourceforge.totalbugs and Sourceforge.totalrfes

	* Removed Owner.{set,unset} since they matter not.

	* Made the smileys and frowns configurable in ChannelDB.

	* Added a vast array of new configurables -- check out the various
	config commands in Configurable plugins to see.

	* Added better error reporting for Admin.join, explaining to the
	user if the bot can't join the channel.

	* Added a title-snarfer to the URL plugin.

	* Added Relay.command, a command for sending commands to the bot
	on a different network.

	* Added Bugzilla.search, a new command for searching a bugzilla
	installation

	* Added an INVITE handler in Admin, allowing users with the admin
	capability to INVITE the bot to a channel.  There's also a config
	variable, alwaysJoinOnInvite, that will cause the bot to join
	a channel whenever someone invites it to a channel, not just users
	with the admin capability.

	* Added conf.requireChannelCommandsToBeSentInChannel for requiring
	all channel-related commands to be sent in the channel.

	* Added conf.followIdentificationThroughNickChanges for having the
	bot update user's identified hostmask when they change nicks.

	* Added conf.replyWhenNotAddressed, a configuration variable for
	having the bot always attempt to parse a message as a command.

	* Added conf.replyWhenAddressedByNick, a configuration variable
	for having the bot *not* respond when addressed by his nick.

	* Added conf.replyWithNickPrefix, a configuration variable for
	having the bot not prefix the nick of the person giving a command
	to the reply.

	* Changed all "zegrep" stuff to "zgrep -e" stuff, since zegrep is
	on fewer platforms than zgrep.

2003-12-12 Jeremy Fincher <jemfinch@supybot.org>

	* Version 0.76.1!  The birthday release!

	* Fixed a bug in irclib.py that could cause the bot to loop,
	connecting and disconnecting from the server because it didn't
	think the server responded to its PING.

	* Fixed a bug in the Services implementation that could cause
	the bot to continually loop, connecting and disconnecting from the
	server.

	* Fixed Misc.help to follow the same default plugin rules that the
	rest of the bot follows.

	* Added better error reporting to Admin.join, so the various error
	conditions that might make the bot incapable of joining a channel
	will be reported.

	* Updated RootWarner to be configurable, offering each channel the
	ability to define whether or not people who IRC as root will be
	warned, what that warning will be, and whether or not they should
	be kicked.

	* Added a configurable 'topic-sync' to the Relay plugin to
	determine whether the topics of the two channels should be kept
	synchronized.

	* Added Lookup.search for searching the various loaded lookups.

	* Added Topic.reorder, a new command for reordering the topics in a
        specific manner.

	* Added Topic.list, a new command for listing the topics in a
	channel (mostly in order to help out with Topic.reorder :))

	* Added Http.extension, a new command to retrieve file extension
	information from filext.com.

	* Updated Todo.remove to allow removing multiple taskids

	* Updated Relay.whois to include a user's away status and identified
        state, if the server supports it.

	* Added utils.sorted, which does what list.sorted will do when 2.4
	is released.

	* Added ircutils.isCtcp, for determining whether or not a message
	is a CTCP message.

2003-12-6  Jeremy Fincher  <jemfinch@supybot.org>

	* Version 0.76.0!

	* Added a "trusted" capability that defaults to off (-trusted) and
	is required for Utilities.re (with which it's possible to DoS the
	bot) and for the new Math.icalc (with which it is trivially
	possible to DoS the bot).

	* Added Math.icalc, a new command for doing integer arithmetic.
	It requires the "trusted" capability.

	* Added the Fun.ping command, because MozBot has it.

	* Added Note.unsend command, to allow users to "unsend" notes
	they've sent but whose recipient has not yet read.

	* Added Channel.{deop,devoice,dehalfop,kick}.

	* Added Http.size and Http.doctype and Http.headers to retrieve
	various meta-information on URLs.

	* Added a ranking to ChannelDB.wordstats.

	* Added Karma.most for determining various "mosts" in the Karma
	database.

	* Added User.list command to list registered users.

	* Added 'roulette' command to Fun plugin.

	* Added a Channel.lobotomies command to list the channels in which
	the bot is lobotomized.

	* Added a swap function to Math.rpn.

	* Changed the name of User.changeusername to User.changename.

	* Changed the logging infrastructure significantly; each plugin
	now has its own logger (and thus logfile), in addition to being
	logged in the main logfile.

	* Fixed bug in which the bot wouldn't rejoin channels after a
	reconnect.  Thank the Lord for tcpkill :)

	* Fixed Http.freshmeat for projects with a space in their names.

	* Changed RSS so RSS feed commands may be added while the bot is
	running, and so added RSS feed commands are in the RSS plugin.

	* Changed Lookup so added lookups are added in the Lookup plugin
	itself so there's no dependency on Alias, and so loaded lookups
	can be seen via 'list Lookup'.

	* Fixed bug #850931 as well as several other minor bugs in
	Utilities.re.

	* Fixed bug #851254, Factoids.whatis didn't work on numeric keys.

	* Added the ability to turn on/off the showing of ids in FunDB
	excuse/insult/praise/lart.

	* Added the to= keyword argument to the various reply functions to
	you can specify a target to send the message to.

	* Changed socketDrivers to allow more time (10x more, to be exact)
	for connecting to the network than for the normal read.

	* Fixed a bug in Http.weather that would cause an ugly error
	message for a command like "weather hell".

	* Added the number of strings to the Fun.object output.

	* Fixed bug in RSS.configure; no aliases could be added.

	* Changed Alias.freeze to Alias.lock.

	* Fixed sorting in Status' uptime database.

	* Updated the Gameknot tests for expired games, and updated the
	Gameknot plugin to handle such links in its snarfer.

	* Added a 'server' attribute to Irc objects to unify the way to
	access such information.

	* Added revision command for finding out the revision of the files
	in a running bot; also added __revision__ strings so CVS would be 
	happy to keep such information for us :)

	* Fixed bug #848475 -- bad error message from regexp-expecting
	commands.

	* Stopped listing the plugin dispatcher command in the list of
	commands for that plugin.

	* Fixed bug in Gameknot.gkstats when retrieving the stats for
	users who haven't yet played a game.

	* Added a numUsers() method to ircdb.UsersDB (ircdb.users).

2003-11-18  Jeremy Fincher  <jemfinch@users.sf.net>

	* Changed commands so that plugins no longer have to make sure
	that their commands are unique within the bot.  Ambiguous commands
	will reply with an error message and instruct the user to
	disambiguate the command by prefixing with the appropriate plugin
	name.. Many commands that formerly contained the plugin name (or a
	portion thereof) have had it removed, and many plugins have had
	their names changed so prefixing a command with the plugin name is
	less bulky.  Rather than list each individual example, you can
	read the plugin documentation posted at ***TODO***

	* Renamed numerous plugins: OwnerCommands became Owner,
	AdminCommands became Admin, ChannelCommands became Channel,
	MiscCommands became Misc, UserCommands became User, URLSnarfer
	became URL, Notes became Note, FunCommands became Fun, IMDB became
	Movies, and Aliases became Alias.

	* Made aliases persistent across reloads/bot restarts.  You should
	probably change your botscripts not to add the aliases onStart, but
	(assuming those aliases don't change) it should still work fine.

	* Added the ability for users to specify that their passwords
	should be hashed on disk.

	* Added MoobotFactoids plugin for moobot-style factoids (which are
	meant to mimic blootbot-style factoids).  People used to
	traditional IRC bot factoids plugins will probably find this
	plugin more to their taste than Factoids.

	* Added Ebay plugin for snarfing eBay URLs as well as getting info on
	certain auctions.

	* Added monitoring of occurrences of certain words on a per-user
	basis, adding two new commands to ChannelDB (addword and
	wordstats).

	* Added Bugzilla module for accessing various data in Bugzilla
	pages.

	* Added QuoteGrabs module which allows people to grab interesting
	quotes from other people and store them in the bot for later retrieval
	(also optionally have the bot randomly snarf quotes).

	* Added a "change" command to change factoid values in the Factoids
	plugin.

	* Added Dunno plugin as an optional replacement for the boring 'no
	such command' response.

	* Changed FundB to allow accessing excuses, larts, and praises by
	id.

	* Added substitutions for 'me' and 'my' in insult/praise/lart.

	* Added 'change' and 'old' commands for News.

	* Added ASPN Python Cookbook URL snarfer.

	* Moved karma out of ChannelDB and into its own Karma plugin.

	* Moved uptime-related commands to from FunDB to the Status plugin.

	* Renamed the Network.internic command to whois, since we can now fix
	ambiguity by prefixing the plugin name.

	* Removed the "googlesite" function.

	* Removed "dictserver" command in favor of using the Configurable
	framework with the Dict plugin instead.

	* Removed TwistedCommands plugin to the sandbox; the one command
	it provided (dict) is now better provided in the Dict plugin.

	* Removed the Moobot plugin (the commands were moved to the Fun
	plugin or dropped entirely).

	* Removed all example strings from plugins.  To be replaced with an
	automated process later.

	* Converted several plugins to the new Configurable plugin type
	Plugins modified include Bugzilla, ChannelDB, Dict, Ebay,
	Enforcer, Gameknot, Google, Python, Relay, and URL (formerly
	URLSnarfer).

	* Changed ChannelDB database to use integer user ids instead of text
	usernames.

	* Changed Http.geekquote to use multiline geekquotes (and removed
	the option to do so, since it's now the default).

	* Added a --id switch to geekquote to pick a specific geekquote.

	* Changed most commands in News to require the 'news' capability.

	* Changed Relay.names output to show (and sort by) status in the
	channel.

	* Removed 'relaycolor' command in favor of Configurable framework.

	* Added total memory usage to 'cpustats' output for several *nix
	platforms.

	* Removed the total percentage of CPU time from 'cpustats'.  Not
	only was it inaccurate, but we needed the room for memory stats.

	* Changed Topic.shuffle to ensure that the topic is actually
	shuffled.

	* Changed all commands which take an index (various Topic and
	Factoids commands) to index from 1 instead of 0.

	* Fixed several bugs in Unix.spell whereby the bot could be
	frozen.

	* Changed the name of the "bug" command in the AdminCommands
	plugin to "reportbug" instead.

	* Added QUIT stat-keeping to ChannelDB.

	* Removed the OwnerCommands.say command; it wasn't useful enough,
	and is so easily written that anyone can have it back if they want
	it.

	* Changed OwnerCommands.load (and reload) to be case-insensitive,
	so "load funcommands" works just as well as "load FunCommands".

	* Changed the keyword parameter "needed" to privmsgs.getArgs to be
	"required" instead.  It just sounds better, works with "optional"
	better, and we won't get an oppurtunity later to change it.

	* Updated IrcObjectProxy.reply to allow a "notice" boolean keyword
	to determine whether or not to reply via a notice.

	* Added privmsgs.urlSnarfer, a wrapper around snarfer methods that
	handles both the threading and the limiting of replies so loops
	between two snarfing bots can't happen.

	* Added structures.PersistentDictionary for dictionaries that
	should be saved to a file in repr()ed form.

	* Added structures.TwoWayDictionary for dictionaries that should
	map keys to values and vice versa.

	* Added a curry function to fix.py for doing currying (if you
	don't know what it is, don't worry about it :))

	* Added utils.depluralize to do the opposite of utils.pluralize.

	* Added utils.safeEval for safe evaluation of Python data
	structures (lists, dictionaries, tuples, numbers, strings, etc.,
	but no operations on them).

	* Added utils.saltHash for handling the hashing of passwords with
	a salt.

	* Added plugins.standardSubstitute to do standard substitutions
	for things like $who, $nick, $channel, etc.

	* Added plugins.Configurable, a plugin mixin that allows easy
	specification and persistence of configurable data on a global and
	per-channel basis.

	* Fixed plugins.ChannelDBHandler (and added plugins.DBHandler) to
	be threadsafe, so threaded plugins could still use a database, and
	non-threaded database-using plugins could still receive the
	results of a threaded command.

	* Removed ircutils.privmsgPayload and ircutils.shrinkList, both of
	which existed prior to the addition of more, and aren't needed
	anymore.


2003-10-12  Jeremy Fincher  <jemfinch@users.sf.net>

	* Version 0.73.1!

	* Fixed a bug in Math.{calc,rpn} where certain functions
	("degrees" in particular) that didn't like complex arguments would
	fail on numbers on which they shouldn't.

	* Added an optional "key" argument to ChannelCommands.cycle.

	* Fixed bolding in supybot-wizard.py.

	* Fixed handling of the secure flag by ircdb.IrcUser.setAuth;
	previously it didn't prevent someone with an unmatched hostmask
	from identifying.

	* Fixed imports in the DCC plugin.

	* Fixed a bug where the bot would not reply to nick-addressed
	messages on a channel if his nick wasn't entirely lowercased.

	* Fixed the Relay plugin to relay topic changes; an oversight not
	caught earlier because supybot has for a long time managed our
	topics.

	* Fixed a bug in the Services plugin where the bot would ghost
	himself if his nick didn't match in case the nick given.

	* Added the ability for PrivmsgCommandAndRegexp to have regexps
	that are called *after* callbacks.addressed has been called on the
	message -- see ChannelDB.{increase,decrease}Karma for an example.

	* Fixed bug in supybot-wizard.py where plugins without configure
	functions would raise an uncaught exception.

	* Fixed debincoming to work since the removal of baseplugin; it
	was missing an import.

	* Fixed MiscCommands.doPrivmsg to send an IrcObjectProxyRegexp to
	the replyWhenNotCommand function.

	* Fixed debversion to display the correct output when no matching
	packages were found.

	* Fixed ChannelDB to import conf; karma didn't work otherwise.

	* Fixed a bug in the Enforcer plugin that would cause the bot to
	ban everyone from the channel whenever ChanServ deopped someone.

	* Changed the "whois" command in the Network plugin to "internic"
	instead.

2003-10-05  Jeremy Fincher  <jemfinch@users.sf.net>

	* Version 0.73.0!

	* Added the News plugin, news handling for channels.

	* Changed the initial character of anti capabilities to '-'
	instead of '!'.  '!' can be the initial character in a channel
	name, and so any command using getChannel and accepting a
	capability as its first argument (several in ChannelCommands) will
	have difficulties (the channel then *must* be specified since
	getChannel will consider !capability to be a channel name).  Note
	that this means you'll need to either remove and re-create or edit
	your config files to change ! to - in capabilities.

	* Removed the "cvsup" command; it's been useless since we had a
	global install, and can only serve to confuse.

	* Added a "private" command to MiscCommands to allow users to
	specify that a response should be made in private.

	* Added a "secure" flag to user database records that *requires*
	that one of the user's hostmasks match if the user is to be
	recognized.  This flag may be set with the "setsecure" command.

	* Added a convert command to the Math plugin.  More conversions
	are necessary, if anyone's interested in doing it.  The available
	units are available via the "units" command.

	* Fixed the pydoc command to allow access to standard Python
	modules that are shared libraries rather than pure Python code.

	* Added a "Python" plugin and moved FunCommands.{pydoc,zen} to
	it.

	* Fixed the supybot- scripts to use optparse so they now
	accept many command line options (but most importantly, the --help
	option :))

	* Added a debincoming command to the Debian plugin; it searches
	the available packages at http://incoming.debian.org/

	* Moved the "bug" command from MiscCommands to AdminCommands in 
	order to prevent possible abuse.

	* Changed ChannelDB.seen to default to using nicks; a --user 
	option can be passed to use the old behavior.  Note that this
	means you'll have to update your ChannelDB database; use this
	SQL statement to do so:
	    CREATE TABLE nick_seen (
	    name TEXT UNIQUE ON CONFLICT REPLACE,
	    last_seen TIMESTAMP,
	    last_msg TEXT
	    );

