REMINDER: ALWAYS MAKE BACKUPS OF ALL THE IMPORTANT FILES BEFORE RUNNING A
          NEW VERSION OF DANCER.

Version 4.17

* (elho 2002-08-07) make installbot also change PATH in launch.sh to reflect
  the installation directory.

* (elho 2002-07-30) Use fork(2)/execv(3) instead of popen(3) in Execute().
  Due to this curr.sh and dancer.config had to be changed, so you have to
  adjust these files when upgrading.

* (elho 2001-06-25) Y2K fix for date in logfile header.

* (holsta 2001-06-23) Use configure for nickserv and undernet support. From
  Elmar Hoffmann <dancer@elho.net>

* (holsta 2001-06-06) Fix crashes when Dancer is re-starting.

* (holsta 2001-06-23) In SERVERDEL, do not permit deletion of the current
  server when using the id rather than the name. From Elmar Hoffmann
  <dancer@elho.net>

* (holsta 2001-06-20) IPv6 support from Elmar Hoffmann <dancer@elho.net>

* (holsta 2001-06-20) Cosmetic change in TOPIC command.

* (holsta 2001-05-20) Fixed brain damage in launch.sh - reported by Mercur @
  Undernet

Version 4.16

* This release is known to NOT work on Red Hat 7 - this is due to oddities
  in kgcc or libraries shipped with version 7. Builds were successful on
  OpenBSD, FreeBSD, Slackware, Windows NT (CYGWIN), Solaris.

* (holsta 2001-03-15) installbot now handles broken mkdir command in cygwin. 
  Work by Chris Larsen.

* (holsta 2001-03-11) Documented support for Dalnet's NickServ.

* (holsta 2001-03-10) Now supports the new Undernet Channel service, using
  new configuration keywords: unetnick, unetpasswd, unetserv.

* (holsta 2000-11-14) Added push script to ease remote syncronization.
  Standard disclaimer applies.

* (holsta 2000-11-13) Added PATH to launch.sh, making it more friendly in non
  dot PATH environments.

* (holsta 2000-11-13) Dancer now reloads its configuration files when it
  receives SIGHUP. This lets botmaintainers syncronize user and program
  configuration between multiple bots using any file transfer mechanism,
  (eg. ftp, rcp, scp, etc)


Version V4.15

* (gr8ron 1999-08-12) BUG command removed.

* (gr8ron 1999-08-11) +e and +I channel modes are now automatically unset
  by the bot when a server or someone with status lower than LEVELBOT
  sets them (if the bot has OPs). If the user who set this mode has
  status lower than CHANOP, he will also be deoped by the bot. Fixed some
  little bugs that I had introduced myself. ("MODE -l" crashed the bot)

* (Bagder 1999-08-10) Corrected BAN command to use the real kick message
  after someone has already been kicked twice by the bot.

* (gr8ron 1999-08-09) Peter Gervai <grin@tolna.net> reported an overflow
  bug in ReadSocket(). Fixed.

* (gr8ron 1999-08-07) Added checks for P (publicly available), D (DCC chat
  required) and * (password required) flags for "straight command aliases"
  (FuncRun commands) in the funcs-system. Quite a bit of effort was put
  to make dancer.funcs (parse.c) stable.

* (gr8ron 1999-07-24) Added LOOPSERVERS setting to prevent the bot from
  quitting once it runs "out of servers". Dancer will try to connect to the
  first (enabled) server in the list instead.

* (gr8ron 1999-07-20) Added -N flag for USERMOD to change a user's password.

* (gr8ron 1999-07-08) Added wildcard support for both nick *AND* host to
  SEEN (nick!user@host type patterns). SEEN now also reports the full
  user@host instead of the userdomain pattern as it used to be.

* (gr8ron 1999-06-30) Fixed 2 major misspellings in country.c as reported
  by Throstur Svanbergsson.

* (Alain Penders 1999-06-30) Provided a patch for FPL. The patch does the
  following:
  - Implements the SOLO flag on Labels
  - Adds "topic" and "topicwho" parameters to ChanInfo(), so that a
    script can query the current channel topic, and who set it.
  - Adds a new CurrentTime() command, allowing scripts to find the
    time.

* (gr8ron 1999-04-07) Applied (s)trio functions to Dancer. strio renames,
  fixes, and extends the C string handling functions.

* (gr8ron 1999-04-07) Added support for PART reason in seen system.

Version V4.14.3

* (gr8ron 1999-03-18) Added support for TOPIC and KILL logging.

* (gr8ron 1999-03-12) Reorganized dancer.config. Moved those config
  items that can only be changed offline to the top and those items
  that can be configured online to the bottom.
  ckey, cmode and climit were renamed to misc.ckey, misc.cmode and
  misc.climit respectively, and language to owner.language, therefore
  you may have to adjust these settings again after upgrade.

* (gr8ron 1999-03-11) InitLog() will now correctly rename the logfile
  when necessary (thanks to Bagder). SeenInsert() didn't store the seen
  info correctly for nicks that were seen for the first time, fixed this.

* (gr8ron 1999-02-27) Divided SigCatch() to 3 distinctive signal handlers
  to handle crashes, program termination signals and SIGPIPE. Added
  detection for SIGILL and SIGFPE.

* (gr8ron 1999-02-27) Added a SIGALRM based system to detect possible
  busy-loops. This only to trace down the few bugs that have been
  bothering some users. When Dancer catches a SIGALRM, it will first
  stacktrace itself, then log the snapshots and die. (DEBUG only)

* (gr8ron 1999-02-27) Improved the snapshot system. Added hit count to
  count successive calls to same snapshot lines. Raised MAXSNAP to
  20. Upon fatal errors we log all of these snapshots for better error
  tracing.

* (gr8ron 1999-02-27) Fixed TZ to show the relative time difference
  between two timezones correctly. "TZ NOW" should work correctly
  on all systems now too.

* (gr8ron 1999-02-26) Fixed a bug in CONVERT which caused area to
  show wrong information.

* (gr8ron 1999-02-25) Userdomain() now returns user@host.top-level-domain
  type hostpatterns unchanged without adding an asterisk.
  (used to return user@*ost.top-level-domain)

* (gr8ron 1999-02-25) Made SeenSave() use 'safe' save method. Removed
  seenbackup setting. Making backups manually every now and then is
  still a good habbit.

Version V4.14.2

* (gr8ron 1999-02-24) Applied stacktrace.c: code and idea by breese.
  Dancer will now automatically stacktrace itself upon catching a fatal
  signal on systems that support this. People who have trouble debugging
  Dancer themselves can easily report bugs by mailing this debug info
  (which is logged) to the mailing list.

* (gr8ron 1999-02-24) "SEEN -R <nick>" now shows the last time nick was
  on even if <nick> is currently online.

* (gr8ron 1999-02-23) Removed some very old stuff such as support for
  comment and passfiles. These were hardly needed anymore.

* (gr8ron 1999-02-19) Fixed CTCP(). Nick wasn't parsed right and
  LEVELCHANOP+ users' DCC requests didn't always get through because
  of this (upon ctcpflood).

Version V4.14.1

* (Keith Stattenfield 1999-02-14) Fixed a bug in the snapshot system.

* (gr8ron 1999-02-10) Fixed HELP to get rid of buffer overflows with
  long help lines.

* (gr8ron 1999-02-09) Added SETPASS and CHPASS aliases for NEWPASS
  as suggested by CaE.

Version V4.14

* (gr8ron 1999-02-03) SAY-setting is now overridden if the user has
  LEVELBOT or higher (SAY and ME commands).

* (gr8ron 1999-02-03) Added MUTE setting. MUTE command will now
  toggle this setting. MUTE won't affect SAY anymore, also MUTE
  won't turn WARN off but instead filter out the non-kickbannable
  warnings so Dancer will still protect the channel.
  Setting MUTE on will not touch any of the other settings either
  (TALK, WELCOME and REPORTBAN), but it will override them to keep
  the bot quiet. MUTE quarantees that your Dancer will remain quiet
  unless otherwise commanded.

* (gr8ron 1999-02-03) USERMOD -C flag added to change the comment
  of users. SETEMAIL -N flag added to change the email of other
  users (requires LEVELEXPERT). Users with high enough level can now
  change the comment and email two ways. Also modified CmdComment() 
  a bit and removed the ChangeComment() function as it was only used
  by CmdComment().

* (gr8ron 1999-02-03) Channel operator status of people splitting and
  joining again wasn't updated properly. Fixed.

* (gr8ron 1999-02-03) Added a new function, GetDefaultText(), to get
  default language strings instead of the user's default.
  Useful for CUT, USERADD, USERMOD and USERDEL inform etc.

* (gr8ron 1999-02-02) Replaced the recursive Match() function with a
  faster, iterative match() function from ircd. Slightly modified it
  to fit the context.

* (Controller 1999-01-28) Added VOICE and DEVOICE commands.

* (gr8ron 1999-01-23) USERADD and USERMOD won't allow registered nicks that
  start with a digit anymore. Not a really useful feature, but makes it
  easier to implement certain functionality. Conforms to IRC RFC.

* (gr8ron 1999-01-22) Finetuned OnMode() function.
  Changed the way strictop works a bit: when a user with level less than
  max(LEVELCHANOP, OPLEVEL) ops a user whose level is lower than
  max(LEVELRECOG, OPLEVEL), Dancer will deop both users. Also Dancer won't
  deop himself anymore when strictop is on and he doesn't recognize himself
  as a LEVELBOT user. Otherwise strictop should be like before, except that
  OPLEVEL matters as you can see from above (when OPLEVEL > LEVELRECOG).

* (gr8ron 1999-01-22) Added OPPROTECT setting:
  When a user with level less than max(LEVELCHANOP, OPLEVEL) deops or kicks
  a user whose level is higher or equal to max(LEVELCHANOP, OPLEVEL), Dancer
  will deop the 'abusive' user and op the deoped user (if he was deoped).
  Chan-op users can still deop and kick anyone they like.

* (gr8ron 1999-01-20) Finetuned the USERMOD command a bit. One can now
  use the -R flag to change the userdata of a specific registered user
  with that name prior to another recognized user joined with the same
  nick when <nick> is not specified. Otherwise -R works like before.
  -P will inform a non-recognized user only if the added pattern matches
  the currently joined guest's pattern using that nick.

* (gr8ron 1999-01-19) Added a simple isspacechar macro to replace most
  of the isspace and isgraph macros. This allows usage of scandinavian
  characters with certain commands as isspace returns true for
  scandinavian characters. SPY will now show scandinavian characters
  correctly without stripping them from the first two words, EXPLAIN
  allows scandinavian keywords, and more. In _NextWord() isspace was also
  replaced with isspacechar.

* (gr8ron 1999-01-18) LanguageNum() will now check for shortname too.
  This means that users can do f.ex. 'language nl' to set their language
  to Dutch.

Version V4.13.5

* (gr8ron 1999-01-18) Added Finnish translation.

Version V4.13.4

* (gr8ron 1999-01-15) Fixed a nasty busy-loop bug in gr8ron's AddKick()
  patch.

* (gr8ron 1999-01-15) Added OPLEVEL setting which can be used to
  restrict the user-level from which upwards users are allowed to
  have and manage ops. Setting OPLEVEL to 0 turns it off. Affects
  STRICTOP, OPPROTECT, NETSPLIT, LOCKKEY, LOCKMODE and LOCKLIMIT
  when on.

Version V4.13.3

* (gr8ron 1999-01-14) Users are now allowed to use NEWPASS without a
  prior call to PASS when user's password is defpass.

* (gr8ron 1999-01-14) Primary language for the bot to use can now be set
  online with the SET command (requires LEVELOWNER).

* (gr8ron 1999-01-14) Moved a few strings to language.c

Version V4.13.2

* (gr8ron 1999-01-12) Added banprotect setting which works almost like
  the autoop setting, but as the main switch for banprotection.

* (gr8ron 1999-01-12) Fixed IllegalBan(). It was possible to ban banprotected
  users when they were not in the channel, as reported by newlook.

* (gr8ron 1999-01-12) LEVELBOT or higher users are now allowed to ban
  banprotected users without Dancer interfering with a deop and unban.

* (gr8ron 1999-01-12) Fixed a bug in YP stuff (netstuff.c) that sometimes
  copied misc crap to nameserver char array, causing HOST command to
  fail miserably.

* (gr8ron 1999-01-12) Added USERDEL -F flag to force an immediate removal of 
  a user from the userlist.

* (gr8ron 1999-01-12) Fixed a bug in CmdKick() which caused KICK to
  fail when used by users whose level was lower than LEVELTRUST.

* (gr8ron 1998-01-12) If a non-passed user tries to CUT his DCC using
  PRIVMSG (through server), Dancer should now notify the user about the
  required registration with a server NOTICE. This is done because
  sometimes a user may lose control to his DCC and he might have
  problems cutting his DCC without getting any response from Dancer.

* (gr8ron 1998-01-12) SPY didn't snoop commands executed by guests who
  were not recognized as real users. Fixed this.

* (rek2wilds 1999-01-10) Spanish translation added. Thanks to rek2wilds
  <rek2@netnitco.net>

Version V4.13.1

* (Bagder 1999-01-08) Euro uses EUR instead of XEU now.

Version V4.13

* (Bagder 1999-01-04) Added Euro and EU to the contry list!

* (Tero Jnk 1998-12-09) user.c fix, as posted on the list Dec 4.

* (Bagder 1998-09-23) Corrected a long time SEEN bug that made the bot report
  incorrect after "nick games", when two people have one changed nicks with
  each other and similar.

* (Bagder 1998-09-07) Just removed the warnings the gcc compiler in my new
  Linux Redhat 5.1 system showed me.

Version V4.12.2

* (TheCrow, 28 Aug 1998)
  A small patch which corrects a couple of syntax errors in language.c and
  will make Dancer show the nick pattern as well as the host pattern of the
  warning being removed, to fit in with the fact that Dancer now uses nick
  patterns in warnings!

Version V4.12.1

* (Tero Jnk 1998-08-18) Enhanced the AddKick() fix. Distributed as a
  separate patch on the mailing list.

Version V4.12

* (Bagder 1998-08-17) As reported by Tero Jnk, the bot could crash itself
  in the AddKick() function during situation of extensive abuse. The AddKick()
  function has now been extended to be capable to extend the kicklist in case
  of need. This may sort out the problem in i.e IRCnet #amiga.

* (Bagder 1998-08-03) Changed the 'void main' to 'int main' to better apply
  to C standards.

 (-- Version 4.12-pre used by Bagder)

* (Bagder 1998-07-26) Redhat 5.0 patch. configure failed on the non-blocking
  check and transfer.c shouldn't have that #ifdef linux kludge in the top.

* (Bagder 1998-07-20) getopswhenalone.fpl had an error on the last line.

* (Bagder 1998-07-06) No longer prevents opping already opped people. Server
  desynch and irc weirdnesses may require it at times and OP flooders should
  die anyway. Bah.

* (Bagder 1998-06-16) Ray Akey's patch needed a fix.

* (Bagder) Thomas Finnerup <Picco@Picco.dk> reported a topic problem for
  networks that grok topics longer than 128 characters. The max topic limit
  was raised to 512.

  *** What IRC networks need is a standard way for a client to find out all
  network-specific lengths, sizes and other things special for that particular
  network so that "we" could adjust automatically... ***

* (Bagder) Dancer 4.11 doesn't compile on a SunOS 5.6 with a gcc that works
  perfectly well on 5.5.1. Appearantly a gcc problem. Posted a patch to the
  mailing list that lets the 4.11 source compile.

Version 4.11

* Marcus A. Hofmann <marcus.hofmann@stud.uni-muenchen.de> added German!

* Ray Akey <rakey@cnetbbs.net> made a parse.c patch to fix a silly bug.

* (Bagder) Added 'myhost' as a valid setting in the .config file. It is the
  same as setting the DANCER_MYHOST environment variable. The environment
  variable has priority over the config file string. Remember, to generate a
  new neat config file, run 'dancer config >tempfile' and edit the tempfile to
  fit your needs before you do 'mv tempfile config' (replace "config" with the
  name of YOUR config file).

* (breese) OnJoin() fix for IRCnet extra-data

* (breese) OnPing() fix for i.e gamma.net's spoof-preventer.

* (TheCrow) "a patch that adds an extra config item to dancer.config.
  I refer to the TODO file in the Dancer archive:
  * A static 4-letter-combo that the bot will always recognize as itself
    regardless of the current nick.
  and that is exactly what it is supposed to do :)

  You can specify 'staticnick' in dancer.config e.g. 'staticnick = emot' then
  when you restart your Dancer and do a channel command you can either use the
  first 4 chars of the bots current nickname or use this 4 letter static
  nickname e.g. 'emot top talk'.

Version 4.10

* (Bagder) On request from Chris Elsworth <chris@celsworth.demon.co.uk>
  I made CHGCMDLVL only capable of changing commands that require lower
  level than the user using the command.

* (TheCrow) Made WARNLIST use the nick part too for the pattern matching.

* (TheCrow) Made warnadd -b warnings use the nick pattern properly when
  constructing ban patterns.

* (TheCrow) Solved some of the problems with excessive commenting on netheals
  if the COMMENT is enabled.

* (Bagder) As being showed by Joel Hein <julle@person.dk>, Dancer could not
  send PRIVMSGes from FPL programs, so I made Do() work from within FPL.

* (Bagder) SEEN did produce some non-translated text in some conditions, as
  noted by Thomas Finnerup <Picco@Picco.dk>. Brian Jensen <brj@vejlehs.dk>
  brought me the danish translation.

* (Bagder) WARNADD with a pattern like nick!*@* didn't previously work since
  the bot didn't take the nick name in consideration when it compared if the
  pattern matches itself. Reported by "Justin (TheCrow)"
  <justin@mistral.co.uk>

* (Bagder) WARNADD did treat the nick in a very lame way when the warnadd
  parameter was just a nick converted to a pattern. Reported by
  "Justin (TheCrow)" <justin@mistral.co.uk>

* (Bagder) Applied the win32 patch brought by Chris Larsen <vader@vader.dk>.
  There is now a separate win32/ directory with instructions and stuff for
  the win32 version of Dancer.

Version 4.9

* (Bagder) Prevents known users from re-invoking IDENT. Suggested by
  "Justin (TheCrow)" <justin@mistral.co.uk>

* (Bagder) Made the shutdown command better deal with the time parameter
  if used as first parameter. It should now work even if 0 is the first digit
  in the time string. Chris Larsen <vader@vader.dk> reported.

* (Bagder) Removed the extra space in front of the shutdown reason that
  appeared for some users. Chris Larsen <vader@vader.dk> reported.

* (Bagder) Dancer lacked the toplevel domain .cd (Congo). Added now.
  Robert Martin-Legene <robert@DK.net> reported 

* (Bagder) Applied Ronny Bangsund's norwegian updates.

* (Bagder) CTCP ACTION floods are no longer triggering like other CTCP floods
  since they are not at all as lethal. Noticed by "Justin (TheCrow)"
  <justin@mistral.co.uk>

* Chris Larsen's FreeBSD hint how to get FPL working:

  Hmm FPL works nicely for me on FreeBSD 2.2.1 and 2.2.5

  I use the Generic UNIX makefile and GCC with the following parameters:
  CFLAGS  = -DUNIX -DSHARED -ansi -pedantic -g -funsigned-char
  CC      = gcc
  LD      = ld
  LDFLAGS = -Bshareable -Bdynamic


  test it with : #./SFPL ../demo.FPL 

  check that you have:
  /usr/lib/libfpl.a
  /usr/lib/libfpl.so.1.0

  or in your local library

  else do :
  cp libfpl.a to /usr/lib/libfpl.a
  ln -sf /usr/lib/libfpl.a /usr/lib/libfpl.so.1.0

* (Keith Blakemore-Noble) Fixed the usermod -r <too long nick> problem.

* (Ulf Heiman's) OVERRIDE_USER patch was included for the dirty deed hackers
  among the crowd of bot runners who wan to change user id of the bot instead
  of using the proper one. You're on your own when going that road.

  (These two changes below were posted as commentx2_486.patch 98-02-26)

* (Justin) addition that enables high-level dudes to change other users'
   comments by issueing "comment -n <nick> <comment>". Also, setting comment
   to 'none' will delete it.

* (Bagder) Andrew Shuttlewood reported an overflow situation when you add a
   VERY VERY long comment and then sview'ing the person. Now, 256 characters
   is the maximum length of a comment and the output buffer for sview is
   enlarged.

Version 4.8.6beta

 * Ulf Heiman <eluhe@sydkraft.se> corrected the htonl() problem all the
   multi-IP fiddling-around had added to the DCC CHAT.

 * (breese) The "final" (?) multi IP fix.

 * (Justin) Fixed the flaw that the latest sview fix added.

Version 4.8.5beta

 * (TheCrow) Reported and found the bug leaving the comment field out in
   various sview outputs.

 * Keith Blakemore-Noble fixed a flaw in the server parser.

 * (Bagder) Total number of kicks is now counted, and TOP KICK should work
   better now! (NOTE: this change is not identical to the patch sent to the
   mailing list 1998-02-17)

Version 4.8.4beta

 * (breese) I think I've fixed the multiple IP thingy now (not a nice fix
   though.)

 * (Bagder) %u in ctcppub: in .fplconf did not contain the proper user (in
   fact, 'current' was wrong for all CTCP flows...)

Version 4.8.3beta

 * (Bagder) Since two independant buffer overruns were reported yesterday, I
   spent three minutes adding more boundary checks to the numerous sscanf()
   calls. I found several other holes, but I don't think I saw anyone as
   lethal as the out-of-channel thing (reported by Alex Holst).

 * (Bagder) I also enlarged several buffers used for transfers and decreased
   the maximum allowed sizes for some input.

 * (Bagder) Regarding the CLIENT bug reported to occur on a multihomed machine
   (reported by Andrew Shuttlewood), I have now added an error check that will
   add an entry in the logfile if the host you specify in DANCER_MYHOST
   doesn't give a proper internal ipnumber for dancer (line 921 in netstuff.c
   in the new 4.8.3beta).

 * (Bagder) checks for and no longer sends mode +o to guests who are
   already channel operators.

 * Tero Jnk's gcc-on-Amiga patch is applied.

 * Keith Blakemore-Noble's modified smakefile for Amiga compiles (downloaded
   from his site) is included.

Version 4.8.2beta

 * (breese) Fixed the multihost thing. To change host (to one of your multiple
   hosts), set DANCER_MYHOST to your IP number.

Version 4.8.1beta

 * (Bagder) As reported by 'Joker': When the bot is kicked out of a channel,
   it doesn't flush its internal ban list. When it rejoins or joins another
   channel the former bans will remain marked as ACTUAL to the bot. This will
   in many cases make the bot kick any user joining that match one of those
   patterns.

 * (Tero Jnk) Corrected two bugs in user.c and two in netstuff.c - the worst
   and most serious one being the CUT crash.

 * (Bagder) Applied the patch supplied by Ulf Heiman <eluhe@sydkraft.se> and
   activated it with the #define LAB_PATCH in dancer.h. If this turns out to
   be a good and working patch, we make that the only code in the next
   release.

 * (breese) PubCTCP() did contain some old code that prevented /me to get
   logged and also made public CTCP flooding possible.

 * (Bagder) Fixed the logging function to work properly on the first day of
   a year! ;-)

 * (Bagder) /quit with an odd reason could trick the net split detection and
   lead to a crash.

 * (Bagder) 'TZ now' should now show the actual local bot time, not GMT.

Version 4.8

 * (Bagder) Corrected some YP handling in netstuff.c

 * (Bagder) Found and corrected a terrible bug in NewsSave().

 * (Bagder) BUG no longer files a report if it is empty.

 * (Bagder) In fact, warnadd -b *!*@* didn't work at all. I fixed it. It
   now also checks on nick changes, unless nick flooding is going on.

 * (Bagder) 'warnadd -b *!*@*' did mess up the nick part. 'Xcal' reported.

 * (Bagder) Made the FPL hooks only run once as expected!

 * (Bagder) Re-wrote and improved large parts of the FPLinDancer manual. It is
    now a lot more accurate and describes Dancer as it is, not as it could've
    been.

 * (Bagder) ChanInfo(), Join() and Leave() were added to FPL. I also wrote a
   tiny script called 'getopswhenalone.fpl' in the example/ directory that
   makes the bot leave and join again if left alone in the channel without
   ops.

Version 4.7.1

 * (breese) Added support for multi-homed machines.

 * (breese) Added detection of modes in extended JOIN lines.

Version 4.7

 * (breese) Fixed UPPER and BEEP checking, which goofed on HP-UX.

 * (breese) Fixed LANGUAGE with no arguments

 * (breese) Localised many messages (many still left though)

 * (breese) Using ISO 639 abbreviations in language.c now

 * (breese) Colour code kick is now part of the normal warning system.

 * (breese) Fixed DO not to crash on "DO #channel +b %s".

 * (breese) Fixed BANLIST not to crash if %s!%s@%s (or similar) was banned.

 * (breese) Fixed the TELL functions so that they ignore prefixes

Version 4.7beta6

 * (Bagder) LANGUAGE with no parameters will now list all available languages.
   Using a substring of a language will also be sufficient to select one.

 * (Bagder) Now records and stores whether a user is ircop when (s)he joins.

 * (Bagder) Introduced 3 new 'flags' to the UserInfo() command (in fpl) to
   check user-data with: "ircop", "voice" and "chanop". They will make
   UserInfo() return 1 if the user has the specified flag enabled, and 0 if
   the flag isn't set on the user. Example usage:

        void CrawlforOper(string nick)
        {
          int ircop = UserInfo(nick, "ircop");
          if(ircop)
            Send(nick, "Oh you mighty op, your word is my command");
        }

Version 4.7beta5

 * (breese) Pointed out a bug in the UserInfo code.

 * (Bagder) FPL errors are now logged, stderr is often useless for that.

Version 4.7beta4

 * (Bagder) Added support for UserInfo() in fpl. Used like

    string nick = "foobar"; /* nick name to check */
    int level = UserInfo(nick, "level"); /* returns level of the user */

    If the nick isn't found in the channel (or the second parameter to this
    command isn't "level"), -1 will be returned.

 * The verbose flag for USERLIST was not set by default. (Reported and fixed
   by chippi@umich.edu)

Version 4.7beta3

 * (Bagder) 'dontsiteban' is a new entry in the .config file that allows a list
   of domain patterns that should *never* be sitebanned by the bot.

 * (Bagder) I have now included the FILEGET scripts in the script/ subdir. To
   try them out you need to scan some sources to find out...

 * (Bagder) Included my new urlget.c which replaces the older httpget.c in the
   currency directory. This can get files from ftp servers as well as http and
   gopher. Bugfixed the http part too.

Version 4.7beta2

 * (Bagder) No longer replaces the nickpart in warnadd *!*@* style patterns
   with a '*' to allow warnings on nick-dependent patterns.

 * (Bagder) Also removed the '!', ']' and '[' from the list of illegal letters
   since they're too likely to be used by lusers.

 * (Bagder) Adjusted the banpattern generator. If a user with a 'bad' letter
   in the user name gets banned, Dancer previously changed that into a site
   ban. This fix now checks for a previous ban on that site, and only if there
   is none it will be made into a siteban. Otherwise a standard userban will
   be used.
    The reason for this is of course to make it ban, since the siteban won't
   take effect if there already is a ban on the site. The question remains of
   course if it shouldn't REMOVE the single previous ban instead before and
   then set the siteban (of course only if there really was a single ban).

 * (Bagder) DCC CHAT broke down (due to FILEGET stuff). Works again now.

Version 4.7beta

 * (Bagder) FILEGET concept. This is still #ifdef BAGDER. It needs external
   scripts to work.

 * (Bagder) 'SET LIMIT <ON/OFF>' enables/disables channel limit (+l) locking
   and with SET CLIMIT the prefered limit is set.

 * (Bagder) CLIENT on a bot running on Linux (and more) didn't work

 * (Bagder) My change of include-files in dancer.c caused some errors that I
   think I've fixed now.

Version 4.6.6

 * (Bagder) AndyS reports that the long-tells bug is still there. I remade the
   TELL command to split long tells into two separate tells.

 * Martin Galipeau <sevenup@Pouet.endirect.qc.ca> brought the french
   translation.

Version 4.6.5

 * (breese) Discovered two language.c errors, one of them caused a sigsegv.

 * (Bagder) Corrected a multiple include problem of config.h. I also made
   setup.c no longer use __CONFIG_H but __SETUP_H instead

Version 4.6.4

 * (Bagder) Now the alert-on should be logged properly and even increase
   "alert-level" for each time alert-ON is called. Perhaps we might even
   soon make some of the defense-mechanisms in Dancer actually use the
   alert level to trigger things more easily...!

 * (Bagder) 'SET' no longer shows set-groups for persons that have lower
   level than the group require. I.e, the OWNER group should now only be
   visible for OWNER level people.

 * (Bagder) Now limits the length of a TELL message to 450 characters. (Bug
   reported by AndyS)

Version 4.6.3

 * (Keith) Added some defines to config.h.amiga

 * (Keith) Unwrapped some texts in language.c, which caused some compilers
   to choke.

 * (breese) Fixed a bug in SeenAddNick(). Checking if strdup() fails
   should probably be added in a million places.

 * (breese) Fixed a CONVERT bug (reported by Deryk Robosson)

 * (breese) Added some translations

 * (breese) Remove the beta-ism (only major versions, X.Y, should be
   made beta versions)

Version 4.6.2beta

 * (Bagder) Fixed a bug in AddToBanList()

Version 4.6.1beta

 * (Bagder) Extended the news help texts (and made the news commands show them)

 * (Bagder) Applied Bobby Billingsley's colour-kicker patch.

Version 4.6beta

 * (Bagder) Started working on the new news system.
   NEWSADD, NEWSDEL and NEWSLIST now exist in the system. So does an extra
   field in the user file and 'newsfile' and 'newsexpire' in the .config
   Use 'dancer config' as usual to incorporate the new things easily.

 * (Bagder) Fixed (yet another) bug in TELLDEL.

Version 4.5beta

 * (Bagder) Removed one of the IDENT commands! =)

 * (Bagder) 'USERMOD -P -' now strips the prefix from the pattern before it
   is added.

 * (Bagder) The bot could accidentaly say phrases using the wrong language
   (on flood-kicks etc). This is now fixed.

 * (Bagder) More translations.

 * (Bagder) Saiful!terje@hut-modem-28.hut.fi helped me compile and test Dancer
   on Digital Unix and AIX.

Version 4.4.7beta

 * (Bagder) Changed the install-script to not use the substr expression
   in expr since reports prove that to be missing in some systems.
   (Zoran Babic <babicz@mafpz.fpz.hr> reported.)

 * (Bagder) The CMD command now allows level 999 on users.

 * (Bagder) Checks for '*' in host names on join and mark them as 'illegal'.
   If FLOOD.FAKENAME is enabled, the bot will kick immediately. People marked
   as 'illegalname' will not invoke ban-due-to-multiple-kicks since their
   host mask may very well become a very nasty host mask. Like the guy who
   joined with a host mask like "*@*.*"...

Version 4.4.6beta

 * Hans Hasselaar <hanshass@xs4all.nl> brought the dutch translation.

 * (Bagder) KickAll() no longer kicks users that have level 200 or higher
   even if they match the pattern.

 * (Bagder) Made 'sview -a' on non-joined persons still show the info about
   who did what to the person last.

 * (Bagder) Trying a command in public that isn't publically available will
   now make the bot /notice the user about it.

Version 4.4.5beta

 * (Bagder) I changed the >20 minutes lag check to also require >20 minutes
   since last server-input

 * (Bagder) Ronny Bangsund <vacuum@newmedia.no> wrote the norwegian
   translation.

Version 4.4.4beta

 * (Bagder) Made 'dancer config' output the listed items without the spaces
   in between them which made i.e 'server' to fail ;-/

 * (Bagder) Added a check that makes the bot consider >20 minutes lag a
   disconnected connection.

Version 4.4.3beta

 * (Bagder) Added the newest httpget to the archive.

 * (Bagder) Applied Vader's fix that allows negative arguments to BACKLOG.

 * (Bagder) Added 'warnmonths' to the .config file. It tells how old a warning
   must be before it gets deleted from the warnlist. The time is measured from
   latest warning or if never warned for, from the set time.

 * (breese) Added lots of danish texts.

Version 4.4.2beta

 * (Bagder) LANGUAGE is a new command a user can set its preferred language
   with (from the few supported ones of course). The bot will then attempt
   to keep all conversations with that user using that specified language.

   Language is also saved in the user file and if it differs from the default
   language, shown in the sview output.

 * (Bagder) Added the BANUSERKICKS set item in the BAN group. It sets whether
   to take ordinary users' kicks into consideration when the bot decides if it
   should ban for too many kicks within a limited time. If disabled, only the
   bot's own kicks are counted.  If disabled, this decreases the security of
   your channel a little since the ban trigger level will take longer to reach
   during attacks. (Requested by AndyS.)

 * (Bagder) Made the example dancer.config only contain a comment about how
   to generate a new example file ;) I also removed the obsolete .passwd file
   from the example directory.

 * (Bagder) Added the useradmin.html file to the archive instead of the ASCII
   version. Writing the docs in html right away makes it a lot easier to put
   nice versions online ;) This one is also slightly updated.

Version 4.4.1beta

 * (Bagder) I've been told the HPUX fix works. Good.

 * (Bagder) Made the install-script use the 'dancer config' feature to make
   installations get a version of the latest setup file as dancer.config.

 * (Bagder) Modified the FAQ a bit.

 * (Bagder) More translations and more texts moved to language.c and the
   proper text system. (*sigh*)

 * (Bagder) Removed the %s from the 'comment:' output in SVIEW.

 * (Bagder) Added 'defaultpasswd' to the .config items. By changing this, you
   can alter the password set to all users when they are added with 'useradd'.
   Changing this, you improve the security slightly since the average Dancer
   bot user from other channels won't know the default and most vulnerable
   password of your particular channel and bot.

 * (Vader) Applied breese's suggestion to prevent the default password from
   being possible to use with IDENT and also made the bot complain on all
   identifications done with the default password.

 * (Bagder) Now hides IDENT from the cmd output if identprotect is ON.

Version 4.4Beta

 * (Bagder) Inserted my previously posted HPUX fix for the getdtablesize().
   I haven't got any reports about the functioning of this, so I have just
   assumed it works ;)

 * (Bagder) Wrote a memmove() replacement function in case of need (like
   in SunOS 4).

 * (breese) Added memmove() and getdtablesize() checks to the 'configure'
   script.

 * (Bagder) Running the bot with 'config' as parameter, will make the bot to
   output an [example], well-commented, .config file on stdout. A very good
   use for this is to start your bot config session by running "dancer config
   >dancer.config" and then edit the dancer.config file according to your
   wishes and desires before you run the bot for real.

   I carefully designed this to read the current settings first and output the
   "old" settings set properly in the output (using the new comments).
   Therefore, if things work as they should, we could make it a habit to
   invoke a 'dancer config' after each update and then get the latest comments
   and setup (even nicely documented!) in your .config file.

 * (Bagder) The .set file is now saved with included comments.

 * (Bagder) Introduces the IDENT command. It is an eggdrop look-alike that
   let any user to add its current host pattern to his 'account' by entering
   IDENT <password> [registered nick]. The 'IDENTPROTECT' item can be set to
   prevent this command from being available.

 * (Bagder) Made tells get stored safer. Also made the tell messages get
   saved on each TELL command invoke.

 * (Bagder) Improved USERLIST with lots of flags and options according to
   requests. (As discussed on the mailing list.)

Version 4.3.5

 * (Bagder) Fixed the 'HELP SET' bug.

 * (breese) Fixed a TELLME bug.

 * (breese+Bagder) New language system. Danish and Swedish texts added.
   There is a recognized 'language' label in the .config file now. 'english',
   'svenska' and 'dansk' are supported.

 * (breese) Reworked the language systems.

 * (breese) Added danish as an optional language (without any way to
   select it :)

Version 4.3.3

 * (Bagder) Made the SEEN use the options properly.

 * (Bagder) Made the BAN-settings get saved (and understood when read) with a
   proper "ban." prefix.

Version 4.3.2

 * (Bagder) Introduced a BACKLOG command that displays the last X commands
   entered by users. Requires 200.

 * (Bagder) Made JOIN and LEAVE require 100.

 * (Bagder) Made WARNLIST a level 20 command since all it does is list the
   warns.

 * (Bagder) Made the link-stuff close down nicer. If no config file was
   found, it crashed.

 * (Bagder) Added a sanity-check in the seen-file reader routine. Thanks to
   AndyS who "borrowed" me his broken seen file! ;)

 * (Bagder) Removed quoting from Action() since there wasn't possible to
   send control codes in i.e warning texts otherwise! (seen in #amigaswe)

 * (Bagder) The ban due to repeated kicks got wrong 'who' field set.
  (reported by fellow Cstar)

Version 4.3.1

 * (Bagder) Made the STRICTOP only complain on +o ;)

 * (breese) Support for stacked/embedded CTCP

 * (breese) Under some circumstances it decided to use the same socket
   for both the server and the link stuff, which naturally caused lots
   of confusion and odd behavior. (this was actually a 4.3 patch, just
   forgot to put it here)

Version 4.3

 * (Bagder) Now ignores commands sent by itself (through the DO command).

 * (Bagder) Changed the 'getrates' script to use the new httpget format.

 * (breese) Fixed httpget.c to use better input format.

 * (Bagder) Fixed the crash that happened when adding an explain longer than
   256 characters.

Version 4.2.3

 * (Bagder) [on request] Introduced the 'STRICTOP' flag. Enabled, it prevents
   any non-regocnized user from getting opped by someone without very high
   status.

 * (Bagder) Logs error messages from the server.

 * (Bagder) Prevents TELLs to users without patterns,

 * (Bagder) Improved TELLDEL. Accepts delete of ID 0 and now allows deletion
   even if you've changed machine name.

Version 4.2.2

 * (keith) Brought the 'smakefile' for [better] amiga compiles.

 * (breese) Measure lag in milliseconds now (and fixed the lag thing
   which didn't look like it was working at all.)

 * (breese) Fixed a CTCP USERINFO bug.

 * (breese) Introduced the stealth user flag

Version 4.2.1

 * (Bagder) The version string will now use its own file ("version.h") to
   prevent the dancer.h to get changed and re-RCSed all the time.

 * (DarkDesgn) Made the CMD command compile and run properly on amiga.

 * (DarkDesgn) Made the config.h.amiga #define HAVE_NO_GREP and the FIND
   command now can scan the index file without external commands (using
   plain and simple strstr()).
   TODO: perhaps we should make the 'configure' script check for the grep
   command and reverse the #ifdef to HAVE_GREP.

 * (breese) Added CTCP quoting

 * (breese) It now correctly records if people are voiced or not

 * (breese) Made the voicing for MODERATE use +vvv and -vvv if possible

 * (breese) Moved EXCHANGE to LEVEL_RECOG per default, to prevent
   granting access to an external command to all unknown.

 * (breese) Fixed tiny details to make it compile on Ultrix

 * (breese) Added REMOTE/ON command to make linkbot perform a command,
   although this isn't implemented in the underlying links yet.

 * (breese) Improved link communication. Made all multicasting go
   through link too.

 * (breese) Made chat cmdchar less hardcoded, and changed it to '!'
   Removed ! as alias for DO.

 * (breese) Fixed the output of USERDEL

Version 4.2

 * (breese) Fixed the CUT-bug that crashed on Linux.

 * (Bagder) Adjusted the user admin text a little according to Vader's
   and breese's comments.

Version 4.1.5

 * (Bagder) Added 'UserAdmin' in the doc/ directory.

 * (Bagder) Adjusted the totaljoins fix to make it work!

 * (Bagder) Added lots of new currencies to the country array. Improved the
   FindByCurrency() (for countries that use other country's currencies).
   Also found new currency sites and improved the get-script and parsing
   scripts a lot.

 * (Bagder) USERADD accepts '-n <passwd>' which sets the specified password
   for the user at add-time. (requested by RexOrient)

 * (Bagder) Updated the FAQ.

Version 4.1.4

 * (Bagder) Added a crontab example showing how I do to get the currencies
   automatically.

 * (Bagder) Added a new field to the command struct called 'hide'. If set to
   true, this command won't get visible in the logfile or spylink (set for
   OP, PASS, NEWPASS, TELL, INVITE and the aliases to them) to work better
   (previous "leaks" were found i.e for the OP aliases).
   NOTE: the usage of the commands are still sent to the spylink and written
   in the logfiled but the lines will be masked like they have always been.

 * (Bagder) Added even more info on top of new logfiles. Now includes bot's
   nickname and op-status, bot version and uptime info.

 * (Bagder) Rewrote the logfile naming. It should now name old logfiles like
   '<logfile>.<year><month><day>'. Hopefully this now deletes them properly
   too.

 * (Bagder) Remade the chat-mode commands to use , as prefix letter. (actually
   made already in 4.1.3)

Version 4.1.3

 * (breese) No longer specifies '-O2' in the Makefile since too many errors
   have been found connected with that one.

 * (breese) re-applied the 'explain -s' patch that somehow got lost

 * (breese) Fixed CTCP not to answer invalid requests, like a
   missing ^A (for instance ^AVERSION)

 * (breese) Improved logging of ignored CTCPs.

 * (Bagder) Added some left-out items to the example dancer.config file.

 * (Bagder) Introducing the new dir-naming. The dancer dir included in the
   archives will from now on be named 'Dancer-<version>' and the archives
   will be named 'Dancer-<version>.tar.gz' and 'make tgz' and 'make lha'
   both work dynamically with the existing directory name now.

 * (Bagder) The CHAT system now features a few commands. Enter CHAT mode
   command preceeded with '/'. They are only available and recognized when
   entered from DCC chat when CHAT mode is active:
      /echo  - toggles echo mode
      /help  - shows the help text
      /me    - writes action-like lines
      /names - lists all locally attached chatters
   (AndyS requested)

 * (Bagder) 'hostisp' now enforces host-style userdomain patterns.

 * (Bagder) The multiple-joins check now kicks all users from the account that
   has joined with more than FLOODJOINS (a new SET, also present in the
   .config with the name 'thres.floodjoins') default set to 3.

 * (Bagder) Oops. Now it loads the DELETE flag properly.

 * (Bagder) Fixed the main Makefile to work with simply a 'make' the first time
   instead of 'make configure'.

Done to 4.1.2 but not mentioned in the actual 4.1.2 archive:

 * (Bagder) 'hostisp' is a valid item in the .config file. Enter a list of
   patterns with ISPs that should not never get sitebanned. The users of ISPs
   of this kind may also get other treatments soon.

 * (Bagder) Corrected a silly sscanf() mistake in the exchange routines. Also
   made the exchange abort if there's no currency information for the entered
   country.

Version 4.1.2

 * (breese) Found and removed a core-bug in OnMode() in server.c (in the new
   ban-record-try-to-find-nick stuff)

 * (Bagder) Made an EXCHANGE command. It should exchange between currencies.
   - Currency information retrieval is external. I've written a little program
     that downloads a specific webpage. (httpget.c should be included)
   - Web page to currency rate format is external. I've written a script that
     works great with the http://www.ny.frb.org/pihome/mktrates/forex12.shtml
     which I intend to use. It has up-to-date information on ~37 currencies.
     (frbparse and sedcurr should be included)
   - Currency translation is done by an external program. Dancer calls the
     command speficied with 'exchangecmd' in the .config file. The command
     gets a complete command line and should take care of all result-
     presentation.
     I've written a script that works with files in the format my 'frbparse'
     script outputs. (the 'rates' file should be generated by the frbparse
     program).
   - The 'EXCHANGE' command itself handles dot-style, known currency names (I
     have added some 70 currencies known to me to the country.c array) and
     country names. It then feeds the external command with the known
     information, including amount, names of the currencies, names of the
     countries and names of single units of the currencies.
   - This system can easily be extended to get the information from several
     sources. All you need to do is to write additional page-parsers. It is
     also fully aware of situations when currencies appear and disappear from
     lists.
   - 'EXCHANGE list' lists all available currencies right now (may vary from
     day to day if the web-service varies).
   - 'EXCHANGE <currency/country>' will present currency information for the
     specified country/currency. Short names and dot-style domain names are
     also searched for.

Version 4.1.1

 * (Bagder) Made the old BDUG use the DBUG one. THIS DOES MAKE THE LOG COMMAND
   NECESSARY TO REINVOKE DUE TO MOVED FLAGS!!!! DO NOTE!!! RE-SET YOUR PREFERED
   LOG-STATUS!!!

 * (Bagder) No longer performs double CloseConnection() calls when CUT is used.
   (it is still properly done within the RemoveClient() body)

 * (Bagder) Checks that there is a split-server list before trying to scan it.
   (caused a SIGSEGV when the bot was started with no .config or .users)

 * (Bagder) The .users file is slightly changed again. All lines starting with
   the (registered) nick name are now prefixed with a space. The scanning
   function of course still deals with the old-style, but all new files will
   be written with the new style. Done to avoid [future] problems. This makes
   .users files written in this version impossible to read in older versions.
   Hopefully the last time we see such a move with the .users file.

 * (Bagder) #ifdef'ed out the unused SaveComment(). Are there more?

 * (Bagder) Now dynamically counts the number of seen nicks and hosts instead
   of just counting them at load-time.

 * (Bagder) Made the seen-save only get done if there was a change to the
   seen data. If it isn't saved, a log line will still be added saying so.
   This way, there won't be no .seen file when starting the bot without the
   proper files, or when starting the bot when it can't connect to any server
   and so on.

 * (Bagder) Made the Log() function only print the data to stderr if the log
   stuff hasn't been inited. This way, every error prior to the loginit will
   get visible (if invoked from a visible terminal). Then we don't need
   duplicate error messages in dancer.c.

 * (Bagder) Added a bunch of new checks that the bot really is chanop before
   trying to perform a bunch of commands. It gives better serives to the user
   of the commands as well as it doesn't load the server with silly commands.

 * (Bagder) Now scans the DO command line and cancels QUIT commands. Quitting
   the bot should be done properly with the QUIT command. We might consider
   and implement further protection for other commands such as #join etc too.
   (breese's idea)

Version 4.1.0

 * (Bagder) When a ban is recorded from the channel, Dancer does now try to
   attach a nick to the pattern by first looking through the channel for a
   person joined matching the pattern, and then it looks through the kicklist
   for a match. If it finds a match, the ban-entry gets the GUESSNICK bit
   set and when listed, the nick will be embrased with braces like {nick}
   instead of (nick) if it was "guessed".
   NOTE: In normal cases, this will work flawlessly. Like when someone bans
   and then kick a single user. During attacks and when re-arranging bans,
   it will without doubts enter wrong nicks sometimes. The nick name does
   not matter in any other way than as a short cut for unbans etc.

 * (Bagder) Went through a bunch of items in setup.c and made sure only one
   of the duplicates are saved in the .set file. There's no reason to save
   two lines with the same info. The old items are still read and recognized,
   but the new version is saved.

 * (Bagder) Added SHOW to the command list. It doesn't do any difference at
   all when it comes to functioning, but now it is visible in the command list
   and better supported with SYNTAX and HELP.

 * (Bagder) Added TimeToSec() in the fpl-controller. I think you all should 
   have a timer.fpl in the example/ dir now that shows how to add a command
   to the bot that features an easy timer function.

 * (Bagder) Added USERDEL. It sets a flag on the specified user (and if the
   user is joined and -q wasn't used, it is informed) and if the user isn't
   changed during the following month, it will not get saved after that
   period. You may only remove a DELETE flag with 'USERDEL -U' (for undo).
   You cannot set a delete flag twice, you cannot remove a delete flag from
   someone that doesn't have it set and you cannot flush or in any way force
   the user to get removed from the list before the timeout month has passed.
   Any other modification of the user will make the timeout time (30 days) to
   start over.
   Added the DELETE flag to sview, load and save functions too.

 * (Bagder) Added awareness for *!*@* style patterns in the TELL mechanism.
   In some cases it picks the pattern from the userdata, and since that does
   support the nick-part, the TELL routine(s) should be aware (and strip the
   nick-part).
   Also made better sanity-checks in the AddTell() command to check for illegal
   patterns that may have been added to a user...
   Added small checks in USERMOD and USERADD that prevent too weird patterns.
   They _have_ to contain the '@' character.
   (done after reading a gr8ron report)

 * (Bagder) So I forgot to make a correct version number in the 4.0 dancer.h

Version 4.0Release

 * (Bagder) SHOW to a channel can only be done by CHANOP level people.
   SHOW to a channel now requires the command to be publicly useable
   (which was a previous leak some found out about).

 * (Bagder) Added '@' in front of the chanops' nicknames in the log-text
   written on join and /WHO listings.

 * (Bagder) Automatically marks its own entry in the guest-list as 'Bot'.

 * (Bagder) Now the bot counts total joins for the registered users on all
   their registered hostpatterns. For now, it will check if the hostpattern-
   counter is larger than the 'totalcount' and then set the totalcount to
   the highest amount. This way, moving to the new counter should be
   invisible to users. ALSO, the old way still needs to be maintained to be
   able to count joins on non-registered users.

 * (Bagder) I cut away some of the welcome bullshit output dependent on the
   join-count. I "had to" do it since I changed the way the join-count is
   achieved.

 * (Bagder) I went through server.c and made all calls to FindNick() actually
   check the returncode. We might get actions from the channel that affect
   users that we won't find with FindNick() at times when we have just joined
   the channel without gotten the complete /WHO list.

 * (Bagder) Kicksystem.
   - Extended the kicklist to 15 items and multikick-means-ban to 10 full
     minutes.
   - Rewrote the flow in AddKick() slightly. I will do some more debugging
     to see why multipl instances of the same pattern can occur in the list.
   - When adding a new item to the kick list, it could use the wrong pattern.
   - The kicklist command has a little more informative last line.
   - BAN_ENFORCELEVEL is now using the new level-system.

 * (Bagder) Warnsystem.
   - The WARN_TIMEOUT_REMOVAL define in bans.h sets timeout time for
     warnings. Warnings set and not warned for during the specified time,
     will not be saved. Default time is 3 months. People tend to forget or
     ignore to clean the warnlist, and accounts and sites change as fast as
     longer timeouts would probably not be useful anyway.

 * (Bagder) USERMOD and USERADD both now inform the user about the changes
   if he is joined. (bugfixed the usermod version that didn't work before)

 * (Bagder) *sigh* I didn't add a length-limit in the new sscanf() in TZ.
   If there's anyway we can add some define or something that will alert if it
   finds a %s or %[ in a sscanf() call, just tell me ;)

Version 4.0Beta7

 * (Bagder) Fixed the flood thresholds to work with the actual values we
   set in the SET output.

 * (Bagder) A new flag is introduced. Mark all users that are bots with the
   (R)egular (R)obot flag. Use 'USERMOD -F +R' to set it. Displayed as 'Bot'
   in the sview output. NOTE that this is different to the (L)inkbot flag in
   the way that the (R)-bots can never be linked (most probably because they
   are not Dancers nor Dancer-linking-compatible).
   I also added a flag to the guest struct called 'bot' that is TRUE if the
   user is some kind of bot. Used i.e in the toplist scanning.

 * (Bagder) FINGER is now host-prefix aware, and so is VRFY. I also made
   both of them ignore trying if the username of the person fits the
   BadUsername().
   (Reported by SimD)

 * (Bagder) SERVERDEL now supports that you specify '<server> <port>' to
   delete a server, which is useful if you have two entries of the server
   using different port numbers.

	gr8ron!ron@du-26.slip.utu.fi at Thu Nov 14 16:16:10 1996
	 I tried 'serverdel 2,3,4' and my dancer died.

    - I can't see why it did. Anyone?

 * (Bagder) WARNADD, using *!*@* style pattern, now prevents the user-part
   from being longer than 10 characters. Actually, it won't accept the
   pattern at all since the sscanf() match will fail and no nick will match
   the input...
   (a gr8ron report)

 * (Bagder) SHUTDOWN without time specified makes it use 10 by default (and
   the reason that was specified).
   (a gr8ron report)

 * (Bagder) The toplists evalutations now skip the bot itself, and all other
   users currently joined that has the 'LINKBOT' flag set. (NOTE: in order for
   this to work at a maximum, I suggest you take advantage of the new way to
   add hostpatterns to users that include nick names, which very well can and
   probably should be used to separate bots from the bot owner/runner.)
   (Vader requested.)

 * (Bagder) Moved the TZ and CONVERT functions to the new convert.c file.
   Made some parsing improvements in TZ:
   - allows toplevel .style names to be used instead of proper country or
     country name when converting
   - the 'now' keyword defaults to show the time for GMT if no timezone is
     specified
   - the 'list' keyword now shows the first matches that matches the specified
     pattern (* is used if pattern wasn't specified) and an additional text
     informs if there are matching patterns that weren't showed.
   (Vader reported)

 * (Bagder) SERVER fixes
   - Does now properly support no arguments to report current server name
     (BUG FIX)
   - Supports 'SERVER <num>' to switch to the server with that ID, existing
     in the server list.
   - 'SERVER +' changes to the next [non-disabled] server in the list. If the
     current server isn't in the list, or if the last server is in use now,
     the first server will be picked.
   - Now makes sure the server functions avoid some NULL reading when the
     current server isn't found in the list. (BUG FIX)
   - Frees all items in the server struct in FreeServ() (BUG FIX)
   (Vader requests)

Version 4.0Beta6

 * (Bagder) Fixed the topic bug which made beta5 run very bad.

 * (Trolan) [Kelly Cochran] brought a new config.h.amiga

 * (Bagder) Found and removed a nastly little piece of bug that very well
   could lead to SIGSEGVs and various userdata crashes. (in ChangeGuest())

 * (Bagder) DCC chat fix. Trying a second dcc chat left rubbish in the bot's
   list.

 * (Bagder) Made the userdata read more forward compatible. New fields should
   be silently discarded in older versions.

 * (Bagder) Made KICK not possible to kick the bot itself (people will never
   stop consider that fun). KICK for chanops now only allows kicking people
   with lower level than themselves. To avoid getting the bot used in kick-
   wars.

 * (Bagder) Found at least 4 different places in which Dancer ate memory. 3 of
   them really make the bot slowly eat itself to death.

 * (Bagder) Appearantly I did add somthing bad. It hangs after a few hours. =(

Version 4.0Beta5

 * (Bagder) Made the CMD command check for buffer overflow and sort the names
   alphabetically in each level. The CHGCMDLEV could make CMD crash
   if there were a lot of commands on the same level.

 * (Bagder) Rewrote some internal split lists that keep the split users. The
   guest counter should now only count actually present guests, while the
   numSplitGuests counts the split users. Took away the 'numofsplits' variable
   since it wasn't used anymore!

 * (Bagder) Added a KICK command. Persons on a TRUSTED level can use sitekicks
   and patternkicks too. Usage is of course 'kick <who> <reason>' where
   <who> must be a nick for CHANOPs and can be '*nick' or '*!*@*' for higher
   level people. NOTE, if a > CHANOP tries to kick the bot, it claims that
   _ban_ pattern would match the bot so it won't do it. I just didn't wanna
   add another text ;)

Version 4.0beta4

 * (Bagder) Now includes server name and channel name in the header of all
   new logs.

 * (Bagder) 'CHGCMDLEV <command> -' is now supported to restore the built-in
   level on a specified command. I also rewrote the command line parsing for
   the function.

 * (Bagder) Made all access levels within the Dancer source dynamic. There are
   now 7 internal levels used, and they can all be changed in the .config file
   (and are to become changeable with the SET command). The commands in
   command.c have now been redesigned to be able to follow a change of the
   internal levels. THEY NEED A RESTART AT THE MOMENT.
   All internal level usages and dependencies are dynamically using these
   levels. Remeber that if you intend to add stuff. The new dependencies are
   using the old defined names so there should be no confusion.
     *NOTE* *NOTE* *NOTE* *NOTE* *NOTE* *NOTE* *NOTE* *NOTE* *NOTE* *NOTE* 
   Stored users are _not_ using dynamic levels but will remain having their
   stored level whatever you do with the internal ones.

 * (Bagder) The CHGCMDLVL command invokes are now properly saved in the .set
   file so that following re-invokes of the bot will use the new levels for
   the changed command(s). Only changed commands will of course actually get
   saved. The new level will be stored 'hard' on the command which means that
   even if the internal levels are changed, the changed commands will remain
   at set level.

 * (Bagder) I don't like the AUTOOP feature, but since we have it we might as
   well make it goodlooking. It will no longer op any user right away on join.
   If will now wait (10-20 seconds, randomly and depending on the "sloppy"
   events methods) until it checks if the user is op, and if not it will get
   opped (once). Reason for this is of course to avoid op-floods that occur
   after i.e netheals and to let other users/scripts do the oping in first
   hand. Only one person get opped in each sloppy event (to prevent flooding)
   so if lots of AUTOOP'ed users join at once and none of them op themselves,
   it just might take a while before the bot has opped them all.
   Also prevents fast joiners/leavers with autoop-flag enabled to make the bot
   op-flood the channel or itself.

 * (Bagder) Made USERMOD tell the modified user if the user is currently joined
   and the -q (quiet) flag was not used.

 * (Bagder) Made comments get stored in the regular .users file too instead
   of the extra file. I do not like all those files to keep simple userdata.
   If a .users file have been stored including the .comment data, the next
   (re-)load of the userfile will make the .comment file to get rename to
   '<file>_rm' since it will no longer be needed nor used.

 * (Bagder) Made yet another bunch of sscanf()s safer. This time in server.c

 * (Bagder) Extended FindUser() slightly. It should now be able to match users
   properly even with the nick-part of the pattern used. Now, we can make a
   user match "nick!user@domain" which might be a better way to i.e detect
   bots or multiple users using the same account/site etc.

Version 4.0beta3

 * (Bagder) Revolution in the seen-arena. I do now store 'departure' time on
   each and every nick registered, and not only per-host as was done before.
   This way, seen [recent] will become much better as well as the whole seen
   concept will be clearer and soon easier to use and understand (even for
   lusers). I also let the nicks use separate time-outs in the save so that
   not only old hosts are forgotten but even old nicks.
    The timestamp saved together with nicks do not interfere with the old
   standard, so new seen-files can still be used by old bot versions.
    ...perhaps one of the greatest features that comes from this is that we
   now can see which of all the nicks a certain host used the last time. I.e
   'SEEN oldnick' can now actually tell us when *THAT* particular nick (and
   not just his host) was used, and what nick that particular host has used
   since!

 * (Bagder) Spent time on the docs. dancerdoc.html is updated and does now
   also include the former ChannelGuard manual.

 * (Bagder) Made some small changes in the FAQ about the new 'make configure'
   and 'make install' options.

 * (Bagder) ircd studying made me add a chapter to my ChannelGuard docs that
   explains the server flood control in detail. It also made me disable the
   multi-kick again (untested source is left though, if we ever find a good
   reason to use it).

 * (Bagder) Made a new SET group called BAN and moved AUTOUNBAN, BANTIME,
   BOTBANTIME, KICKBAN and REPORTBAN to it. I also made the both TIME items
   require level 200.

 * (Bagder) Added BOTBANTIME, which is the good old default time used for the
   bot bans when no time is specified.

 * (Bagder) AUTOUNBAN is a new SET item that, if enabled, makes Dancer
   automatically unban the least important ban when there are 18 or more bans
   set in the channel. The least important one is selected in this order:
    1 - the NON-ENFORCED ban with the least time left
    2 - the oldest NON-ENFORCED ban
    3 - the ENFORCED ban with the least time left
    4 - the oldest ENFORCED ban
 
 * (Bagder) Added the file 'fplcheck' to the source root. It is a shell script
   run with 'make configure' (after the actual configure script) that helps
   you find and fix the Makefile to use the FPL library before compiling your
   Dancer. Changed the Makefile to use it too.

 * (Bagder) Added a test of the multi-kick system.

 * (Bagder) Went through all file saving functions and made the important
   ones use temporary files to make save-errors less serious.

Version 4.0beta2

 * (Bagder) 'USED <nick>' has been added for testing purposes only. Meant to
   become something like a more verbose SEEN.

 * (Bagder) Made 'seen -m' acceptable publicly. Made seen -A no longer require
   dcc chat (after all, the message queue do work! ;)

 * (Bagder) breese discovered a glitch when someone joins a channel before
   the list returned from the '/who *' command is completed. Dancer can then
   get a nick reported as joined twice. This should now be prevented.

 * (Bagder) Took some time to tidy up the init/cleanup mess. Starting the bot
   with no or broken .config or .users file should no longer cause Dancer to
   crash. It should even display an error message to stderr as well as in the
   logfile.

 * (Bagder) New way of looking at the .serv file and .config server parameter.
   The previous way is abandoned, and now it works like:
     At start-up time...
   - All servers in the .serv file are added to the internal list (they may
     be DISABLED).
   - All servers in the server-field of the .config file are also added to the
     list. If one of the servers in here already is added, the previous flag
     status will be kept. Thus, if the .serv file has marked a server as 
     DISABLED, it will remain so even if it appears in the .config file too.
   This means both lists get 'merged'.

     At run-time...
   - If you attempt to delete a server from the list that was read from the
     .config file at startup, it will only get marked DISABLED. Only servers
     _not_ present in the .config file can get deleted completely from the
     list.
   - DISABLED servers will not get selected whenever the bot needs one.
   - SERVERSTAT -D <server> disables a server
   - SERVERSTAT -E <server> enables a server again

 * (Bagder) New SET concept introduced:
   - They are now grouped. The first groups out are:
     1. THRESHOLDS - Flood trigging values.
     2. FLOOD - Options toggling the channel guard level.
     3. VERBOSE - Options controlling bot talk
     4. MISC - Various properties.
     5. OWNER - Options only the owner should decide whether to use.
   - Each item (and/or group) can get an individual access level (for now,
     the "OWNER" group is the only one that uses it and it requires 242)
   - Each group and item has its own help text.
   - 'SET <group>.<item> <value>' is the new supposed way to set items with.
     If <group> and <item> is a unique beginning of one group and one item,
     that one will get affected. This way, you don't have to specify the whole
     words, only enough to make them unique.
   - 'SET <item> <value>' is still supported as long as the item name is
     unique. In the future, two groups may use identical item name for two
     different purposes.
   - When an item has been set, the status of that item's group will be
     displayed.
   - 'SET <group>' displays the current status of that group
   - 'SET' displays the current status of all groups
   - 'HELP SET <item>' works the same and now also shows the current contents
     of the item.
   - 'HELP SET <group>' tells help about the SET-group.

   This will not only make less output on the screen, but also a better way to
   deal with an increasing number of SETs as well as making it easier
   internally to add new items/groups/SETs.

   There's probably some more to it too. Just ask.

 * (Bagder) save-settings used a faulty end-of-loop check.

 * (Bagder) Switched the TZ-command's ahead-time to make it output the correct
   difference between timezones.

 * (Bagder) Made _all_ sscanf()s in command.c use limited %s and %[ scans

 * (breese) Made 'make install' run the installbot script

Version 4.0beta

 * (Bagder) Made TELL work [better] with 511 character messages.

 * (breese) Fixed the *SERIOUS* security hole in transfer.c/Execute().
   Discovered by AndyS.

 * (gr8ron) Fixed netstuff.c to compile on amiga.

 * (breese) Fixed the bug of reversing the nibbles in dcc chat on Linux.
   It was due to a broken inet_ntoa() (that's what you get for being nice
   and try to use the OS calls :)

 * (breese) Fixed the signals so that garbage IP# in dcc chat doesn't
   result in a crash.

 * (breese) Added a few toplevel domains.

 * (breese) Fixed another shell security leak. Added the EXECPROTECT
   flag as well.

 * (Bagder) Changed spell command. It will now pipe the parameter to the script
   defined with 'spellcmd' in dancer.config. (Default is "./script/speller.sh")
   This allows much more flexible spell scripts for other spell programs and/
   or different platform standards.
   The old 'cmdspell' is no longer supported.

 * (gr8ron) (Tero Janka) Fixed the config.h.amiga slightly

 * (gr8ron) Made the HELPSYNTAX flag get saved.

 * (gr8ron + Bagder) Sorted out the file name problem a little. There's now
   a files.h file containg the important file name default defines. Check that
   out and you'll see what I mean.

 * (Bagder) Made USERADD and USERMOD -P cut off the prefix letters from the
   hostpatterns when they add them to users.

 * (Bagder) Hopefully improved the SPLIT command when there is no split
   information in the list (it seems as if the numofsplits counter isn't
   decreased properly at all times).

 * (Bagder) UNBAN <pattern> should work a lot better now.

 * (Bagder) It should now compile perfectly well even without HAVE_LIBFPL
   defined in config.h

 * (breese) TELL now searches for registered username before using the
   seen data.

 * (breese) A public ctcp action without text would cause a crash. Fixed.

 * (breese) Changed launch.sh slightly

 * (breese) Changed the retrieval of the username of the bot

 * (breese) Fixed the output of SEEN -A

Version 3.10

 * (breese) Fixed a ntohl() in InitNet() to make FreeBSD Dancer run.

 * (Bagder) A bunch of hooks are now in function.

 * (Bagder) Made 'WARNADD' use the full host name of the user that added it.

 * (Bagder) FPL added labels work.

 * (Bagder) CMD accepts a pattern argument and shows only the matching
   commands.

 * (Bagder) Autokickban should no longer re-send the same ban even if many
   persons matching the same ban join. This was the propable cause why Dancer
   got flooded in an attack lately.

 * (Bagder) In cases when several bans are known with the same nick, 'unban'
   now tries to get an actual ban first. Previously, the following sequence
   didn't work: 'ban nick' 'ban *nick' 'unban nick'.

 * (Bagder) Now uses sitebans if any of the following letters are found in the
   username part of a person to ban: '*!@[]?'

 * (Bagder) Implemented breese's new userinfo parser. Makes better bans and
   warnings. Also new username prefix concept.

 * (Bagder) 'explain *' works again.

 * (Bagder) Fixed the ban pattern routine to work properly with ppl using
   usernames consisting of a valid prefix only.

 * (Bagder/breese) Fixed Match() to work better and faster with wildcards
   using multiple '*' letters in a row.

 * (DarkDesgn) Added in fpl.library supoort for the Amiga version and readded
   the HELPSYNTAX flag that mysteriously disappeared from SET.

Version 3.9

 * (Bagder) USERMOD -P is extended to better allow adding of existing patterns.
   To add the pattern 'foobar2' uses to the registered user 'foobar', we can
   now use the form 'USERMOD -p foobar2 foobar'. If the pattern specified with
   -p matches the nick of a person in the channel, that person's pattern will
   be used.

 * (Bagder) Fixed the reban problem that sometimes made Dancer claim the ban
   was already set when it actually wasn't.

 * (DarkDesgn) Added USERMOD -r to changed registered user nick.
   (Bagder) Don't allow it to use an already existing registered nick.

 * (breese) Changed the prefix stuff to avoid confusion when people use
   usernames "~" and similar.

 * (breese) Added the global variable 'now' to avoid the many time(NULL)

 * (breese) Removed a crash if someone did a CLIENT when they already
   had established a connection.

 * (breese) Based TELL on list.[ch] rather than on it's own shaky code

 * (Bagder) Added the new fpl interface. Requires the libfpl.a (or on amiga,
   the fpl.library).

 * (DarkDesgn) Added HELPSYNTAX flag - automatically show syntax information
   after a HELP command.
 
 * (DarkDesgn) Fixed LoadServ() not fclose()'ing the server file, causing 
   problems, and fixed SaveServ() and ExplainWrite() to remove() before
   rename().
 
 * (DarkDesgn) Fixed a couple #define problems in regex.c dealing with alloca
   usage, fixed and cleaned up the makefile.amiga and config.h.amiga, added 
   additional patch routines for Amiga, and fixed user.c's lack of not
   remove()'ing a file before rename()'ing it.
  
 * (Bagder) Improved the TELL matches. *REALLY* uses the stored patterns of
   all users now instead of the previous "kludge".

 * (breese) Made RELOAD verbose
  
 * (breese) Added LINKLIST
 
 * (breese) IBCP is now based on datagrams instead (DCC LINK UDP)
 
 * (breese) Removed the extra nick reported in SEEN -A
 
 * (breese) Further improved host checking.

 * (Bagder) SERVERADD, SERVERDEL, SERVERLIST and SERVERSTAT are introduced to
   enable 200-users to change the serverlist but also to store and keep more
   and detailed informaiton about the servers in the list.

Version 3.8

 * (breese) Retrieval of username improved

 * (Bagder) Added the EMAIL and SETEMAIL commands that view or set the email
   field of the userdata.

 * (Bagder) Fixed Sview -R. Displays the registered user with the specified
   nick prior to the user in the channel.

 * (Bagder) Autoop is now done on flags basis. Only ppl marked as 'Autoop'
   will get automatically opped when joined (AUTOOP still needs to be set
   ON for this to trigger).

 * (Bagder) Banprotect works. Users marked with the 'B' flag will make the
   bot kick anyone that sets a ban matching the user(s) and the ban will be
   unbanned.

 * (Bagder) Improved the "old-userfile" detection. I discovered that one of
   my old userfile fooled it to believe it was a new one!

 * (Bagder) Improved the usermod -e and -d flags.

 * (Bagder) Fixed the sview ouput to include flags and email and stuff.

 * (Bagder) Added the 'L' flag, Botlink.

 * (Bagder) Fixed the userlist checksum stuff for the bot to discover if any
   user have been modified manually.

 * (Bagder) Improved the split detection to only allow server names that end
   in true domain names.

 * (phb) New amigados patches.

 * (phb) Fixed DCC chat with port 1024

 * (breese) Fixed a timing bug in the event loop, and was hence able
   to remove a kludge I once made to circumvent the bug. Used the same
   opportunity to correct some misconceptions from the network code.

 * (breese) Changed the retrieval of the bots host/domain name

 * (breese) Fixed the message queue and the message reaper

 * (breese) Introduced linked bots. Connection is done via DCC LINK.
   Based on IBCP (Inter-Bot Communication Protocol.) Still in its early
   infancy.

 * (breese) CLIENT is accepted from outside the channel

 * (breese) Added chat system (CHAT)

 * (phb) Fixed the reversed HAVE__CRYPT test in user.c

 * (breese) Fixed the Linux crashing SeenCleanup() bug.

 * (Jean-Paul DZISIAK) Found and corrected the AddTail() flaw.

Version 3.7

* (Bagder) Added -F to USERMOD. The flags are atm:
   'B' for banprotect
   'A' for autoop

 * (Bagder) Hopefully fixed Userdomain() in cases when there's only one dot
   to the right of @.

 * (Bagder) Applied Amiga-patch from Andrew Gray <DarkDesigns@trader.com>

 * (Bagder) New user-system. The .passwd file is history and all new passwords
   will be set using the new built-in crypt routine (a must for future multi-
   bot multi-platform) and yet more information is stored about all registered
   users. Such as creation time, last (any) modification time and password
   changed time.

 * (Bagder) EXPDEL is in. the 'dancer.explain.add' file should be removed
   after you've started Dancer and changed any explain the first time.
   All explains will in this release and future always get stored in the
   .explain file by Dancer.

 * (Bagder) USERADD and USERMOD have replaced REGISTER.

 * (breese) Got rid of that annoying "connect() weirdness" message that
   Linux people were experiencing.

 * (breese) Added snapshots and cleaned up dancer.h

 * (breese) Added CLIENT for the poor souls behind firewalls or
   with buggy clients

 * (breese) autoconf added (acconfig.h configure.in, Makefile.in,
   config.h, configure). Changed all platform dependent defines to
   adhere to the defines generated by configure.

 * (breese) config.[ch] changed names to setup.[ch] to avoid confusion
   with the autoconf stuff

Version 3.6

 * (Bagder) Removed the Execute() crash. (most noticable in FIND)

 * (breese) Made 'activelog' get -1 by default which makes Dancer log
   everyhing until told not to the first time.

 * (Zagor) Fixed the tz crash.

 * (Bagder) Fixed some known ban problems:
   - the 6 second repeat when trying to set an enforced ban that isn't set by
     the server (this also takes care of the so called "overlapping" problem)
   - unbanning when the lag to the server is >6 secs made the bot resend the
     unban a number of times. 

 * (breese) Added userselectable flood parameters, add put all flood
   related functions in flood.c

 * (breese) Fixed the dcc chat crash (wish, hope)

 * (Bagder/breese) Added support for the the new ircd 2.9 hostname
   prefixes (+, -, ^, =)

 * (Bagder) I accidentaly placed two enums below the LASTMSG in language.h
   which made 'help log' crash.

Version 3.5

 * (Bagder) Took a few minutes and added a source header to all C sources,
   headers and Makefiles.

 * (Bagder) July 11th 1996 - Back on IRC. Back to Dancer development.

Version 3.4

 * (Bagder) Made a butt-ugly fix to work-around some domain name problems.
   Undocumented, find it in the source if you need more info.

 * (breese) "/ctcp bot ping" (ie. without a time) would crash the bot.
   This bug has been removed.

 * (PhB/breese) New logging system

 * (breese) Rewrote Execute() to fix a security leak

 * (breese) Fixed Linux dcc chat

 * (breese) Added non-blocking connect for clients to avoid Ping Timeout
   caused by the big timeout of connect()

 * (breese) Added socket lingering

 * (breese) Fixed SIGPIPEs from clients dropping carrier

 * (breese) USERLIST know hides higher userlevels

 * (Bagder) SAY and ME now reply about SAY being off to the errfrom.

 * (Bagder) The func matches redirects errfrom messages to NULL;

Version 3.3

 * (Bagder) Ban <pattern> does not perform the 'ban *user' siteban adjustments
   since it could easily get very stupid.

 * (Bagder) Removed case insensitivity in the regex search since that crashed
   the Solaris Dancer 3.2... ? This _must_ get fixed somehow.

 * (Bagder) Now supports exxplains that begins with a space in the file (thus
   enabling '#channel' explains when padding the word with a space).

Version 3.2

 * (Bagder) PatternExist() now matches case insensitive. It's used in the
   'E' style patterns in dancer.func.

 * (Bagder) When using DCC-chat-only (without joining the channel) you can
   now again use SVIEW as supposed.

 * (Bagder) The new "alias" system is added. For now, check out the
   dancer.func.example of how to add custom command aliases and context
   sensitive actions.

 * (Bagder) The bot is no longer gonna show up as idle if it hasn't been
   silent.

 * (Bagder) Made the ban command capable of setting a siteban when a user-
   ban already is present (it unbans the userban first, in the same MODE-
   command to the server).

 * (Bagder) Made the toplist show the top 7.

 * (Bagder) 'BAN -K' makes the bot kick all users in the channel that match
   the pattern. To be used in cases where i.e you want to kickban several
   users joined from the same user account and you don't wanna make a site
   ban.

 * (breese/Zagor) SPELL now uses the speller.awk script.

 * (Zagor) Made CONVERT aware of a bunch of known prefixes. (i.e kilo, mega,
   pico, etc)

 * (Bagder) Cleaned up the directory tree a little and put the sources in
   src/

Version 3.1

 * (Zagor/Bagder) FIND now reports "No match found, <nick>".

 * (Bagder) Added the parse.[ch] files to the package. Coming newfunc system.

 * (Zagor) 'toplist kicked'

 * (Zagor) SPELL command (requires ispell)

 * (Zagor) CONVERT is a new command

 * (breese) 'invite <password>' from outside the channel makes the bot invite
   the person

 * (breese) CUT can be used by 10+ users to cut their own 'hanging' DCC chat
   connection

 * (Bagder) PresentTop() now deals with empty toplists

 * (Bagder) AddKick() auto-banning fix.

 * (Zagor) A bunch of more toplists (continent/kicker/banner/command/mode)

Version 3.0

 * ENFORCED bans that were unbanned twice (and thus timeouting to get banned
   again), couldn't get unbanned (removed) from the banlist with the UNBAN
   command until the ban was set in the channel again.

 * BAN_ENFORCELEVEL is now raised to 200.

 * Terrible little lockup could occur if a spying user got its dcc closed.

 * BANLIST always displays double-unbanned enforced bans that wait for the
   timeout. They're displayed as "[ENFORCED] [UNBANNED]".

 * CHBAN now accepts the ban-pattern as well as nick or banid.

Version 2.17

 * Improved the main()-loop
   - probably fixed the connect bug
   - should've fixed the problem that appeared when a server closed connection
     and the bot re-connected to that same server, which previously screwed up
     the guestlist and probably some more things.

 * Made a few more commands publicly available. (like LAG, SVIEW and EXPADD)

 * (950517) REGISTER now informs of the old level when a new one is set, and
   doesn't change the user if the same level is reset as it already has.

 * Remade the AddKick() function to prevent a multitude of bans on multi-
   account bot attacks. Lemme inform you a bit of how it does the evaluation:
   If the AddKick() is about to set a ban on a user (with a *user@*.site
   pattern) and ONE other ban already is set on that site but on a different
   user, the previous ban is removed and a siteban is set. If more than one
   ban is set, the standard user-bans will be used for the new ban too!
        
 * Removed the "comma-separator" from the TOPIC command.

 * Eetu's OSF-defines and Makefile-flags were added.

 * FIND-fix for NetBSD by Phb.

 * (950514) AddKick() is now hopefully not flooding the server with ban
   requests as it did previously!

 * (950513) Applied Phb's patches. Now introduces TOPIC and CHGCMDLEVEL as
   well as the 'cmgcmdlevel' .config entry. Enables the bot runner to change
   level of individual bot commands.

 * breese's new ParseServer() code.

 * Changed Send() to check the nick-parameter. If it is NULL and no chat
   is opened, it won't do anything.

 * CmdRegister() fix to make the 'changed' stuff work better.

 * AddBan() fix to prevent multiple bans in flood attacks

 * (950513) breese's new ParseServer()

 * (950510) Made the spylink report about added and removed clients.

Version 2.16

 * (960509) Bjrn Stenberg <Bjorn.Stenberg@sth.frontec.se> added the country
   toplist.

 * (960509) TELLDEL works (breese fix)

 * Added breese's profiling stuff. Is it still makeable with regular make?
   My sunos make complains about those new fixes!

 * (960508) [Temporarily] Replaced the explain-routines with a new set. They
   give almost the same functionality. They're slower and not at all that
   neatly written, but hey, they work! ;)

 * (960507) Incorporated breese's seen-fix to add nick on host-seens.

 * Improved the PubCommand() parse just a little more.

 * SEEN <pattern> is now restricted to show only 15 matches. 'seen *' did
   make the bot to ping timeout!

 * SVIEW shows registered nick name if it differs from the used one.

 * REGISTER can change the level of non-joined users.

 * WHOIS is now an SVIEW alias.

Version 2.15

 * Made out-of-channel /msgs get shown in the spylink.

 * The use of the REGISTER command is now stored together with the data of
   the user it changed. Who did it, when it was done and what was done is
   stored. It uses an extra row in the .users file.

 * Uses breese's new Makefile. It fixes the final version by default, use
   'make debug' to create the debug version.

 * Changed the PubCommand() parse slightly to adjust to NetBSD limitations.

 * Improved kick-queue handling (increased pause between kicks after the 3rd
   kick).

 * Brand's:
   - AUTOOP feature implemented. If enabled, autoops stats >= 241
     users on join. set AUTOOP ON - enables it.
   - COMMENT is a command to add any generic comment to your userinfo.
     set COMMENT on - will make the bot diplay it on joins

 * TOPLIST is a new command for new and fun top-list information
   Only four ones added to far. Please add more as you think of any.

 * 'logdays' was removed from the .config

 * 'storedays' was added. This should be the number of days logfiles should
   be kept. Older logfiles will be removed automatically...

 * SVIEW and WHOIS doesn't display level info of users with the same or higher
   level than the peeking user.

 * NAMES is now introduced as the GUESTLIST command, available for 100+ users.
   The new status-peeking regulation is in use for that too.

 * Applied Brand's new NetBSD fixes.

Version 2.14

 * Changed the public CTCP flood algorithm. It separates ACTIONS from the rest.
   Dancer triggers a flood on 6 ACTIONs within 4 seconds or 3 any-CTCP within
   6 seconds. The one that triggers the flood is ignored, and the flooder is
   (if CTCP is ON) kicked, warned or ignored.
   The private CTCP flood detect is the same old one.

 * The kicklist (the X latest kicks) now also contains the last used nick of
   the misbehaving fellow. This way Dancer knows which nick to attach to the
   pattern if it bans and thus enabling 'unban user' for these kinds of bans
   too. Also changed the output of 'kicklist' to include the nick name.
   The kick-Q only kicks each nick once. If the user manages to change nick
   while not yet kick, it'll get kicked again.

 * All kicks now go through the internal flood check and on kick-intensive
   situations, they automatically get pushed to the kick-queue. When the
   kick-q is enabled, the 10 second CTCP ignore is switched on.

 * The kick-queue is changed a lot. Now, as long as it knows there are pending
   kicks, it scans the guestlist and kicks the first guest that is marked
   for kicking. If no person is marked, the list is considered empty.
   REASON for this:
     A) it doesn't kick nicks that already has left or was kicked by someone
        else
     B) it is nickchange resistant (queueing up old nick names like it used
        to is pretty stupid).
   Nick and flood bots have proved to get kicked with this algorithm. Left to
   experience is *extensive* flood bot takeover attempts.

 * CTCP ignores are no longer host-based. Too frequent CTCPs will make the bot
   ignore all CTCPs for 10 seconds (except 20+ user's dcc chat requests) and
   each following CTCP wile ignoring will extend the timeout time.
   All CTCP attack bots tried are ignored accordingly.

 * Changed the timeout-bans-text to use the much more describtive TimeAgo().
   Which makes the former i.e "10000 seconds ban" make "2 hours 46 minutes
   ban"

 * when TALK is on and the bot is opped or deopped, it does now only respond
   if its op-status changes. I.e just repeated opping won't make it flood.

 * Kicks are queued up if being made too quick by the bot. (Still needs more
   fixing, but this might help a little for now.)
   More StickyKick()s are used to avoid some of the extra kicks. QueueKick()
   is no longer used directly by any function.

 * WARNADD has a -b option that'll make the bot kickban matching users
   WARNLIST -b lists kickban warns only

 * TELLME and the join-notify now check for TELLs to any of all known
   accounts of registered users.

 * Added the 'bug' command for easier filing of bug reports from online
   users. Stores the bugs in 'dancer.bugs' by default. 'bugfile' is the new
   entry in the .config file.

 * Added some stuff to the status output (number of ops, split users, bot's
   mode changes, bans, enforced bans, warns and kickban warns)

 * Improved parsing of the banlist (got really confused on some american
   servers previously). Though it ignores all other info but the banpatterns.

 * Improved usage of multiple servers (previous versions had problems to
   connect to all but the first server)

 * Improved bans of users using 10-letter usernames  (NOT nick name)

 * Timeouts autobans due to repeated kicks

 * Language fixes, a separate source file for all localized strings.

Version 2.13

  * QueueKick() made the bot unable to handle clonebot attacks.
    Has been replaced by StickyKick().

Version 2.12

  * NetBSD version

  * Fixed TELLDEL (which previously wasn't working)

  * Multi kicks and Warning() kicks are now QueueKick()ed

  * Fixed some bugs, especially some in the Solaris version

  * KickAll() is now put on a queue to prevent Excess Flood

Version 2.11

  * CHBAN can now change ban reason

  * New and better warning system (linked lists)

  * WARNLIST now supports -A as well as *!*@* pattern style instead of nick

  * Logs invites

  * Made TELL secret in logs and spy-messages

  * Fixed the banlist bug, now gets cleaned up when the bot leaves the
    channel.

  * Now reads the banner's name even if the ban command was typed in public

  * Added 'warnfile' to .config

Version 2.10

  * KICKLIST shows the last (max 10) kicks done in the channel.

  * WARNLIST accepts a <match> parameter to only list the warn-patterns that
    match the specified pattern.

  * Unbanned patterns were removed too quick from the internal banlist.

  * 3 botkicks with max 5 mins interval between them, or 5 regular userkicks+
    botkicks, makes that user get banned, and all users joined from that
    account are kicked out from the channel.

  * siteban will now kick all users joined from the banned site

  * BAN-ing someone with a pattern that already is banned will now still kick
    the person.

  * Made some kicks sticky, ie. a new kick would be issued if an
    offender changes nick to avoid a kick.

  * COUNTRY will now try to guess the country if it doesn't match a
    code or a nickname. It also show the full name of the country now.

Version 2.9

  * Status 20+ ppl can change the mode even when 'MODE' is on.

  * Resistance against ctcp flooding

  * Warnings to user about potential nick collisions

  * Fixed Avalance() kicking

  * Fixed dcc chat connections

  * Rewrote netsplit stuff

  * New BAN system implemented. CHBAN/BAN/UNBAN are affected. Read top of
    bans.c to get detailed theories.

  * EXPLAIN now gets the first word and tries to explain it and ignores the
    rest of the line.

  * OPS, CHANOP and OPME are valid OP aliases

  * SAW is now a valid SEEN alias

  * SEEN -a should work now even on ppl still in the channel or netsplit!

  * TELL notify is done now on netjoins if a netsplitted person got a
    'tell' while split.

  * IDENTIFY is renamed to MYNICK

  * SHOW of a non-showable command in a dcc chat no longer crashes the bot

  * FIND now supports a number-of-matches argument.

  * Made a bunch of commands publically available

Version 2.8

  * Command line options has been removed. Everything must be handled
    through the .config file

  * New logfile is created Xth day.

  * Improved STATUS

  * Added CUT

  * Current settings are saved to file on exit.

  * Process ID gets written to the file ".pid" on start. This is used by
    the external launch script

  * Made external launch script (launch.perl) which checks if the bot is
    running and if not it starts it

  * Previously the bot could get confused if a user joined or made client
    connections more than once. Also, there was a security leak: if a
    user had authenticated, everybody from the same account became
    authenticated. This is especially unfortunate because some anonymeous
    telnet clients use the same account.

    Now each person on the channel and each client connection gets their
    seperate identification structure. If possible, these two will be
    unified. The only place where this unification can go wrong is when
    you change nick when the bot cannot see you (if you're off the channel
    or on the other side of a netsplit.) To force a unification IDENTIFY
    has been added. It must be sent through dcc chat with your current
    nick as argument.

  * Failed authentications gets logged and send on the spylink

Version 2.7

  * Added macro for easy use of multiple, randomly picked, replies.

  * SHUTDOWN can show time left, and be canceled

  * Responds to /invite's from LEVELTRUST

  * Format of seen file has been changed. Use seenconv-2.7.c to convert
    older files.

  * Commands that need passwds are hidden from CMD and ALIAS if the
    user haven't been authenticated yet

  * Added possibility to specify port and password in serverlist.
    Format is server:port:passwd

  * Fixed TALK and QUIET to work from dcc chat

  * Ban protected. If a ban matches the host of the bot, it is removed.
    If set by a user, the user is deopped.

  * Added ALIAS and WHOLEFT

  * Added more debugging info

Version 2.6

  * Made a flag indicated whether a command can be used in public
    or not.

  * List of users on the channel is now flushed in OnError() too.

  * Message queue moved from SIGALRM handler to a select(2) timeout
    handler. SIGALRM proved to cause too much trouble because it
    breaks the system calls.

Version 2.5

  * Added REPORTADD/DEL for desync/fake snooping

  * Added DEBUGADD/DEL for debug info

  * SPYLIST is obsolete and has been removed. Use CLIENTLIST instead

  * Wrote Multicast()

  * Added detection of channel desync and fake (canceled) mode changes

  * Rewrote the TELL system. Added TELLADD, TELLDEL, TELLLIST, and
    TELLME. Made TELL netsplit aware.
    Please delete older tellfiles.

  * Added low overhead server pinging and LAG

  * Added support for alternative servers

Version 2.4

  * Help for SET arguments

  * Added check for beep bombs

  * Most user definable values moved to .config file

  * LEVELPUBX are allowed to issue public commands if they have ops.

  * Added TOPIC, WALL, and SHUTDOWN

  * Rewrote SeenHost() to have proper support for wildcards.

  * Added command aliases.

  * Made a message reaper to remove all occurences of a nick/channel from
    the message queue if we receive ERR_NOSUCHNICK or ERR_NOSUCHCHANNEL
    from the server. This reduces the amount of wasted bandwidth.

  * Gave all funcs, structs, and variables dealing with the message queue
    more meaningful names.

  * Added proper handling to various errors from the server.

Version 2.3

  * Rewrote the core of the system - HandleSockets(). The previous core
    didn't work properly with the SIGALRM handler, which could cause
    problems when trying to connect to a server.

  * Streamlined the output and capabilities of Execute(). fork(2) is
    no longer needed.

  * Error handling in CmdFind()

  * Removed an endian dependency in CtcpDCC()

  * CALC works in public commands too.

  * 3 violation levels. Lowest level gets kicked after WARNLOW warnings
    (defaults to 0, ie. gets kicked immediately.) Medium level gets
    WARNMID warnings before being kicked. Highest level doesn't get
    kicked (and no warnings either.)

Version 2.2

  * Fixed the looping bug that occured if there was a client connection
    and the bot left IRC and came back. In the invalid assumption that
    the client connections were removed, as they would have if the the
    bot quitted, the client list was cleared. When the bot returned and
    got a command from a client it would loop, because select(2) would
    return immediately, and the socket that should have been read was
    no longer visible to the bot. This nasty bug caused the program to
    use as much CPU-time as it could (typically 80%)

  * Rewrote the reply system. If a client connection is used the message
    will be sent immediately, otherwise it will be put on a message
    queue (in the SIGALARM handler. These messages are send at a rate of
    one line per second to avoid flooding users and being disconnected
    from the server with an "Excess flood" message.

  * Message queue is now stalled when not connected to a server. Done by
    checking the 'running' flag

  * Notice[f] and Async were bad names. They have been renamed to Send[f]
    and Execute respectively.

  * Rearranged the command hierarchy (again)

  * Removed dcc chat dependency in Execute.

  * Made EXPADD check syntax better. Omision of a '=' would crash it. Now
    the key may be seperated from the description by either '=' or a
    whitespace. (This is known as the Edd syntax ;)

  * Added DEFPASS <nick>, which will overwrite the password of <nick> with
    default (for the forgetful soul.)

  * Added SHOW. "SHOW <nick> <cmd>" will redirect the output of <cmd> to
    <nick>

  * Changed layout of logfile. Made it more readable (and grep-friendly.)

  * Hidden passwords from logfile.

  * Extended ban timeout from <seconds> to [[HH:]MM:]SS format.

  * Put registered accounts into linked-list instead of a fixed array.
    (Some of those netproviders just have an incredible amount of accounts
    they want registered :)

  * Changed the name of the KICK flag to BOMB, as it was misleading.
    Added check for Tsunami.

  * Rewrote Userhost() to check if last part is numeric rather than
    the first part. In named addresses the last part represents the
    top-level domains, and they never use numbers (machine names
    shouldn't start with a non-alphabetic char either, but some
    sysadmins have no clue.)

  * Disabled "dangerous" public commands and options, ie. commands that
    may produce much output and hence cause flooding. (fx. EXPLAIN *,
    or SEEN -A)

  * Removed command seperator (;), as nobody used it anyway and it's
    omission leaves a much more consistant interface.

  * Accounts listed in WHOIS -A.

  * Added -M and -A options to SEEN.

  * Made NAMES command for debugging purposes.

  * Added counters for served commands. Displayed in STATUS.

  * Less DanBot dependant bot support. Now, the bot has to have exacly
    the LEVELBOT level and make the MASTERMSG action to get ops. A certain
    nickname is no longer needed.

  * Added Debug(). If an error occurs, log it _and_ send it to spylinks.

  * Added a master flag for FLOOD, which will disable reacting to floods
    some time after a netjoin. This prevents accidential kicking due to
    netburps.

  * Due to netsplit awareness ACCEPT is superfluous and has been removed.

Version 2.0

  * Added timed bans (BAN, UNBAN, CHBAN, BANLIST)

  * Added warning messages (WARNADD, WARNDEL, WARNLIST)

  * Added SVIEW

  * Added SPLIT, and made the bot netsplit aware

  * Added FIND

  * Added SAY and ME

  * Added many new flags to SET

  * Changed layout of CMD

  * Removed most /dcc chat requirements

  * Fixed stuff in SEEN

  * Gave the bot a voice of it's own

  * Added another programmer ;)

Version 1.33

  * Added SET flags to .config file

Version 1.30

  * Fixed ACCEPT and added some information

  * Fixed a security leak in OP <passwd>

Version 1.29

  * Rearranged the command hierarchy

Version 1.28

  * Added ACCEPT

  * Made the bot remember who had PASSed after a RELOAD

Version 1.27

  * Added EXPADD

  * CALC now uses the Unix 'bc' command instead of my own code

Version 1.26

  * Piped stderr as well as stdout

  * Made it possible to use options for shell commands

  * Added FINGER

Version 1.25

  * If a client (/dcc chat) connection exists all replies will be sent
    through it.

  * Added async shell commands to the socket handling. This way the bot
    won't freeze while executing shell commands.

  * Added VRFY

  * Added HOST

  * Added check for dead server socket (thanks to Titan)

Version 1.22

  * Added UPTIME (was included - and still is - in STATUS, but just to
    retain a "standard" interface.)

  * Restarts on "Ping timeout", "Excess Flood", and nickname collision.

Version 1.21

  * Command parser rewritten

  * Multiple instructions per line supported

  * Multiple arguments per instruction supported

Version 1.12

  * Backups of seen file now adds a timestamp to be unique.

Version 1.11

  * Added COUNTRY

Version 1.08

  * Users not authenticated by an IRC server, ie. someone with a tilde (~)
    in their login name, were not correctly processed.

Version pre-1.08

  * Many commands, features, and bugs. Nothing recorded.

Version 0.0

  * Added programmer ;)
