~progval/limnoria/master

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2009-05-25  James Vega <jamessan@supybot.com>

	* Version 0.83.4.1!

	* Fixed a bug in Factoids where the help could not be retrieved for
	any command.

	* Fixed a bug where Plugin.list wouldn't list any aliases/RSS feeds
	from the Alias/RSS plugins.

	* Updated Google to ensure the third-party json module (different API
	than simplejson) isn't loaded.  Based on a patch from Ricky Zhou.

	* Updated Channel.nicks so it doesn't reply with nicks from secret
	channels outside of that channel.

	* Updated Channel.{op,halfop,voice,deop,dehalfop,devoice} commands so
	they respect the server's "max mode changes per message" setting.

	* Updated utils.str.nItems to accept long as well as int.  Thanks to
	Ricky Zhou for the patch.

2009-05-18  James Vega <jamessan@supybot.com>

	* Version 0.83.4!

	* Fixed a bug where we were attempting to tag a non-existent IrcMsg.

	* Fixed a bug where the Web plugin was not catching the correct
	exception.

	* Fixed a bug where the Protector plugin was attempting to use a
	non-existent variable.

	* Added verbiage to supybot.log.level indicating that it doesn't
	control the logging level for stdout and pointing out the correct
	config variable.

	* Added a new rank command to the ChannelStats plugin.

	* Added a new remove command to the Later plugin.

	* Added new azn and uniud commands to the Filter plugin.

	* Fixed a bug in the Socket driver that could cause it to continually
	attempt to reconnect to a server which is unavailable.

	* Fixed a bug in supybot-wizard that would cause it to abort if the user
	chose to use SSL.

	* Fixed the haveOp context to call getChannel if it wasn't already
	called.

	* Fixed a bug in supybot-test where the entire test run would end if one
	plugin couldn't be loaded.

	* Updated the httpUrl context to prepend 'http://' if that would result
	in a valid HTTP URL.  A noticeable benefit is that users can now call
	"@title slashdot.org" instead of requiring the user to call
	"@title http://slashdot.org".

	* Fixed Supybot to be compatible with Python 2.6

	* Added a note to Owner.defaultplugin's help to point out
	supybot.commands.defaultPlugin.importantPlugins, which affects which
	plugins have priorities over ambiguous command names.

	* Rewrote the Google plugin to use the new AJAX API since Google
	hasn't been giving out new keys for the SOAP API.

	* Added a new translate command to the Google plugin.

	* Fixed a copy/paste error in the help for User.capabilities.

	* Updated Web.title to give a more appropriate message if the URL
	definitely has no title.

	* Fixed irc.reply so prefixNick is not used when action=True.

	* Implemented the command flood prevention, controlled by
	supybot.abuse.flood.command.*, thanks to a patch from nebajoth.

	* Added utils/crypt.py to provide a uniform interface to the Python
	crypt functionality regardless of the Python version being used.

	* Fixed the urlRe and httpUrlRe regexes in utils/web.py to be more
	correct about what they match.  They now match according to RFCs 1034
	and 1738.

	* Updated getSyntax to allow the syntax string to be specified,
	similar to getHelp.

	* Updated getCommandHelp to respect supybot.reply.showSimpleSyntax.

	* Updated Factoids.getCommandHelp to respect
	supybot.reply.showSimpleSyntax.

	* Fixed a bug where getCommandMethod would return methods that weren't
	actually commands.  This was exposed by adding a die Alias.

	* Removed supybot.plugins.Channel.banmask in favor of a general config
	variable, supybot.protocols.irc.banmask.

	* Updated AutoMode to respect supybot.protocols.irc.banmask when
	banning.

	* Updated Channel.ignore.add and Channel.ban.add to respect
	supybot.protocols.irc.banmask.

	* Fixed Channel.kban so that it will fall back to an exact hostmask
	instead of refusing to ban the user when the banmask would also match
	the bot's hostmask.

	* Added the ability to disable ChannelLogger's logging on a
	per-channel basis.

	* Fixed Config so it will respond with an error when the set, get, or
	default commands are called on config groups that don't have values.

	* Added a new config variable, supybot.plugins.AutoMode.owner, which
	can be used to prevent AutoMode behavior from applying to the owner(s)
	(since the owner has all capabilities).

	* Fixed the regex parsing in utils/str.py to correctly handle multiple
	backslashes before the search/replace separator.

	* Renamed supybot.plugins.Google.safeSearch to
	supybot.plugins.Google.searchFilter since the behavior and valid
	values changed as part of the switch to the AJAX API.

	* Updated RSS.announce to have list, add, and remove sub-commands
	instead of the old option-parsing interface.

	* Added a new config variable,
	supybot.plugins.ShrinkUrl.shrinkSnarfer.showDomain, which controls
	whether the shrinkSnarfer displays the domain of the original URL
	along with the shrunken URL.

	* Updated the default value for
	supybot.plugins.ChannelLogger.filenameTimestamp so it sorts
	chronologically.

	* Updated Misc.last to prevent users from retrieving messages from
	channels they aren't in or from private channels when they're in
	another channel.

	* Fixed supybot.directories.plugins so the directory Supybot is
	installed to is not included.  This change makes the config file work
	across Python upgrades without user-intervention.

	* Updated Config.config to show both the global and channel-specific
	value (if it exists) of the variable.

	* Fixed Google.calc to work around a change in Google's HTML.  This
	change should be more resilient to future HTML changes.

	* Fixed a bug where User.set.password could not be used if your
	current hostmask wasn't recognized.

	* Fixed a bug in Limiter where the limit could be set to fewer than
	the current number of users in the channel.

	* Updated String to give a more useful message when decoding a base64
	string fails.

	* Updated User.hostmask.add to require it be called in private since a
	password may be given as part of the command.

	* Updated BadWords to only strip the formatting of messages which have
	a bad word in them.

	* Fixed a bug in the supybot script where it would continue to run
	even if it was unable to create the pidFile.  This could cause
	multiple instances of supybot to run simultaneously if using
	supybot-botchk were being used to keep supybot running.

	* Updated plugins.DB to return a fake database check when generating
	documentation.  This allows the user to generate docs without having
	the required database plugins installed.

	* Updated supybot-plugin-doc to be able to generate reStructuredText.

	* Removed the Insult plugin.

	* Added the Dunno plugin, which can be taught responses to use in
	place of the normal invalid command response.

	* Added the Success plugin, which can be taught responses to use in
	place of the normal operation succeeded response.

	* Updated the data file for Math's convert command.

2007-10-22  James Vega <jamessan@supybot.com>

	* Version 0.83.3!

	* Added the BadWords plugin from supybot-plugins and updated the
	plugin to allow kicking of people who use defined BadWords.

	* Added support for different log levels on stdout vs the log file.

	* Fixed a bug where the bot always reacted to invalid command floods
	even if supybot.abuse.flood.command.invalid indicated not to.
	(Closes: #1716878)

	* Fixed a bug where the RSS plugin would lower-case URLs, thus making
	them impossible to retrieve.  (Closes: #1666786)

	* Fixed ircmsgs.prettyPrint to handle unrecognized commands.
	(Closes: #1630963)

	* Fixed a bug in the Services plugin where the bot would continuously
	send Ghost commands.

	* Fixed Google.calc to handle a change in Google's HTML.

	* Fixed a bug where Plugin.list was listing functions which weren't
	valid commands.

	* Fixed RSS's handling of encodings to eliminate some ascii conversion
	errors.

	* Updated the rssparser using plugins with the renamed and newer
	feedparser 4.1 in order to properly handle Bugzilla RSS feeds.

	* Updated PLUGIN_TUTORIAL to specify that the user needs to import
	Python's random module.

	* Updated the Web plugin so it uses HTMLParser over sgmllib's parser
	since sgmllib's enters an infinite loop on invalid input.

	* Updated getHelp() so callers can pass in the help string.  This is
	used in the Factoids plugin to dynamically generate a help string
	based on a config value.

	* Updated questions.py so bolding is handled better.  User input,
	default values, and defined choices are no longer bolded.

	* Updated String.len to use wrap().  This greatly simplifies the
	command and introduces better argument handling.

	* Updated a few uses of sre to use re if the bot is running under
	Python 2.5.

	* Fixed test cases for mircColor and sorted (thanks dcraven).

	* Updated assertAction's error message to give useful information
	about what went wrong.

2006-07-23  James Vega <jamessan@supybot.com>

	* Version 0.83.2! (A long overdue bugfix release)

	* Added ADVANCED_PLUGIN_CONFIG, ADVANCED_PLUGIN_TESTING, CAPABILITIES,
	USING_UTILS, USING_WRAP, STYLE, and PLUGIN_TUTORIAL docs.

	* Updated the Services plugin such that it will not spam GHOST
	commands faster than once every 60 seconds (or as set by
	supybot.plugins.Services.ghostDelay).

	* Updated the Seen plugin so that performing @seen with a leading
	wildcard will not result in duplicate nicks in the response.

	* Updated RSS to handle the feed's advertised character encoding in
	more of its commands.

	* Updated "Channel.ban list" to show how long until the ban expires.

	* Fixed the bug where addressed karma adjustments would cause the bot
	to crash.

	* Fixed Alias.lock and Alias.unlock to work properly now that the
	alias functions are no longer attributes of the Alias plugin.

	* Fixed a Windows-specific NameError in log.py.

	* Fixed Config.help to actually perform the string substitution of the
	given config name.

	* Replace Twisted with Socket as the default network driver.

	* Added an --ssl option to Network.connect.

	* Added a question about SSL network connections in supybot-wizard.

	* Added recognition of UnrealIRCd's protected users and channelowners
	as ops.

	* Updated URL.last to perform a case-insensitive search.

	* Updated the Author class so it performs the email munging.  This
	prevents munging occurring for punctuation in a person's name.

	* Updated ircutils' color handling to specify a default foreground
	color of white if only a background color is specified.

	* Updated registry.StringWithSpaceOnRight to accept the empty string.

	* Updated registry.StringSurroundedBySpaces to be a single space if
	given an empty string.

	* Updated utils.str.format to recognize digits before the '.' in %f
	formatting.

	* Stop explicitly setting a umask.  Instead we'll just obey the user's
	umask.

2005-09-01  James Vega <jamessan@supybot.com>

	* Version 0.83.1!

	* Fixed a bug in Owner where plugins would not be automatically loaded
	unless the bot was connected to more than one network.

2005-08-30  James Vega <jamessan@supybot.com>

	* Version 0.83.0!

	* Updated the Services plugin to realize it is identified when
	NickServ says that the bot is already identified.

	* Updated Network.whois so that +s channels are only returned when in
	that channel.

	* Updated RSS.info to retrieve the proper information from
	rssparser's results.

	* Updated the RSS plugin to encode the headlines in the proper
	charset, if the feed specifies an encoding.

	* Fixed a bug in Todo.todo when negative priorities are used.

	* Fixed a bug in Web where the entire title was not correctly parsed
	from the web page.

	* Fixed a bug in Web where the title was correctly parsed, but a later
	parsing problem caused the command to not reply with the title.

	* Fixed a bug in Misc.last where the last message in a channel was
	skipped when the command was not called in that channel.

	* Fixed a bug in Channel.ban remove and Channel.ignore remove when
	there were no bans or ignores.

	* Fixed a bug in User.hostmask list when there are no registered
	hostmasks.

	* Changed the prefixName keyword argument to prefixNick.

	* Updated the socket handling to properly detect when an IPV6
	connection should be made.

	* Updated irclib to handle IRCds (like IRCNet) which send a
	MAXLIST-style value for the MAXBAN 005 key.

	* Updated the plugin loading to happen during __init__ instead of when
	receiving the 001 message.  This allows the bot to connect to networks
	that require a CTCP response on connect.

	* Updated the SIGHUP handler to reload the ignoresdb.

	* Fixed a bug in ircutils.isNick so that it no longer allows nicks to
	start with a hyphen.

	* Fixed a bug in the first spec which would cause an error to be
	raised if the first converter failed.


2005-05-30 James Vega <jamessan@supybot.com>

	* Version 0.83.0rc3!

	* Updated Topic such that it can undo the first topic change performed
	in a channel.

	* Removed -O and -OO options for scripts/supybot.

	* Removed password hashing options for scripts/supybot-adduser.

	* Fixed a bug where RSS.remove wasn't removing the feed from
	conf.supybot.plugins.RSS.feeds.

	* Fixed a bug in Topic.set where setting the first topic would change
	the entire topic.

	* Fixed an AttributeError in the Ctcp plugin.

	* Fixed a problem where Supybot would attempt to connect to a network
	it was already connected to.

	* Fixed a problem where a command with the same name as its plugin had
	to be invoked as "plugin command".

	* Fixed an exception when irc.reply was called with a non-string
	argument.

	* Fixed an ImportError in Twisted driver when OpenSSL wasn't
	available.

	* Updated Socket driver to fix some longstanding issues.

	* Added supybot.drivers.maxReconnectWait, which determines the maximum
	amount of time the bot will wait before attempting to reconnect to an
	IRC server.

	* Added utils.python.Synchronized metaclass to ensure synchronized
	access to class methods.

	* Moved utils.changeFunctionName to utils.python.changeFunctionName.


2005-05-12 James Vega <jamessan@supybot.com>

	* Version 0.83.0rc2!

	* Added News, Unix, and Insult plugins which were missing in the
	previous RC.

	* Updated Misc.list to show the full configuration variable name when
	the plugin has no commands.

	* Fixed an HtmlParseError exception in Web's title command and
	titleSnarfer.

	* Fixed an ImportError exception when calling Todo.todo with no
	arguments.

	* Fixed a bug where Channel.{enable,disable} would throw an exception
	if only a command names was specified.

	* Added utils.str.ordinal (patch from genjamin AT gmail DOT com).


2005-05-02 James Vega <jamessan@supybot.com>

	* Version 0.83.0rc1!

	* Added supybot-botchk script.  This script can be run from a
	cron job to make sure your Supybot restarts when the computer it
	runs on is rebooted, and can make sure the bot restarts if it
	ever crashes (which it shouldn't).  It also allows restarting the
	bot without shelling out to the box it runs on; if you quit the
	bot, it'll automatically restart.

	* Added supybot-plugin-doc script, which generates documentation for a
	plugin.

	* Added SSL server support for the Twisted driver.

	* Added Web plugin, which contains most of the commands that were
	in the (formerly included) Http plugin.

	* Added Reply plugin, which contains several commands that were
	in the Misc and Utilities plugins.

	* Added Games plugin, which contains several commands that were
	in the (formerly included) Fun plugin.

	* Added String plugin, which contains several commands that were
	also in the formerly included Fun plugin.

	* Added Topic.fit, which adds a new topic to the end of the
	channel topic, removing topics at the beginning as necessary to
	squeeze the new topic in.

	* Added Seen.any, which reports the last time a person was seen
	at all, rather than just the last time a person said something in
	a PRIVMSG.

	* Added Web.fetch, which replies with the text of the given URL.
	This might be useful in combination with Utilities.re command,
	for pseudo-parsing URLs within aliases.

	* Added Note.next to retrieve the next unread note (patch from Sune
	Foldager.  Come back, Sune!).

	* Updated User.capabilities always to respond in private (for
	owner users) and to prevent non-owner-users from retrieving other
	user's capabilities.

	* Updated Relay.{join,part} so they require the admin capability.

	* Updated Plugin.contributors to pull author/contributor information
	from the plugin in addition to the authors already hard-coded in
	Supybot.

	* Added conf.supybot.protocols.irc.queuing.rateLimit.join to throttle
	how fast Supybot joins channels.

	* Added conf.supybot.plugins.Herald.requireCapability, which specifies
	the capability a user needs to affect another user's herald.

	* Added conf.supybot.plugins.ShrinkUrl.bold, which specifies whether
	the plugin should use bold in its responses.

	* Renamed conf.supybot.plugins.Herald.throttleTime to
	conf.supybot.plugins.Herald.throttle.

	* Renamed conf.supybot.plugins.Herald.throttleTimeAfterPart to
	conf.supybot.plugins.Herald.throttle.afterPart.

	* Renamed the general log file (misc.log) to messages.log.

	* Renamed Google.metagoogle to Google.meta.

	* Renamed conf.supybot.protocols.irc.queueDuplicateMessages to
	conf.supybot.protocols.irc.queuing.duplicates.

	* Updated Alias.add so that alias names can coincide with plugin names.

	* Added netsplit throttling to Herald.  Now if only we could do
	that to Relay...

	* Changed Todo's db format to a single flatfile db per user.

	* Fixed a bug where the nickInChannel converter would add the channel
	to the args list.

	* Fixed some exceptions in RSS.

	* Fixed a problem with RSS not properly escaping feed names.

	* Fixed supybot.utils.str parsing of regular expression separators
	other than / (patch from gcbirzan).

	* Fixed Owner.enable so that commands can actually be re-enabled.

	* Fixed Bug #1190350, incorrect extraction of a website's title.

	* Added various functions to supybot.utils.file (touch, writeLine,
	readLines, chunks).

	* Renamed the 'regexps' attribute in callbacks.PluginRegexp
	(formerly callbacks.PrivmsgCommandAndRegexp) to unaddressedRegexps
	to callbacks.PluginRegexp so as to complement addressedRegexps.

	* Removed the extra argument to utils.str.pluralize which specified
	whether or not to pluralize the string.

	* Changed the order of the arguments to utils.str.nItems.


2005-01-16 James Vega <jamessan@supybot.com>

	* Version 0.80.0!

	* Updated Babelfish to include Dutch, Greek, Russian, and traditional
	Chinese as supported languages.

	* Updated RSS.rss to obey supybot.reply.oneToOne.

	* Updated registry.py to specify which registry value has an improper
	docstring.

	* Fixed a bug in Ebay.auction, the "Current bid" regexp needed to be
	updated.

2005-01-12 James Vega <jamessan@supybot.com>

	* Version 0.80.0rc3!

	* Updated the Geekquote snarfer to snarf qdb.us' links.

	* Fixed a bug in Infobot, mis-typed registry value.

	* Fixed Network.connect to actually use the supplied password.

	* Fixed supybot.databases.plugins.channelSpecific.getChannelLink()
	to return the proper channel link instead of returning the given
	channel.


2005-01-11 James Vega <jamessan@supybot.com>

	* Version 0.80.0rc2!

	* Implemented Observer.remove, which disables and removes the observer
	from all channels.

	* Added supybot.databases.channelSpecific.link.allow to determine
	whether a channel allows other channels to link to its database.

	* Added supybot.plugins.BadWords.stripFormatting, which determines
	whether the bot will strip any formatting before filtering bad words.

	* Added supybot.plugins.Markov.ignoreBotCommands, which determines
	whether the Markov plugin will learn commands given to the bot.

	* Added a Network.driver command, which reports the current driver
	being used.

	* Added an Infobot.update command, which allows the user to import an
	existing Infobot factpack.

	* Added a Topic.replace command, which replaces the given topic with a
	new topic.

	* Added a Note.search command, which allows the user to search for
	notes they have sent or received.

	* Added supybot.databases.channelSpecific.getChannelLink(), which
	returns a channel based on how channels link to each other.

	* Added supybot.plugins.Channel.banmask which specifies the default
	method of generating Channel.kban's banmask.

	* Renamed supybot.databases.plugins.channelSpecific.channel to
	supybot.databases.plugins.channelSpecific.link.

	* Updated RSS.announce such that it adds the arguments to the current
	list of announced feeds instead of overwriting the current list.

	* Update the Google groupsSnarfer to work with Google's beta groups
	website.

	* Updated Network.disconnect to announce that the disconnection
	attempt has started.

	* Updated Debian.bug to handle website changes.

	* Updated Observer.{add,remove} to require the Admin capability.

	* Updated Infobot so that it actually works reasonably well; removed
	the deprecation.

	* Updated Sourceforge to handle changes in the website.

	* Updated UrbanDict to handle changes in the website.

	* Updated plugins.getChannel and plugins.makeChannelFilename to
	properly handle the new channelSpecific database setup.

	* Fixed a bug with ShrinkUrl.ln; the url needed to be urlquoted before
	being passed off to ln-s.net.

	* Fixed some database conversion bugs in fundbConvert.py.

	* Fixed a bug in socketDrivers where reconnection attempts would
	always occur immediately, thus continually blocking the bot.

	* Fixed an exception in registry.OnlySomeString's error method;
	the parent method doesn't accept an argument.

	* Fixed a bug in RSS where announcing the same feed in multiple
	channels would cause improper displaying of the new feeds.


2004-12-22 Jeremy Fincher <jemfinch@supybot.com>

	* Version 0.80.0pre6!

	* Added a Topic.separator command, which replaces the current
	separator with a new separator, changing the topic to reflect the
	change.

	* Changed the supybot.user configuration variable so that if it
	isn't configured, the user will stay up-to-date with the current
	version of the bot.  To take advantage of this, set your
	supybot.user configuration variable to ""

	* Removed the supybot.databases.users.hash configuration
	variable, so all bots hash by default.

	* Fixed a bug with AutoMode's auto-banning feature; a variable
	was misspelled.

	* Fixed a bug with ChannelValues picking up children that aren't
	channels.

	* Fixed Misc.apropos not to be case-sensitive.

	* Fixed bug in User.register; it works now.


2004-12-20 Jeremy Fincher <jemfinch@supybot.com>

	* Version 0.80.0pre5!

	* Added a "shuffle" command to the Utilities plugin, which
	shuffles its arguments.  Useful in combination with
	Utilities.last, which returns the last argument it's given, in
	combination with Utilities.apply, in order to pick a random
	string (think aliases).

	* Added supybot.plugins.Relay.noticeNonPrivmsgs, for making the
	relay plugin use NOTICEs rather than PRIVMSGs to relay
	non-PRIVMSG messages to a channel.  This often affects tab
	coloring in IRC clients and thus makes it so that relay messages
	color the tabs like the actual messages would have.

	* Numerous bug fixes.  Many, many bugs fixed.  Oodles and oodles
	of bugs have been fixed.  Myriad bugs fixed.  Get the idea? :)


2004-12-17 James Vega <jamessan@supybot.org>

	* Version 0.80.0pre4!

	* supybot.databases.plugins.channelSpecific.channel is now a
	channelValue so that individual channels can decide to link their
	databases.

	* Deprecated asyncoreDrivers.  Use twistedDrivers or socketDrivers
	instead.

	* Moved {eval,exec} from Owner.py to Debug.py in the sandbox.

	* Numerous bug fixes.


2004-09-30 Jeremy Fincher <jemfinch@supybot.org>

	* Version 0.80.0pre3!

	* Deprecated FunDB, added two new plugins, Lart and Praise, to
	handle the same features individually for larts and praises.
	There is a script in tools/ that will convert from a FunDB to a
	lart or praise database.

	* Deprecated the Infobot plugin, in expectation of a rewrite.

	* Deprecated the Quotes plugin, since we don't know anyone who
	seriously uses it.  Let us know if you do use it, because it may
	be removed in a future version.

	* Added Karma.{dump,load} for dumping and subsequently loading
	the Karma database.

	* Changed the News database implementation to a flatfile
	database.

	* Removed the tinyurl shrinking code from the URL plugin and put
	it in the ShrinkUrl plugin, and added the ability to use ln-s.net
	as different URL shrinker as well.

	* Added an outFilter to the ShrinkUrl plugin that will shrink any
	outgoing URL that is longer than the minimum length.

	* Added a Freenode plugin as proof-of-concept; the bot can now
	use CAPAB IDENTIFY-MSG to ignore users that aren't identified.

	* Added the ability for the Seen plugin to match nicks with
	wildcards.

	* Added a showLinks configuration option to the RSS plugin to
	show links during announcements (and another such variable for
	non-announcements).

	* Added the spellit, hebrew, and shrink filters to the Filter
	plugin.

	* Added the ability to log to separate directories to
	ChannelLogger.

	* Added the option to Lookup.add to add lookups that don't reply
	with the key.

	* Added "at" and "until" commands to the Time plugin; they're not
	perfect, and they don't parse nearly enough times, but they're
	somewhat tolerable for now.

	* Added a Sourceforge.stats command.

	* Added single-letter commands to the Words plugin when a hangman
	game is active.

	* Added supybot.plugins.Services.disabledNetworks, to disable the
	Services plugin specific networks.

	* Added supybot.protocols.irc.vhost, for binding to a vhost
	before connecting.

	* Added supybot.reply.format.time.elapsed.short, offering now a
	"short" formatting for elapsed times.

	* Added supybot.commands.quotes, for configuring which quotes can
	be used to quote arguments to commands.

	* Added supybot.databases.plugins.channelSpecific.channel,
	specifying the "default channel" for non-channel-specific
	databases to use.

	* Moved the supybot.humanTimestampFormat configuration variable
	to supybot.reply.format.time.

	* Added a configuration variable determining the maximum length
	of replies internally, so they can't suck up as much CPU as they
	would otherwise.

	* Added a configuration variable determining the maximum nesting
	depth allowed, so exceedingly nested commands will be stopped
	before they're executed.

	* Added configuration variables concerning the formats used by
	the central and plugin logging facilities.

	* Added a configuration variable determining the quote characters
	used by the bot to quote literal strings.

	* Added support for line-wrapping the registry configuration
	file.

	* Moved supybot.reply.{brackets,pipeSyntax} to
	supybot.commands.nested.

	* Fixed a longstanding bug with the bot "forgetting"
	channel-specific configuration variables if they weren't
	exercised during the duration of the bot's uptime.

	* Fixed renames so they're finally persistent.

	* Fixed a bug having to do with Note and unsent notes.

	* Fixed several bugs in the interaction of Infobot with other
	plugins.

	* Added commands.wrap, the new method for wrapping commands and
	handling type validation errors consistently throughout the bot.

	* Upgraded many of the outside projects we include to their
	newest versions.


2004-09-17 James Vega <jamessan@users.sf.net>

	* Version 0.80.0pre2!

	* Added supybot.plugins.Google.colorfulSnarfer, which determines
	whether the word 'google' in the bot's output will be made colorful
	(like Google's logo).

	* Added the Time plugin, to hold all of our Time related commands.

	* Added max() and min() to Math.calc.

	* Added Unix.pid, which allows the Owner to retrieve the pid of the
	bot's process.

	* Added supybot.plugins.Sourceforge.enableSpecificTrackerCommands,
	which enables the rfe, bug, and patch commands.

	* Added Topic.topic, which returns the current topic of the channel.

	* Updated conf.Databases to use a more sane database ordering and
	include anydbm.

	* Updated various plugins to use our new-style database abstraction.
	Plugin databases using this new-style will be named Plugin.dbtype.db.

2004-09-12 Jeremy Fincher <jemfinch@supybot.org>

	* Version 0.80.0pre1!

	* Added the facility to supporting several different database
	implementations in a plugin, allowing the user to specify which
	databases are supported as well as in what order of preference.

	* Added the Insult plugin, for colorful, creative insults.

	* Added the UrbanDict plugin, for defining words based on
	UrbanDictionary.com.

	* Added the Observer plugin, for watching a channel for regexps
	and running commands when the bot sees such regexps.

	* Moved Http.geekquote to a new Geekquote plugin, added a command
	for using qdb.us, and added a snarfer.

	* Added a SuperIgnore plugin, a good example of an inFilter and a
	way to completely, totally ignore people.

	* Changed the name of the Network plugin to Internet.

	* Added a new Network plugin, and moved some commands from Owner,
	Misc, and Relay to it.

	* Added CTCP flood protection.

	* Added a supybot.plugins.Karma.allowUnaddressedKarma
	configuration variable, for allowing karma increments/decrements
	similar to Infobot.

	* Added supybot.reply.whenAddressedBy.nicks, to allow users to
	specify a list of nicks to which the bot will respond as if they
	were its own nick.

	* Added the ability to support multiple-word karma
	increments/decrements.

	* Changed Owner.rename to be handled persistently; now renames
	work across restarts of the bot or reloads of a plugin.

	* Changed Misc.last to include a timestamp for when the message
	was sent.

	* Added the Channel.alert command, to send all currently
	connected ops on a channel a message.

	* Changed the MoobotFactoids plugin to allow commands to be
	nested in factoids definitions and searches.

	* Removed the futurama command in favor of adding a
	futurama.supyfact file to supybot-data.

	* Improved the Http.kernel command, showing more kernel types.

	* Added a new contributors command and a way of storing
	contributors and their contributions in a plugin.

	* Changed the name of Anonymous.action to Anonymous.do, to be
	more consistent with "say" and other bots (MozBot, iirc).

	* Added the ability for channel bans and ignores and global
	ignores to have expiration times.

	* Added invalid command flood protection.

	* Changed RSS' headlines output to bold the separators in order
	to make it easier to distinguish the headlines.

	* Added a --no-network option to supybot-wizard.

	* Added several attributes to IrcMsg objects as they pass through
	the bot; currently we tag them with receivedAt, receivedBy, and
	receivedOn.

	* Added RichReplyMethods.errorInvalid, a nice helper method for
	sending errors about invalid values.

	* Changed the --nonetwork and --noplugins options to test/test.py
	to --no-network and --no-plugins.

	* Changed plugins.makeChannelFilename, swapping the order of the
	channel and filename arguments and making the channel optional.

	* Changed the first argument to callbacks.Privmsg.callCommand to
	be a name rather than a method, for greater justice.

	* Added a new mechanism for ordering plugins (subclasses of
	callbacks.Privmsg) which is much more flexible than a simple
	priority system.


2004-09-06 James Vega <jamessan@users.sf.net>

	* Version 0.79.9999!

	* Added stripFormatting option to ChannelLogger plugin, which
	determines whether non-printable formatting characters are logged.

	* Added Sourceforge.patches command to complement the current bugs
	and rfes commands.

	* Added abs() to Math.calc.

	* Improved the interface for Config.list. Now groups and values
	are listed, with groups being denoted by a leading @.

	* Improved Config.config such that the user can specify the entire
	config variable name (conf.supybot....).

	* Fixed a bug where ChannelLogger wouldn't log ignored nicks.

	* Fixed an incorrect path in INSTALL.

	* Fixed some missing imports in Unix's configure method.

	* Fixed a bug where an owner could publically retrieve a private
	configuration variable.

	* Fixed an exception when trying to remove non-existent Heralds.

	* Fixed an exception in RSS.getHeadlines.

	* Fixed a couple bugs in Poll, when retrieving the Poll id.

	* Fixed a problem with trying to use socket.inet_pton under
	Windows; Python doesn't build their Win32 port with IPV6 support,
	so we have to brute-force IPV6 detection.

	* Fixed a few bugs with how Infobot handled the SQLite db.

	* Fixed others/convertcore.py so that liter-based units are
	properly capitalized (L not l) and use 1000 as the conversion rate
	for MB, KB, etc. since MiB, KiB, etc. are also known units.

	* Fixed a bug where Infobot would confirm an unaddressed factoid
	definition.

	* Fixed a problem where Google.stats didn't keep track of all
	searches.


2004-08-31 Jeremy Fincher <jemfinch@supybot.org>

	* Version 0.79.999!

	* Added the ability to send long fortunes line-by-line rather
	than all in one (or several) messages; it will do this if
	supybot.reply.oneToOne is set to False.

	* Added many configuration variables to the Unix plugin, allowing
	configurable commands and options to those commands.

	* Changed the output of Config.list to show groups with a
	preceding @, rather than use the --groups option.

	* Changed the Google.stats (formerly Google.info) command to be
	persistent, using the registry to record old values for the
	number of searches made and the number of seconds Google has
	spent searching for the bot.

	* Added module __revision__ logging to our exception logs, for
	more information in bug reports.

	* Fixed a bug with asyncoreDrivers' handling of reconnects; it
	would not reconnect when commanded to if it had reconnected
	before.

	* Fixed several bugs where the bot was testing nicks for
	equivalence without first normalizing them, leading to some false
	negatives.

	* Fixed a bug with the handling of
	supybot.reply.withNoticeWhenPrivate so all private messages
	really are replied to with a notice.

	* Fixed Http.geekquote to match the current bash.org layout.
	Also, made sure all ids are valid ids before requesting a quote
	(apparently bash.org is returning a certain quote for all invalid
	ids).

	* Fixed a bad regular expression in the Ebay plugin which could
	cause the bot to suck up 100% CPU for a signficant (perhaps
	practically infinite) amount of time.

	* Fixed a bug where the bot would sometimes reconnect to a
	network after being told to disconnect.

	* Fixed an uncaught exception in Owner.connect when the user
	forgets the network name


2004-08-30  Jeremy Fincher  <jemfinch@supybot.org>

	* Version 0.79.99!  We're getting asymptotically closer to
	0.80.0!

	* Added Anonymous.action, to anonymously perform actions in a
	specified channel.

	* Added a Karma.clear, so channel ops can clear the karma for a
	given name.

	* Added a Topic.redo, to redo the last undo.

	* Added supybot.protocols.irc.umodes, to allow the bot to set
	user modes upon connecting to a network.

	* Fixed numerous bugs involved with disconnecting, reconnecting,
	and using multiple networks.

	* Fixed a bug that would prevent the bot from quitting except via
	multiple Ctrl-Cs.

	* Fixed some mis-interaction between the Karma plugin and the
	Infobot plugin.

	* Fixed RSS's announcements.

	* Fixed bug in Later whereby no more than one message could be
	queued for a nick.

	* Fixed Services.configure, as well as several bugs in Services
	which sometimes prevented the bot from identifying.

	* Fixed bugs in the Poll module that caused the list and poll
	commands not to work.

	* Fixed the ebay snarfer.

	* Fixed exception raised by some CTCP messages when the URL
	plugin was loaded.

	* Fixed Debian.version.

	* Fixed Amazon's use of unicode.


2004-08-27  Jeremy Fincher  <jemfinch@supybot.org>

	* Version 0.79.9!

	* Added Infobot, a plugin to emulate Infobot.

	* Added Anonymous, a plugin for anonymously saying things to a
	channel.

	* Added Tail, a plugin which will tail logfiles and send the
	new lines to a configurable list of targets.

	* Added NickCapture, a plugin which tries to recapture a nick
	that's being used by someone else, both by watching for QUITs
	with that nick and by checking via ISON for that nick.

	* Changed the behavior of "seen" with the --user switch instead to
	be a separated command, Seen.user.

	* Changed the behavior of "seen" with no arguments instead to be
	a separate command, Seen.last.

	* Moved the connect and disconnect commands from the Relay plugin
	to the Owner plugin, so a Supybot can be on multiple networks
	without ever loading the Relay plugin.

	* Added relay bot detection to the Relay plugin.  Now, rather
	than get involved in a loop with another relay bot, a Supybot
	will (if it has ops) rain down its wrath upon the offender.

	* Added supybot.plugins.Quotes.requireRegistration, which
	determines whether a user need be registered to add Quotes to
	the Quotes database.

	* Added supybot.plugins.RSS.showLinks, which determines whether
	the bot will show links to the RSS headlines along with the
	normally displayed titles.

	* Removed supybot.reply.withPrivateNotice and split it into two
	separate configuration variables, supybot.reply.withNotice and
	supybot.reply.inPrivate.

	* Added supybot.log.stdout.wrap, to allow optional (defaulting to
	True) wrapping of stdout logs.

	* Added supybot.databases.plugins.channelSpecific, a value that
	determines whether the database used for channel-based plugins
	will be a channel-specific database or a global database.  This
	value, ironically enough, is channel-specific -- channels can
	each individually decide to be "part of the Borg" or to "be their
	own channel."  The default, of course, is for databases to be
	channel-specific.

	* Changed the way channel databases are handled; instead of
	generating #channel-<name> files, instead we create a subdirectory
	of the data directory named #channel, and then stick all the files
	in there.  It's a much cleaner way to do things, in our opinion.

	* Added several configuration variables to the Status plugin to
	determine how verbose the cpu command is.  These are, of course,
	channel-specific.

	* Added a configuration variable to the Dunno plugin,
	supybot.plugins.Dunno.prefixNick, which determines whether the
	bot will prefix the nick of the user giving an invalid command to
	its "dunno" response.  Formerly, it never would; the default for
	this variable, however, is True, because that's how the rest of
	Supybot works.

	* Added Owner.rename, a command for renaming commands in other
	plugins.

	* Added Config.channel, for getting/setting channel configuration
	variables.

	* Fixed the problem with channels with dots or colons in them
	raising exceptions whenever the registry was accessed.

	* Changed Fun.eightball to provide a similar answer for a question
	asked multiple times.

	* Changed Fun.roulette to use a 6-barrel revolver.

	* Changed Bugzilla to use the registry, rather than a custom
	flatfile database format.

	* Added the KeepAlive plugin, to send useless keepalive messages
	to someone every some period.  It's mostly just because we
	noticed that MozBot had one, and we couldn't allow ourselves to
	be outdone.

	* Changed the URL plugin to use flatfiles rather than SQLite
	database.  Also reduced the functionality of the last command by
	removing some options that no one ever really used, and removed
	the random command (who uses that anyway?)

	* Changed the Words plugin not to use SQLite.  We lose the
	anagram command, but crossword and hangman become much easier to
	use, since all the user has to do is put a words file in
	data/words.

	* Changed the Relay plugin to rely only on the registry, allowing
	it to start and join all networks and channels with no user/owner
	interaction at all.  Also, removed the Relay.say and
	Relay.reconnect commands, since both can be accomplished easily
	using the Relay.command command in combination with
	Owner.reconnect and Anonymous.say commands.

	* Added supybot.reply.withNoticeWhenPrivate, to make the bot
	reply with a notice when it privately messages a user -- this
	generally means that the user's client won't open a query window,
	which may be nice.  Do note that users can override this setting
	via the user registry variable of the same name.

	* Added supybot.nick.alternates, which allows a list of alternate
	nicks to try, in order, if the primary nick (supybot.nick) is
	taken.  Also added a nick-perturbation function that will change
	supybot.nick if there are no alternates or if they're all taken
	as well.  As a result, removed supybot.nickmods.

	* Changed ChannelLogger to log channels to logs/ChannelLogger,
	rather than simply logs.

	* Added the ChannelRelay plugin, to relay messages between two
	channels.  This might be useful for people who want to forward
	CVS update messages from one channel (such as #commits) to
	another.

	* Added Channel.mode, to set modes in the channel, Channel.limit,
	to set the channel limit, Channel.moderate and
	Channel.unmoderate, to set +m and -m, respectively, and
	Channel.key to set or unset the channel keyword.

	* Added a new plugin, Format, which offers several commands for
	formatting strings on IRC.  Moved several commands from to it
	from the Utilities plugin.

	* Improved the functionality of RSS.announce.  Calling it with
	no arguments now lists the currently announced feeds.  Removing
	feeds is done by specifying the --remove option.

	* Added a reconnect command to the Owner plugin.

	* Added aol and rainbow filters to the Filter plugin.

	* Added Nickometer plugin, a translation of Infobot's Nickometer.

	* Added multiple recipient support for notes.

	* Added BadWords.list, to list the bad words currently being
	censored by the bot.

	* Changed Misc.help to allow plugins to specify their own help,
	and added help for several of the more confusing plugins.

	* Added Dunno.stats, to return the number of dunnos in the
	database.

	* Added the Currency plugin, to perform currency conversions.

	* Added conf.supybot.plugins.Karma.allowSelfRating, which
	determines whether users are allowed to adjust the karma of their
	current nick.

	* Added --nolimit option to Misc.last, which causes it to return
	all matches that are in the history.

	* Added conf.supybot.plugins.Herald.defaultHerald, which provides
	a default herald to use for unregistered users.  Herald.default
	was also added as a friendly interface to managing the
	defaultHerald.

	* Added Weather.wunder, which uses wunderground.com to report the
	current weather status.

	* Changed supybot.defaultCapabilities to be a space-separated
	list rather than a comma-separated list.  Also added a check to
	make sure -owner was in supybot.defaultCapabilities, and to
	require a command-line option to allow it not to be present.

	* Added Sourceforge.fight, which returns the list of specified
	projects and their bug/rfe count in sorted order, least to most.

	* Added Utilities.reply for replying to a person with text.  Like
	echo, but it prepends the nick like the bot normally does.

	* Changed Utilities.success to accept an optional <text> argument
	for text to be appended to the success message.

	* Changed User.{addhostmask,removehostmask,register,unregister}
	to allow owner users to do what they will with their users.  You
	can now add hostmasks, remove hostmasks, register users, and
	unregister users willy-nilly.

	* Changed and moved several configuration variables.
	supybot.{throttleTime,maxHistoryLength,pingServer,pingInterval}
	all moved to supybot.protocols.irc; supybot.httpPeekSize moved to
	supybot.protocols.http; supybot.threadAllCommands moved to
	supybot.debug.threadAllCommands, and probably a few others I
	forgot to mention.

	* Added Http.zipinfo, which returns a veritable plethora of
	information about the supplied zip code.

	* Added a configuration variable for every plugin, "public", that
	determines whether the plugin is considered public (i.e., whether
	it will show up in the list command when the list command isn't
	given the --private option).

	* Added Misc.author, a command for finding out which author
	claims a particular plugin.

	* Added Topic configuration supybot.plugins.Topic.format template
	string allowing full customization of the Topic items.

	* Added Topic.lock and Topic.unlock, for locking and unlocking
	the topic (setting +t or -t, respectively)

	* Added Topic.restore, for restoring the topic to the last-sent
	topic.  Useful for when people change your carefully crafted
	topic by means other than the bot.

	* Changed supybot.brackets so you can now provide the empty
	string, which means you cannot do nesting of commands.

	* Added Utilities.last, which replies with the last string
	given to it.  This is useful for sequencing commands and then
	replying with the output of the last commnad.

	* Updated RSS.info to accept a feed name as well as a url.

	* Added a signal handler for SIGTERM, so you folks killing your
	bots uncleanly won't have as many bugs :)

	* Added a signal handler for SIGHUP that reloads the bot's
	various configuration files.

	* Added a new configuration variable, supybot.pidFile, which
	determines what file the bot should write its PID to.  The
	default is not to write the PID file at all.

	* Added a comma argument to utils.commaAndify, which specifies the
	character to use in place of the comma.


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 themself).

	* 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 its 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 opportunity 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 its 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
	itself if its 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
	    );