home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / dance414.zip / CHANGES < prev    next >
Text File  |  1999-02-04  |  93KB  |  2,450 lines

  1. Version V4.14
  2.  
  3. * (gr8ron 1999-02-03) SAY-setting is now overridden if the user has
  4.   LEVELBOT or higher (SAY and ME commands).
  5.  
  6. * (gr8ron 1999-02-03) Added MUTE setting. MUTE command will now
  7.   toggle this setting. MUTE won't affect SAY anymore, also MUTE
  8.   won't turn WARN off but instead filter out the non-kickbannable
  9.   warnings so Dancer will still protect the channel.
  10.   Setting MUTE on will not touch any of the other settings either
  11.   (TALK, WELCOME and REPORTBAN), but it will override them to keep
  12.   the bot quiet. MUTE quarantees that your Dancer will remain quiet
  13.   unless otherwise commanded.
  14.  
  15. * (gr8ron 1999-02-03) USERMOD -C flag added to change the comment
  16.   of users. SETEMAIL -N flag added to change the email of other
  17.   users (requires LEVELEXPERT). Users with high enough level can now
  18.   change the comment and email two ways. Also modified CmdComment() 
  19.   a bit and removed the ChangeComment() function as it was only used
  20.   by CmdComment().
  21.  
  22. * (gr8ron 1999-02-03) Channel operator status of people splitting and
  23.   joining again wasn't updated properly. Fixed.
  24.  
  25. * (gr8ron 1999-02-03) Added a new function, GetDefaultText(), to get
  26.   default language strings instead of the user's default.
  27.   Useful for CUT, USERADD, USERMOD and USERDEL inform etc.
  28.  
  29. * (gr8ron 1999-02-02) Replaced the recursive Match() function with a
  30.   faster, iterative match() function from ircd. Slightly modified it
  31.   to fit the context.
  32.  
  33. * (Controller 1999-01-28) Added VOICE and DEVOICE commands.
  34.  
  35. * (gr8ron 1999-01-23) USERADD and USERMOD won't allow registered nicks that
  36.   start with a digit anymore. Not a really useful feature, but makes it
  37.   easier to implement certain functionality. Conforms to IRC RFC.
  38.  
  39. * (gr8ron 1999-01-22) Finetuned OnMode() function.
  40.   Changed the way strictop works a bit: when a user with level less than
  41.   max(LEVELCHANOP, OPLEVEL) ops a user whose level is lower than
  42.   max(LEVELRECOG, OPLEVEL), Dancer will deop both users. Also Dancer won't
  43.   deop himself anymore when strictop is on and he doesn't recognize himself
  44.   as a LEVELBOT user. Otherwise strictop should be like before, except that
  45.   OPLEVEL matters as you can see from above (when OPLEVEL > LEVELRECOG).
  46.  
  47. * (gr8ron 1999-01-22) Added OPPROTECT setting:
  48.   When a user with level less than max(LEVELCHANOP, OPLEVEL) deops or kicks
  49.   a user whose level is higher or equal to max(LEVELCHANOP, OPLEVEL), Dancer
  50.   will deop the 'abusive' user and op the deoped user (if he was deoped).
  51.   Chan-op users can still deop and kick anyone they like.
  52.  
  53. * (gr8ron 1999-01-20) Finetuned the USERMOD command a bit. One can now
  54.   use the -R flag to change the userdata of a specific registered user
  55.   with that name prior to another recognized user joined with the same
  56.   nick when <nick> is not specified. Otherwise -R works like before.
  57.   -P will inform a non-recognized user only if the added pattern matches
  58.   the currently joined guest's pattern using that nick.
  59.  
  60. * (gr8ron 1999-01-19) Added a simple isspacechar macro to replace most
  61.   of the isspace and isgraph macros. This allows usage of scandinavian
  62.   characters with certain commands as isspace returns true for
  63.   scandinavian characters. SPY will now show scandinavian characters
  64.   correctly without stripping them from the first two words, EXPLAIN
  65.   allows scandinavian keywords, and more. In _NextWord() isspace was also
  66.   replaced with isspacechar.
  67.  
  68. * (gr8ron 1999-01-18) LanguageNum() will now check for shortname too.
  69.   This means that users can do f.ex. 'language nl' to set their language
  70.   to Dutch.
  71.  
  72. Version V4.13.5
  73.  
  74. * (gr8ron 1999-01-18) Added Finnish translation.
  75.  
  76. Version V4.13.4
  77.  
  78. * (gr8ron 1999-01-15) Fixed a nasty busy-loop bug in gr8ron's AddKick()
  79.   patch.
  80.  
  81. * (gr8ron 1999-01-15) Added OPLEVEL setting which can be used to
  82.   restrict the user-level from which upwards users are allowed to
  83.   have and manage ops. Setting OPLEVEL to 0 turns it off. Affects
  84.   STRICTOP, OPPROTECT, NETSPLIT, LOCKKEY, LOCKMODE and LOCKLIMIT
  85.   when on.
  86.  
  87. Version V4.13.3
  88.  
  89. * (gr8ron 1999-01-14) Users are now allowed to use NEWPASS without a
  90.   prior call to PASS when user's password is defpass.
  91.  
  92. * (gr8ron 1999-01-14) Primary language for the bot to use can now be set
  93.   online with the SET command (requires LEVELOWNER).
  94.  
  95. * (gr8ron 1999-01-14) Moved a few strings to language.c
  96.  
  97. Version V4.13.2
  98.  
  99. * (gr8ron 1999-01-12) Added banprotect setting which works almost like
  100.   the autoop setting, but as the main switch for banprotection.
  101.  
  102. * (gr8ron 1999-01-12) Fixed IllegalBan(). It was possible to ban banprotected
  103.   users when they were not in the channel, as reported by newlook.
  104.  
  105. * (gr8ron 1999-01-12) LEVELBOT or higher users are now allowed to ban
  106.   banprotected users without Dancer interfering with a deop and unban.
  107.  
  108. * (gr8ron 1999-01-12) Fixed a bug in YP stuff (netstuff.c) that sometimes
  109.   copied misc crap to nameserver char array, causing HOST command to
  110.   fail miserably.
  111.  
  112. * (gr8ron 1999-01-12) Added USERDEL -F flag to force an immediate removal of 
  113.   a user from the userlist.
  114.  
  115. * (gr8ron 1999-01-12) Fixed a bug in CmdKick() which caused KICK to
  116.   fail when used by users whose level was lower than LEVELTRUST.
  117.  
  118. * (gr8ron 1998-01-12) If a non-passed user tries to CUT his DCC using
  119.   PRIVMSG (through server), Dancer should now notify the user about the
  120.   required registration with a server NOTICE. This is done because
  121.   sometimes a user may lose control to his DCC and he might have
  122.   problems cutting his DCC without getting any response from Dancer.
  123.  
  124. * (gr8ron 1998-01-12) SPY didn't snoop commands executed by guests who
  125.   were not recognized as real users. Fixed this.
  126.  
  127. * (rek2wilds 1999-01-10) Spanish translation added. Thanks to rek2wilds
  128.   <rek2@netnitco.net>
  129.  
  130. Version V4.13.1
  131.  
  132. * (Bagder 1999-01-08) Euro uses EUR instead of XEU now.
  133.  
  134. Version V4.13
  135.  
  136. * (Bagder 1999-01-04) Added Euro and EU to the contry list!
  137.  
  138. * (Tero JΣnkΣ 1998-12-09) user.c fix, as posted on the list Dec 4.
  139.  
  140. * (Bagder 1998-09-23) Corrected a long time SEEN bug that made the bot report
  141.   incorrect after "nick games", when two people have one changed nicks with
  142.   each other and similar.
  143.  
  144. * (Bagder 1998-09-07) Just removed the warnings the gcc compiler in my new
  145.   Linux Redhat 5.1 system showed me.
  146.  
  147. Version V4.12.2
  148.  
  149. * (TheCrow, 28 Aug 1998)
  150.   A small patch which corrects a couple of syntax errors in language.c and
  151.   will make Dancer show the nick pattern as well as the host pattern of the
  152.   warning being removed, to fit in with the fact that Dancer now uses nick
  153.   patterns in warnings!
  154.  
  155. Version V4.12.1
  156.  
  157. * (Tero JΣnkΣ 1998-08-18) Enhanced the AddKick() fix. Distributed as a
  158.   separate patch on the mailing list.
  159.  
  160. Version V4.12
  161.  
  162. * (Bagder 1998-08-17) As reported by Tero JΣnkΣ, the bot could crash itself
  163.   in the AddKick() function during situation of extensive abuse. The AddKick()
  164.   function has now been extended to be capable to extend the kicklist in case
  165.   of need. This may sort out the problem in i.e IRCnet #amiga.
  166.  
  167. * (Bagder 1998-08-03) Changed the 'void main' to 'int main' to better apply
  168.   to C standards.
  169.  
  170.  (-- Version 4.12-pre used by Bagder)
  171.  
  172. * (Bagder 1998-07-26) Redhat 5.0 patch. configure failed on the non-blocking
  173.   check and transfer.c shouldn't have that #ifdef linux kludge in the top.
  174.  
  175. * (Bagder 1998-07-20) getopswhenalone.fpl had an error on the last line.
  176.  
  177. * (Bagder 1998-07-06) No longer prevents opping already opped people. Server
  178.   desynch and irc weirdnesses may require it at times and OP flooders should
  179.   die anyway. Bah.
  180.  
  181. * (Bagder 1998-06-16) Ray Akey's patch needed a fix.
  182.  
  183. * (Bagder) Thomas Finnerup <Picco@Picco.dk> reported a topic problem for
  184.   networks that grok topics longer than 128 characters. The max topic limit
  185.   was raised to 512.
  186.  
  187.   *** What IRC networks need is a standard way for a client to find out all
  188.   network-specific lengths, sizes and other things special for that particular
  189.   network so that "we" could adjust automatically... ***
  190.  
  191. * (Bagder) Dancer 4.11 doesn't compile on a SunOS 5.6 with a gcc that works
  192.   perfectly well on 5.5.1. Appearantly a gcc problem. Posted a patch to the
  193.   mailing list that lets the 4.11 source compile.
  194.  
  195. Version 4.11
  196.  
  197. * Marcus A. Hofmann <marcus.hofmann@stud.uni-muenchen.de> added German!
  198.  
  199. * Ray Akey <rakey@cnetbbs.net> made a parse.c patch to fix a silly bug.
  200.  
  201. * (Bagder) Added 'myhost' as a valid setting in the .config file. It is the
  202.   same as setting the DANCER_MYHOST environment variable. The environment
  203.   variable has priority over the config file string. Remember, to generate a
  204.   new neat config file, run 'dancer config >tempfile' and edit the tempfile to
  205.   fit your needs before you do 'mv tempfile config' (replace "config" with the
  206.   name of YOUR config file).
  207.  
  208. * (breese) OnJoin() fix for IRCnet extra-data
  209.  
  210. * (breese) OnPing() fix for i.e gamma.net's spoof-preventer.
  211.  
  212. * (TheCrow) "a patch that adds an extra config item to dancer.config.
  213.   I refer to the TODO file in the Dancer archive:
  214.   * A static 4-letter-combo that the bot will always recognize as itself
  215.     regardless of the current nick.
  216.   and that is exactly what it is supposed to do :)
  217.  
  218.   You can specify 'staticnick' in dancer.config e.g. 'staticnick = emot' then
  219.   when you restart your Dancer and do a channel command you can either use the
  220.   first 4 chars of the bots current nickname or use this 4 letter static
  221.   nickname e.g. 'emot top talk'.
  222.  
  223. Version 4.10
  224.  
  225. * (Bagder) On request from Chris Elsworth <chris@celsworth.demon.co.uk>
  226.   I made CHGCMDLVL only capable of changing commands that require lower
  227.   level than the user using the command.
  228.  
  229. * (TheCrow) Made WARNLIST use the nick part too for the pattern matching.
  230.  
  231. * (TheCrow) Made warnadd -b warnings use the nick pattern properly when
  232.   constructing ban patterns.
  233.  
  234. * (TheCrow) Solved some of the problems with excessive commenting on netheals
  235.   if the COMMENT is enabled.
  236.  
  237. * (Bagder) As being showed by Joel Hein <julle@person.dk>, Dancer could not
  238.   send PRIVMSGes from FPL programs, so I made Do() work from within FPL.
  239.  
  240. * (Bagder) SEEN did produce some non-translated text in some conditions, as
  241.   noted by Thomas Finnerup <Picco@Picco.dk>. Brian Jensen <brj@vejlehs.dk>
  242.   brought me the danish translation.
  243.  
  244. * (Bagder) WARNADD with a pattern like nick!*@* didn't previously work since
  245.   the bot didn't take the nick name in consideration when it compared if the
  246.   pattern matches itself. Reported by "Justin (TheCrow)"
  247.   <justin@mistral.co.uk>
  248.  
  249. * (Bagder) WARNADD did treat the nick in a very lame way when the warnadd
  250.   parameter was just a nick converted to a pattern. Reported by
  251.   "Justin (TheCrow)" <justin@mistral.co.uk>
  252.  
  253. * (Bagder) Applied the win32 patch brought by Chris Larsen <vader@vader.dk>.
  254.   There is now a separate win32/ directory with instructions and stuff for
  255.   the win32 version of Dancer.
  256.  
  257. Version 4.9
  258.  
  259. * (Bagder) Prevents known users from re-invoking IDENT. Suggested by
  260.   "Justin (TheCrow)" <justin@mistral.co.uk>
  261.  
  262. * (Bagder) Made the shutdown command better deal with the time parameter
  263.   if used as first parameter. It should now work even if 0 is the first digit
  264.   in the time string. Chris Larsen <vader@vader.dk> reported.
  265.  
  266. * (Bagder) Removed the extra space in front of the shutdown reason that
  267.   appeared for some users. Chris Larsen <vader@vader.dk> reported.
  268.  
  269. * (Bagder) Dancer lacked the toplevel domain .cd (Congo). Added now.
  270.   Robert Martin-Legene <robert@DK.net> reported 
  271.  
  272. * (Bagder) Applied Ronny Bangsund's norwegian updates.
  273.  
  274. * (Bagder) CTCP ACTION floods are no longer triggering like other CTCP floods
  275.   since they are not at all as lethal. Noticed by "Justin (TheCrow)"
  276.   <justin@mistral.co.uk>
  277.  
  278. * Chris Larsen's FreeBSD hint how to get FPL working:
  279.  
  280.   Hmm FPL works nicely for me on FreeBSD 2.2.1 and 2.2.5
  281.  
  282.   I use the Generic UNIX makefile and GCC with the following parameters:
  283.   CFLAGS  = -DUNIX -DSHARED -ansi -pedantic -g -funsigned-char
  284.   CC      = gcc
  285.   LD      = ld
  286.   LDFLAGS = -Bshareable -Bdynamic
  287.  
  288.  
  289.   test it with : #./SFPL ../demo.FPL 
  290.  
  291.   check that you have:
  292.   /usr/lib/libfpl.a
  293.   /usr/lib/libfpl.so.1.0
  294.  
  295.   or in your local library
  296.  
  297.   else do :
  298.   cp libfpl.a to /usr/lib/libfpl.a
  299.   ln -sf /usr/lib/libfpl.a /usr/lib/libfpl.so.1.0
  300.  
  301. * (Keith Blakemore-Noble) Fixed the usermod -r <too long nick> problem.
  302.  
  303. * (Ulf Heiman's) OVERRIDE_USER patch was included for the dirty deed hackers
  304.   among the crowd of bot runners who wan to change user id of the bot instead
  305.   of using the proper one. You're on your own when going that road.
  306.  
  307.   (These two changes below were posted as commentx2_486.patch 98-02-26)
  308.  
  309. * (Justin) addition that enables high-level dudes to change other users'
  310.    comments by issueing "comment -n <nick> <comment>". Also, setting comment
  311.    to 'none' will delete it.
  312.  
  313. * (Bagder) Andrew Shuttlewood reported an overflow situation when you add a
  314.    VERY VERY long comment and then sview'ing the person. Now, 256 characters
  315.    is the maximum length of a comment and the output buffer for sview is
  316.    enlarged.
  317.  
  318. Version 4.8.6beta
  319.  
  320.  * Ulf Heiman <eluhe@sydkraft.se> corrected the htonl() problem all the
  321.    multi-IP fiddling-around had added to the DCC CHAT.
  322.  
  323.  * (breese) The "final" (?) multi IP fix.
  324.  
  325.  * (Justin) Fixed the flaw that the latest sview fix added.
  326.  
  327. Version 4.8.5beta
  328.  
  329.  * (TheCrow) Reported and found the bug leaving the comment field out in
  330.    various sview outputs.
  331.  
  332.  * Keith Blakemore-Noble fixed a flaw in the server parser.
  333.  
  334.  * (Bagder) Total number of kicks is now counted, and TOP KICK should work
  335.    better now! (NOTE: this change is not identical to the patch sent to the
  336.    mailing list 1998-02-17)
  337.  
  338. Version 4.8.4beta
  339.  
  340.  * (breese) I think I've fixed the multiple IP thingy now (not a nice fix
  341.    though.)
  342.  
  343.  * (Bagder) %u in ctcppub: in .fplconf did not contain the proper user (in
  344.    fact, 'current' was wrong for all CTCP flows...)
  345.  
  346. Version 4.8.3beta
  347.  
  348.  * (Bagder) Since two independant buffer overruns were reported yesterday, I
  349.    spent three minutes adding more boundary checks to the numerous sscanf()
  350.    calls. I found several other holes, but I don't think I saw anyone as
  351.    lethal as the out-of-channel thing (reported by Alex Holst).
  352.  
  353.  * (Bagder) I also enlarged several buffers used for transfers and decreased
  354.    the maximum allowed sizes for some input.
  355.  
  356.  * (Bagder) Regarding the CLIENT bug reported to occur on a multihomed machine
  357.    (reported by Andrew Shuttlewood), I have now added an error check that will
  358.    add an entry in the logfile if the host you specify in DANCER_MYHOST
  359.    doesn't give a proper internal ipnumber for dancer (line 921 in netstuff.c
  360.    in the new 4.8.3beta).
  361.  
  362.  * (Bagder) checks for and no longer sends mode +o to guests who are
  363.    already channel operators.
  364.  
  365.  * Tero JΣnkΣ's gcc-on-Amiga patch is applied.
  366.  
  367.  * Keith Blakemore-Noble's modified smakefile for Amiga compiles (downloaded
  368.    from his site) is included.
  369.  
  370. Version 4.8.2beta
  371.  
  372.  * (breese) Fixed the multihost thing. To change host (to one of your multiple
  373.    hosts), set DANCER_MYHOST to your IP number.
  374.  
  375. Version 4.8.1beta
  376.  
  377.  * (Bagder) As reported by 'Joker': When the bot is kicked out of a channel,
  378.    it doesn't flush its internal ban list. When it rejoins or joins another
  379.    channel the former bans will remain marked as ACTUAL to the bot. This will
  380.    in many cases make the bot kick any user joining that match one of those
  381.    patterns.
  382.  
  383.  * (Tero JΣnkΣ) Corrected two bugs in user.c and two in netstuff.c - the worst
  384.    and most serious one being the CUT crash.
  385.  
  386.  * (Bagder) Applied the patch supplied by Ulf Heiman <eluhe@sydkraft.se> and
  387.    activated it with the #define LAB_PATCH in dancer.h. If this turns out to
  388.    be a good and working patch, we make that the only code in the next
  389.    release.
  390.  
  391.  * (breese) PubCTCP() did contain some old code that prevented /me to get
  392.    logged and also made public CTCP flooding possible.
  393.  
  394.  * (Bagder) Fixed the logging function to work properly on the first day of
  395.    a year! ;-)
  396.  
  397.  * (Bagder) /quit with an odd reason could trick the net split detection and
  398.    lead to a crash.
  399.  
  400.  * (Bagder) 'TZ now' should now show the actual local bot time, not GMT.
  401.  
  402. Version 4.8
  403.  
  404.  * (Bagder) Corrected some YP handling in netstuff.c
  405.  
  406.  * (Bagder) Found and corrected a terrible bug in NewsSave().
  407.  
  408.  * (Bagder) BUG no longer files a report if it is empty.
  409.  
  410.  * (Bagder) In fact, warnadd -b *!*@* didn't work at all. I fixed it. It
  411.    now also checks on nick changes, unless nick flooding is going on.
  412.  
  413.  * (Bagder) 'warnadd -b *!*@*' did mess up the nick part. 'Xcal' reported.
  414.  
  415.  * (Bagder) Made the FPL hooks only run once as expected!
  416.  
  417.  * (Bagder) Re-wrote and improved large parts of the FPLinDancer manual. It is
  418.     now a lot more accurate and describes Dancer as it is, not as it could've
  419.     been.
  420.  
  421.  * (Bagder) ChanInfo(), Join() and Leave() were added to FPL. I also wrote a
  422.    tiny script called 'getopswhenalone.fpl' in the example/ directory that
  423.    makes the bot leave and join again if left alone in the channel without
  424.    ops.
  425.  
  426. Version 4.7.1
  427.  
  428.  * (breese) Added support for multi-homed machines.
  429.  
  430.  * (breese) Added detection of modes in extended JOIN lines.
  431.  
  432. Version 4.7
  433.  
  434.  * (breese) Fixed UPPER and BEEP checking, which goofed on HP-UX.
  435.  
  436.  * (breese) Fixed LANGUAGE with no arguments
  437.  
  438.  * (breese) Localised many messages (many still left though)
  439.  
  440.  * (breese) Using ISO 639 abbreviations in language.c now
  441.  
  442.  * (breese) Colour code kick is now part of the normal warning system.
  443.  
  444.  * (breese) Fixed DO not to crash on "DO #channel +b %s".
  445.  
  446.  * (breese) Fixed BANLIST not to crash if %s!%s@%s (or similar) was banned.
  447.  
  448.  * (breese) Fixed the TELL functions so that they ignore prefixes
  449.  
  450. Version 4.7beta6
  451.  
  452.  * (Bagder) LANGUAGE with no parameters will now list all available languages.
  453.    Using a substring of a language will also be sufficient to select one.
  454.  
  455.  * (Bagder) Now records and stores whether a user is ircop when (s)he joins.
  456.  
  457.  * (Bagder) Introduced 3 new 'flags' to the UserInfo() command (in fpl) to
  458.    check user-data with: "ircop", "voice" and "chanop". They will make
  459.    UserInfo() return 1 if the user has the specified flag enabled, and 0 if
  460.    the flag isn't set on the user. Example usage:
  461.  
  462.         void CrawlforOper(string nick)
  463.         {
  464.           int ircop = UserInfo(nick, "ircop");
  465.           if(ircop)
  466.             Send(nick, "Oh you mighty op, your word is my command");
  467.         }
  468.  
  469. Version 4.7beta5
  470.  
  471.  * (breese) Pointed out a bug in the UserInfo code.
  472.  
  473.  * (Bagder) FPL errors are now logged, stderr is often useless for that.
  474.  
  475. Version 4.7beta4
  476.  
  477.  * (Bagder) Added support for UserInfo() in fpl. Used like
  478.  
  479.     string nick = "foobar"; /* nick name to check */
  480.     int level = UserInfo(nick, "level"); /* returns level of the user */
  481.  
  482.     If the nick isn't found in the channel (or the second parameter to this
  483.     command isn't "level"), -1 will be returned.
  484.  
  485.  * The verbose flag for USERLIST was not set by default. (Reported and fixed
  486.    by chippi@umich.edu)
  487.  
  488. Version 4.7beta3
  489.  
  490.  * (Bagder) 'dontsiteban' is a new entry in the .config file that allows a list
  491.    of domain patterns that should *never* be sitebanned by the bot.
  492.  
  493.  * (Bagder) I have now included the FILEGET scripts in the script/ subdir. To
  494.    try them out you need to scan some sources to find out...
  495.  
  496.  * (Bagder) Included my new urlget.c which replaces the older httpget.c in the
  497.    currency directory. This can get files from ftp servers as well as http and
  498.    gopher. Bugfixed the http part too.
  499.  
  500. Version 4.7beta2
  501.  
  502.  * (Bagder) No longer replaces the nickpart in warnadd *!*@* style patterns
  503.    with a '*' to allow warnings on nick-dependent patterns.
  504.  
  505.  * (Bagder) Also removed the '!', ']' and '[' from the list of illegal letters
  506.    since they're too likely to be used by lusers.
  507.  
  508.  * (Bagder) Adjusted the banpattern generator. If a user with a 'bad' letter
  509.    in the user name gets banned, Dancer previously changed that into a site
  510.    ban. This fix now checks for a previous ban on that site, and only if there
  511.    is none it will be made into a siteban. Otherwise a standard userban will
  512.    be used.
  513.     The reason for this is of course to make it ban, since the siteban won't
  514.    take effect if there already is a ban on the site. The question remains of
  515.    course if it shouldn't REMOVE the single previous ban instead before and
  516.    then set the siteban (of course only if there really was a single ban).
  517.  
  518.  * (Bagder) DCC CHAT broke down (due to FILEGET stuff). Works again now.
  519.  
  520. Version 4.7beta
  521.  
  522.  * (Bagder) FILEGET concept. This is still #ifdef BAGDER. It needs external
  523.    scripts to work.
  524.  
  525.  * (Bagder) 'SET LIMIT <ON/OFF>' enables/disables channel limit (+l) locking
  526.    and with SET CLIMIT the prefered limit is set.
  527.  
  528.  * (Bagder) CLIENT on a bot running on Linux (and more) didn't work
  529.  
  530.  * (Bagder) My change of include-files in dancer.c caused some errors that I
  531.    think I've fixed now.
  532.  
  533. Version 4.6.6
  534.  
  535.  * (Bagder) AndyS reports that the long-tells bug is still there. I remade the
  536.    TELL command to split long tells into two separate tells.
  537.  
  538.  * Martin Galipeau <sevenup@Pouet.endirect.qc.ca> brought the french
  539.    translation.
  540.  
  541. Version 4.6.5
  542.  
  543.  * (breese) Discovered two language.c errors, one of them caused a sigsegv.
  544.  
  545.  * (Bagder) Corrected a multiple include problem of config.h. I also made
  546.    setup.c no longer use __CONFIG_H but __SETUP_H instead
  547.  
  548. Version 4.6.4
  549.  
  550.  * (Bagder) Now the alert-on should be logged properly and even increase
  551.    "alert-level" for each time alert-ON is called. Perhaps we might even
  552.    soon make some of the defense-mechanisms in Dancer actually use the
  553.    alert level to trigger things more easily...!
  554.  
  555.  * (Bagder) 'SET' no longer shows set-groups for persons that have lower
  556.    level than the group require. I.e, the OWNER group should now only be
  557.    visible for OWNER level people.
  558.  
  559.  * (Bagder) Now limits the length of a TELL message to 450 characters. (Bug
  560.    reported by AndyS)
  561.  
  562. Version 4.6.3
  563.  
  564.  * (Keith) Added some defines to config.h.amiga
  565.  
  566.  * (Keith) Unwrapped some texts in language.c, which caused some compilers
  567.    to choke.
  568.  
  569.  * (breese) Fixed a bug in SeenAddNick(). Checking if strdup() fails
  570.    should probably be added in a million places.
  571.  
  572.  * (breese) Fixed a CONVERT bug (reported by Deryk Robosson)
  573.  
  574.  * (breese) Added some translations
  575.  
  576.  * (breese) Remove the beta-ism (only major versions, X.Y, should be
  577.    made beta versions)
  578.  
  579. Version 4.6.2beta
  580.  
  581.  * (Bagder) Fixed a bug in AddToBanList()
  582.  
  583. Version 4.6.1beta
  584.  
  585.  * (Bagder) Extended the news help texts (and made the news commands show them)
  586.  
  587.  * (Bagder) Applied Bobby Billingsley's colour-kicker patch.
  588.  
  589. Version 4.6beta
  590.  
  591.  * (Bagder) Started working on the new news system.
  592.    NEWSADD, NEWSDEL and NEWSLIST now exist in the system. So does an extra
  593.    field in the user file and 'newsfile' and 'newsexpire' in the .config
  594.    Use 'dancer config' as usual to incorporate the new things easily.
  595.  
  596.  * (Bagder) Fixed (yet another) bug in TELLDEL.
  597.  
  598. Version 4.5beta
  599.  
  600.  * (Bagder) Removed one of the IDENT commands! =)
  601.  
  602.  * (Bagder) 'USERMOD -P -' now strips the prefix from the pattern before it
  603.    is added.
  604.  
  605.  * (Bagder) The bot could accidentaly say phrases using the wrong language
  606.    (on flood-kicks etc). This is now fixed.
  607.  
  608.  * (Bagder) More translations.
  609.  
  610.  * (Bagder) Saiful!terje@hut-modem-28.hut.fi helped me compile and test Dancer
  611.    on Digital Unix and AIX.
  612.  
  613. Version 4.4.7beta
  614.  
  615.  * (Bagder) Changed the install-script to not use the substr expression
  616.    in expr since reports prove that to be missing in some systems.
  617.    (Zoran Babic <babicz@mafpz.fpz.hr> reported.)
  618.  
  619.  * (Bagder) The CMD command now allows level 999 on users.
  620.  
  621.  * (Bagder) Checks for '*' in host names on join and mark them as 'illegal'.
  622.    If FLOOD.FAKENAME is enabled, the bot will kick immediately. People marked
  623.    as 'illegalname' will not invoke ban-due-to-multiple-kicks since their
  624.    host mask may very well become a very nasty host mask. Like the guy who
  625.    joined with a host mask like "*@*.*"...
  626.  
  627. Version 4.4.6beta
  628.  
  629.  * Hans Hasselaar <hanshass@xs4all.nl> brought the dutch translation.
  630.  
  631.  * (Bagder) KickAll() no longer kicks users that have level 200 or higher
  632.    even if they match the pattern.
  633.  
  634.  * (Bagder) Made 'sview -a' on non-joined persons still show the info about
  635.    who did what to the person last.
  636.  
  637.  * (Bagder) Trying a command in public that isn't publically available will
  638.    now make the bot /notice the user about it.
  639.  
  640. Version 4.4.5beta
  641.  
  642.  * (Bagder) I changed the >20 minutes lag check to also require >20 minutes
  643.    since last server-input
  644.  
  645.  * (Bagder) Ronny Bangsund <vacuum@newmedia.no> wrote the norwegian
  646.    translation.
  647.  
  648. Version 4.4.4beta
  649.  
  650.  * (Bagder) Made 'dancer config' output the listed items without the spaces
  651.    in between them which made i.e 'server' to fail ;-/
  652.  
  653.  * (Bagder) Added a check that makes the bot consider >20 minutes lag a
  654.    disconnected connection.
  655.  
  656. Version 4.4.3beta
  657.  
  658.  * (Bagder) Added the newest httpget to the archive.
  659.  
  660.  * (Bagder) Applied Vader's fix that allows negative arguments to BACKLOG.
  661.  
  662.  * (Bagder) Added 'warnmonths' to the .config file. It tells how old a warning
  663.    must be before it gets deleted from the warnlist. The time is measured from
  664.    latest warning or if never warned for, from the set time.
  665.  
  666.  * (breese) Added lots of danish texts.
  667.  
  668. Version 4.4.2beta
  669.  
  670.  * (Bagder) LANGUAGE is a new command a user can set its preferred language
  671.    with (from the few supported ones of course). The bot will then attempt
  672.    to keep all conversations with that user using that specified language.
  673.  
  674.    Language is also saved in the user file and if it differs from the default
  675.    language, shown in the sview output.
  676.  
  677.  * (Bagder) Added the BANUSERKICKS set item in the BAN group. It sets whether
  678.    to take ordinary users' kicks into consideration when the bot decides if it
  679.    should ban for too many kicks within a limited time. If disabled, only the
  680.    bot's own kicks are counted.  If disabled, this decreases the security of
  681.    your channel a little since the ban trigger level will take longer to reach
  682.    during attacks. (Requested by AndyS.)
  683.  
  684.  * (Bagder) Made the example dancer.config only contain a comment about how
  685.    to generate a new example file ;) I also removed the obsolete .passwd file
  686.    from the example directory.
  687.  
  688.  * (Bagder) Added the useradmin.html file to the archive instead of the ASCII
  689.    version. Writing the docs in html right away makes it a lot easier to put
  690.    nice versions online ;) This one is also slightly updated.
  691.  
  692. Version 4.4.1beta
  693.  
  694.  * (Bagder) I've been told the HPUX fix works. Good.
  695.  
  696.  * (Bagder) Made the install-script use the 'dancer config' feature to make
  697.    installations get a version of the latest setup file as dancer.config.
  698.  
  699.  * (Bagder) Modified the FAQ a bit.
  700.  
  701.  * (Bagder) More translations and more texts moved to language.c and the
  702.    proper text system. (*sigh*)
  703.  
  704.  * (Bagder) Removed the %s from the 'comment:' output in SVIEW.
  705.  
  706.  * (Bagder) Added 'defaultpasswd' to the .config items. By changing this, you
  707.    can alter the password set to all users when they are added with 'useradd'.
  708.    Changing this, you improve the security slightly since the average Dancer
  709.    bot user from other channels won't know the default and most vulnerable
  710.    password of your particular channel and bot.
  711.  
  712.  * (Vader) Applied breese's suggestion to prevent the default password from
  713.    being possible to use with IDENT and also made the bot complain on all
  714.    identifications done with the default password.
  715.  
  716.  * (Bagder) Now hides IDENT from the cmd output if identprotect is ON.
  717.  
  718. Version 4.4Beta
  719.  
  720.  * (Bagder) Inserted my previously posted HPUX fix for the getdtablesize().
  721.    I haven't got any reports about the functioning of this, so I have just
  722.    assumed it works ;)
  723.  
  724.  * (Bagder) Wrote a memmove() replacement function in case of need (like
  725.    in SunOS 4).
  726.  
  727.  * (breese) Added memmove() and getdtablesize() checks to the 'configure'
  728.    script.
  729.  
  730.  * (Bagder) Running the bot with 'config' as parameter, will make the bot to
  731.    output an [example], well-commented, .config file on stdout. A very good
  732.    use for this is to start your bot config session by running "dancer config
  733.    >dancer.config" and then edit the dancer.config file according to your
  734.    wishes and desires before you run the bot for real.
  735.  
  736.    I carefully designed this to read the current settings first and output the
  737.    "old" settings set properly in the output (using the new comments).
  738.    Therefore, if things work as they should, we could make it a habit to
  739.    invoke a 'dancer config' after each update and then get the latest comments
  740.    and setup (even nicely documented!) in your .config file.
  741.  
  742.  * (Bagder) The .set file is now saved with included comments.
  743.  
  744.  * (Bagder) Introduces the IDENT command. It is an eggdrop look-alike that
  745.    let any user to add its current host pattern to his 'account' by entering
  746.    IDENT <password> [registered nick]. The 'IDENTPROTECT' item can be set to
  747.    prevent this command from being available.
  748.  
  749.  * (Bagder) Made tells get stored safer. Also made the tell messages get
  750.    saved on each TELL command invoke.
  751.  
  752.  * (Bagder) Improved USERLIST with lots of flags and options according to
  753.    requests. (As discussed on the mailing list.)
  754.  
  755. Version 4.3.5
  756.  
  757.  * (Bagder) Fixed the 'HELP SET' bug.
  758.  
  759.  * (breese) Fixed a TELLME bug.
  760.  
  761.  * (breese+Bagder) New language system. Danish and Swedish texts added.
  762.    There is a recognized 'language' label in the .config file now. 'english',
  763.    'svenska' and 'dansk' are supported.
  764.  
  765.  * (breese) Reworked the language systems.
  766.  
  767.  * (breese) Added danish as an optional language (without any way to
  768.    select it :)
  769.  
  770. Version 4.3.3
  771.  
  772.  * (Bagder) Made the SEEN use the options properly.
  773.  
  774.  * (Bagder) Made the BAN-settings get saved (and understood when read) with a
  775.    proper "ban." prefix.
  776.  
  777. Version 4.3.2
  778.  
  779.  * (Bagder) Introduced a BACKLOG command that displays the last X commands
  780.    entered by users. Requires 200.
  781.  
  782.  * (Bagder) Made JOIN and LEAVE require 100.
  783.  
  784.  * (Bagder) Made WARNLIST a level 20 command since all it does is list the
  785.    warns.
  786.  
  787.  * (Bagder) Made the link-stuff close down nicer. If no config file was
  788.    found, it crashed.
  789.  
  790.  * (Bagder) Added a sanity-check in the seen-file reader routine. Thanks to
  791.    AndyS who "borrowed" me his broken seen file! ;)
  792.  
  793.  * (Bagder) Removed quoting from Action() since there wasn't possible to
  794.    send control codes in i.e warning texts otherwise! (seen in #amigaswe)
  795.  
  796.  * (Bagder) The ban due to repeated kicks got wrong 'who' field set.
  797.   (reported by fellow Cstar)
  798.  
  799. Version 4.3.1
  800.  
  801.  * (Bagder) Made the STRICTOP only complain on +o ;)
  802.  
  803.  * (breese) Support for stacked/embedded CTCP
  804.  
  805.  * (breese) Under some circumstances it decided to use the same socket
  806.    for both the server and the link stuff, which naturally caused lots
  807.    of confusion and odd behavior. (this was actually a 4.3 patch, just
  808.    forgot to put it here)
  809.  
  810. Version 4.3
  811.  
  812.  * (Bagder) Now ignores commands sent by itself (through the DO command).
  813.  
  814.  * (Bagder) Changed the 'getrates' script to use the new httpget format.
  815.  
  816.  * (breese) Fixed httpget.c to use better input format.
  817.  
  818.  * (Bagder) Fixed the crash that happened when adding an explain longer than
  819.    256 characters.
  820.  
  821. Version 4.2.3
  822.  
  823.  * (Bagder) [on request] Introduced the 'STRICTOP' flag. Enabled, it prevents
  824.    any non-regocnized user from getting opped by someone without very high
  825.    status.
  826.  
  827.  * (Bagder) Logs error messages from the server.
  828.  
  829.  * (Bagder) Prevents TELLs to users without patterns,
  830.  
  831.  * (Bagder) Improved TELLDEL. Accepts delete of ID 0 and now allows deletion
  832.    even if you've changed machine name.
  833.  
  834. Version 4.2.2
  835.  
  836.  * (keith) Brought the 'smakefile' for [better] amiga compiles.
  837.  
  838.  * (breese) Measure lag in milliseconds now (and fixed the lag thing
  839.    which didn't look like it was working at all.)
  840.  
  841.  * (breese) Fixed a CTCP USERINFO bug.
  842.  
  843.  * (breese) Introduced the stealth user flag
  844.  
  845. Version 4.2.1
  846.  
  847.  * (Bagder) The version string will now use its own file ("version.h") to
  848.    prevent the dancer.h to get changed and re-RCSed all the time.
  849.  
  850.  * (DarkDesgn) Made the CMD command compile and run properly on amiga.
  851.  
  852.  * (DarkDesgn) Made the config.h.amiga #define HAVE_NO_GREP and the FIND
  853.    command now can scan the index file without external commands (using
  854.    plain and simple strstr()).
  855.    TODO: perhaps we should make the 'configure' script check for the grep
  856.    command and reverse the #ifdef to HAVE_GREP.
  857.  
  858.  * (breese) Added CTCP quoting
  859.  
  860.  * (breese) It now correctly records if people are voiced or not
  861.  
  862.  * (breese) Made the voicing for MODERATE use +vvv and -vvv if possible
  863.  
  864.  * (breese) Moved EXCHANGE to LEVEL_RECOG per default, to prevent
  865.    granting access to an external command to all unknown.
  866.  
  867.  * (breese) Fixed tiny details to make it compile on Ultrix
  868.  
  869.  * (breese) Added REMOTE/ON command to make linkbot perform a command,
  870.    although this isn't implemented in the underlying links yet.
  871.  
  872.  * (breese) Improved link communication. Made all multicasting go
  873.    through link too.
  874.  
  875.  * (breese) Made chat cmdchar less hardcoded, and changed it to '!'
  876.    Removed ! as alias for DO.
  877.  
  878.  * (breese) Fixed the output of USERDEL
  879.  
  880. Version 4.2
  881.  
  882.  * (breese) Fixed the CUT-bug that crashed on Linux.
  883.  
  884.  * (Bagder) Adjusted the user admin text a little according to Vader's
  885.    and breese's comments.
  886.  
  887. Version 4.1.5
  888.  
  889.  * (Bagder) Added 'UserAdmin' in the doc/ directory.
  890.  
  891.  * (Bagder) Adjusted the totaljoins fix to make it work!
  892.  
  893.  * (Bagder) Added lots of new currencies to the country array. Improved the
  894.    FindByCurrency() (for countries that use other country's currencies).
  895.    Also found new currency sites and improved the get-script and parsing
  896.    scripts a lot.
  897.  
  898.  * (Bagder) USERADD accepts '-n <passwd>' which sets the specified password
  899.    for the user at add-time. (requested by RexOrient)
  900.  
  901.  * (Bagder) Updated the FAQ.
  902.  
  903. Version 4.1.4
  904.  
  905.  * (Bagder) Added a crontab example showing how I do to get the currencies
  906.    automatically.
  907.  
  908.  * (Bagder) Added a new field to the command struct called 'hide'. If set to
  909.    true, this command won't get visible in the logfile or spylink (set for
  910.    OP, PASS, NEWPASS, TELL, INVITE and the aliases to them) to work better
  911.    (previous "leaks" were found i.e for the OP aliases).
  912.    NOTE: the usage of the commands are still sent to the spylink and written
  913.    in the logfiled but the lines will be masked like they have always been.
  914.  
  915.  * (Bagder) Added even more info on top of new logfiles. Now includes bot's
  916.    nickname and op-status, bot version and uptime info.
  917.  
  918.  * (Bagder) Rewrote the logfile naming. It should now name old logfiles like
  919.    '<logfile>.<year><month><day>'. Hopefully this now deletes them properly
  920.    too.
  921.  
  922.  * (Bagder) Remade the chat-mode commands to use , as prefix letter. (actually
  923.    made already in 4.1.3)
  924.  
  925. Version 4.1.3
  926.  
  927.  * (breese) No longer specifies '-O2' in the Makefile since too many errors
  928.    have been found connected with that one.
  929.  
  930.  * (breese) re-applied the 'explain -s' patch that somehow got lost
  931.  
  932.  * (breese) Fixed CTCP not to answer invalid requests, like a
  933.    missing ^A (for instance ^AVERSION)
  934.  
  935.  * (breese) Improved logging of ignored CTCPs.
  936.  
  937.  * (Bagder) Added some left-out items to the example dancer.config file.
  938.  
  939.  * (Bagder) Introducing the new dir-naming. The dancer dir included in the
  940.    archives will from now on be named 'Dancer-<version>' and the archives
  941.    will be named 'Dancer-<version>.tar.gz' and 'make tgz' and 'make lha'
  942.    both work dynamically with the existing directory name now.
  943.  
  944.  * (Bagder) The CHAT system now features a few commands. Enter CHAT mode
  945.    command preceeded with '/'. They are only available and recognized when
  946.    entered from DCC chat when CHAT mode is active:
  947.       /echo  - toggles echo mode
  948.       /help  - shows the help text
  949.       /me    - writes action-like lines
  950.       /names - lists all locally attached chatters
  951.    (AndyS requested)
  952.  
  953.  * (Bagder) 'hostisp' now enforces host-style userdomain patterns.
  954.  
  955.  * (Bagder) The multiple-joins check now kicks all users from the account that
  956.    has joined with more than FLOODJOINS (a new SET, also present in the
  957.    .config with the name 'thres.floodjoins') default set to 3.
  958.  
  959.  * (Bagder) Oops. Now it loads the DELETE flag properly.
  960.  
  961.  * (Bagder) Fixed the main Makefile to work with simply a 'make' the first time
  962.    instead of 'make configure'.
  963.  
  964. Done to 4.1.2 but not mentioned in the actual 4.1.2 archive:
  965.  
  966.  * (Bagder) 'hostisp' is a valid item in the .config file. Enter a list of
  967.    patterns with ISPs that should not never get sitebanned. The users of ISPs
  968.    of this kind may also get other treatments soon.
  969.  
  970.  * (Bagder) Corrected a silly sscanf() mistake in the exchange routines. Also
  971.    made the exchange abort if there's no currency information for the entered
  972.    country.
  973.  
  974. Version 4.1.2
  975.  
  976.  * (breese) Found and removed a core-bug in OnMode() in server.c (in the new
  977.    ban-record-try-to-find-nick stuff)
  978.  
  979.  * (Bagder) Made an EXCHANGE command. It should exchange between currencies.
  980.    - Currency information retrieval is external. I've written a little program
  981.      that downloads a specific webpage. (httpget.c should be included)
  982.    - Web page to currency rate format is external. I've written a script that
  983.      works great with the http://www.ny.frb.org/pihome/mktrates/forex12.shtml
  984.      which I intend to use. It has up-to-date information on ~37 currencies.
  985.      (frbparse and sedcurr should be included)
  986.    - Currency translation is done by an external program. Dancer calls the
  987.      command speficied with 'exchangecmd' in the .config file. The command
  988.      gets a complete command line and should take care of all result-
  989.      presentation.
  990.      I've written a script that works with files in the format my 'frbparse'
  991.      script outputs. (the 'rates' file should be generated by the frbparse
  992.      program).
  993.    - The 'EXCHANGE' command itself handles dot-style, known currency names (I
  994.      have added some 70 currencies known to me to the country.c array) and
  995.      country names. It then feeds the external command with the known
  996.      information, including amount, names of the currencies, names of the
  997.      countries and names of single units of the currencies.
  998.    - This system can easily be extended to get the information from several
  999.      sources. All you need to do is to write additional page-parsers. It is
  1000.      also fully aware of situations when currencies appear and disappear from
  1001.      lists.
  1002.    - 'EXCHANGE list' lists all available currencies right now (may vary from
  1003.      day to day if the web-service varies).
  1004.    - 'EXCHANGE <currency/country>' will present currency information for the
  1005.      specified country/currency. Short names and dot-style domain names are
  1006.      also searched for.
  1007.  
  1008. Version 4.1.1
  1009.  
  1010.  * (Bagder) Made the old BDUG use the DBUG one. THIS DOES MAKE THE LOG COMMAND
  1011.    NECESSARY TO REINVOKE DUE TO MOVED FLAGS!!!! DO NOTE!!! RE-SET YOUR PREFERED
  1012.    LOG-STATUS!!!
  1013.  
  1014.  * (Bagder) No longer performs double CloseConnection() calls when CUT is used.
  1015.    (it is still properly done within the RemoveClient() body)
  1016.  
  1017.  * (Bagder) Checks that there is a split-server list before trying to scan it.
  1018.    (caused a SIGSEGV when the bot was started with no .config or .users)
  1019.  
  1020.  * (Bagder) The .users file is slightly changed again. All lines starting with
  1021.    the (registered) nick name are now prefixed with a space. The scanning
  1022.    function of course still deals with the old-style, but all new files will
  1023.    be written with the new style. Done to avoid [future] problems. This makes
  1024.    .users files written in this version impossible to read in older versions.
  1025.    Hopefully the last time we see such a move with the .users file.
  1026.  
  1027.  * (Bagder) #ifdef'ed out the unused SaveComment(). Are there more?
  1028.  
  1029.  * (Bagder) Now dynamically counts the number of seen nicks and hosts instead
  1030.    of just counting them at load-time.
  1031.  
  1032.  * (Bagder) Made the seen-save only get done if there was a change to the
  1033.    seen data. If it isn't saved, a log line will still be added saying so.
  1034.    This way, there won't be no .seen file when starting the bot without the
  1035.    proper files, or when starting the bot when it can't connect to any server
  1036.    and so on.
  1037.  
  1038.  * (Bagder) Made the Log() function only print the data to stderr if the log
  1039.    stuff hasn't been inited. This way, every error prior to the loginit will
  1040.    get visible (if invoked from a visible terminal). Then we don't need
  1041.    duplicate error messages in dancer.c.
  1042.  
  1043.  * (Bagder) Added a bunch of new checks that the bot really is chanop before
  1044.    trying to perform a bunch of commands. It gives better serives to the user
  1045.    of the commands as well as it doesn't load the server with silly commands.
  1046.  
  1047.  * (Bagder) Now scans the DO command line and cancels QUIT commands. Quitting
  1048.    the bot should be done properly with the QUIT command. We might consider
  1049.    and implement further protection for other commands such as #join etc too.
  1050.    (breese's idea)
  1051.  
  1052. Version 4.1.0
  1053.  
  1054.  * (Bagder) When a ban is recorded from the channel, Dancer does now try to
  1055.    attach a nick to the pattern by first looking through the channel for a
  1056.    person joined matching the pattern, and then it looks through the kicklist
  1057.    for a match. If it finds a match, the ban-entry gets the GUESSNICK bit
  1058.    set and when listed, the nick will be embrased with braces like {nick}
  1059.    instead of (nick) if it was "guessed".
  1060.    NOTE: In normal cases, this will work flawlessly. Like when someone bans
  1061.    and then kick a single user. During attacks and when re-arranging bans,
  1062.    it will without doubts enter wrong nicks sometimes. The nick name does
  1063.    not matter in any other way than as a short cut for unbans etc.
  1064.  
  1065.  * (Bagder) Went through a bunch of items in setup.c and made sure only one
  1066.    of the duplicates are saved in the .set file. There's no reason to save
  1067.    two lines with the same info. The old items are still read and recognized,
  1068.    but the new version is saved.
  1069.  
  1070.  * (Bagder) Added SHOW to the command list. It doesn't do any difference at
  1071.    all when it comes to functioning, but now it is visible in the command list
  1072.    and better supported with SYNTAX and HELP.
  1073.  
  1074.  * (Bagder) Added TimeToSec() in the fpl-controller. I think you all should 
  1075.    have a timer.fpl in the example/ dir now that shows how to add a command
  1076.    to the bot that features an easy timer function.
  1077.  
  1078.  * (Bagder) Added USERDEL. It sets a flag on the specified user (and if the
  1079.    user is joined and -q wasn't used, it is informed) and if the user isn't
  1080.    changed during the following month, it will not get saved after that
  1081.    period. You may only remove a DELETE flag with 'USERDEL -U' (for undo).
  1082.    You cannot set a delete flag twice, you cannot remove a delete flag from
  1083.    someone that doesn't have it set and you cannot flush or in any way force
  1084.    the user to get removed from the list before the timeout month has passed.
  1085.    Any other modification of the user will make the timeout time (30 days) to
  1086.    start over.
  1087.    Added the DELETE flag to sview, load and save functions too.
  1088.  
  1089.  * (Bagder) Added awareness for *!*@* style patterns in the TELL mechanism.
  1090.    In some cases it picks the pattern from the userdata, and since that does
  1091.    support the nick-part, the TELL routine(s) should be aware (and strip the
  1092.    nick-part).
  1093.    Also made better sanity-checks in the AddTell() command to check for illegal
  1094.    patterns that may have been added to a user...
  1095.    Added small checks in USERMOD and USERADD that prevent too weird patterns.
  1096.    They _have_ to contain the '@' character.
  1097.    (done after reading a gr8ron report)
  1098.  
  1099.  * (Bagder) So I forgot to make a correct version number in the 4.0 dancer.h
  1100.  
  1101. Version 4.0Release
  1102.  
  1103.  * (Bagder) SHOW to a channel can only be done by CHANOP level people.
  1104.    SHOW to a channel now requires the command to be publicly useable
  1105.    (which was a previous leak some found out about).
  1106.  
  1107.  * (Bagder) Added '@' in front of the chanops' nicknames in the log-text
  1108.    written on join and /WHO listings.
  1109.  
  1110.  * (Bagder) Automatically marks its own entry in the guest-list as 'Bot'.
  1111.  
  1112.  * (Bagder) Now the bot counts total joins for the registered users on all
  1113.    their registered hostpatterns. For now, it will check if the hostpattern-
  1114.    counter is larger than the 'totalcount' and then set the totalcount to
  1115.    the highest amount. This way, moving to the new counter should be
  1116.    invisible to users. ALSO, the old way still needs to be maintained to be
  1117.    able to count joins on non-registered users.
  1118.  
  1119.  * (Bagder) I cut away some of the welcome bullshit output dependent on the
  1120.    join-count. I "had to" do it since I changed the way the join-count is
  1121.    achieved.
  1122.  
  1123.  * (Bagder) I went through server.c and made all calls to FindNick() actually
  1124.    check the returncode. We might get actions from the channel that affect
  1125.    users that we won't find with FindNick() at times when we have just joined
  1126.    the channel without gotten the complete /WHO list.
  1127.  
  1128.  * (Bagder) Kicksystem.
  1129.    - Extended the kicklist to 15 items and multikick-means-ban to 10 full
  1130.      minutes.
  1131.    - Rewrote the flow in AddKick() slightly. I will do some more debugging
  1132.      to see why multipl instances of the same pattern can occur in the list.
  1133.    - When adding a new item to the kick list, it could use the wrong pattern.
  1134.    - The kicklist command has a little more informative last line.
  1135.    - BAN_ENFORCELEVEL is now using the new level-system.
  1136.  
  1137.  * (Bagder) Warnsystem.
  1138.    - The WARN_TIMEOUT_REMOVAL define in bans.h sets timeout time for
  1139.      warnings. Warnings set and not warned for during the specified time,
  1140.      will not be saved. Default time is 3 months. People tend to forget or
  1141.      ignore to clean the warnlist, and accounts and sites change as fast as
  1142.      longer timeouts would probably not be useful anyway.
  1143.  
  1144.  * (Bagder) USERMOD and USERADD both now inform the user about the changes
  1145.    if he is joined. (bugfixed the usermod version that didn't work before)
  1146.  
  1147.  * (Bagder) *sigh* I didn't add a length-limit in the new sscanf() in TZ.
  1148.    If there's anyway we can add some define or something that will alert if it
  1149.    finds a %s or %[ in a sscanf() call, just tell me ;)
  1150.  
  1151. Version 4.0Beta7
  1152.  
  1153.  * (Bagder) Fixed the flood thresholds to work with the actual values we
  1154.    set in the SET output.
  1155.  
  1156.  * (Bagder) A new flag is introduced. Mark all users that are bots with the
  1157.    (R)egular (R)obot flag. Use 'USERMOD -F +R' to set it. Displayed as 'Bot'
  1158.    in the sview output. NOTE that this is different to the (L)inkbot flag in
  1159.    the way that the (R)-bots can never be linked (most probably because they
  1160.    are not Dancers nor Dancer-linking-compatible).
  1161.    I also added a flag to the guest struct called 'bot' that is TRUE if the
  1162.    user is some kind of bot. Used i.e in the toplist scanning.
  1163.  
  1164.  * (Bagder) FINGER is now host-prefix aware, and so is VRFY. I also made
  1165.    both of them ignore trying if the username of the person fits the
  1166.    BadUsername().
  1167.    (Reported by SimD)
  1168.  
  1169.  * (Bagder) SERVERDEL now supports that you specify '<server> <port>' to
  1170.    delete a server, which is useful if you have two entries of the server
  1171.    using different port numbers.
  1172.  
  1173.     gr8ron!ron@du-26.slip.utu.fi at Thu Nov 14 16:16:10 1996
  1174.      I tried 'serverdel 2,3,4' and my dancer died.
  1175.  
  1176.     - I can't see why it did. Anyone?
  1177.  
  1178.  * (Bagder) WARNADD, using *!*@* style pattern, now prevents the user-part
  1179.    from being longer than 10 characters. Actually, it won't accept the
  1180.    pattern at all since the sscanf() match will fail and no nick will match
  1181.    the input...
  1182.    (a gr8ron report)
  1183.  
  1184.  * (Bagder) SHUTDOWN without time specified makes it use 10 by default (and
  1185.    the reason that was specified).
  1186.    (a gr8ron report)
  1187.  
  1188.  * (Bagder) The toplists evalutations now skip the bot itself, and all other
  1189.    users currently joined that has the 'LINKBOT' flag set. (NOTE: in order for
  1190.    this to work at a maximum, I suggest you take advantage of the new way to
  1191.    add hostpatterns to users that include nick names, which very well can and
  1192.    probably should be used to separate bots from the bot owner/runner.)
  1193.    (Vader requested.)
  1194.  
  1195.  * (Bagder) Moved the TZ and CONVERT functions to the new convert.c file.
  1196.    Made some parsing improvements in TZ:
  1197.    - allows toplevel .style names to be used instead of proper country or
  1198.      country name when converting
  1199.    - the 'now' keyword defaults to show the time for GMT if no timezone is
  1200.      specified
  1201.    - the 'list' keyword now shows the first matches that matches the specified
  1202.      pattern (* is used if pattern wasn't specified) and an additional text
  1203.      informs if there are matching patterns that weren't showed.
  1204.    (Vader reported)
  1205.  
  1206.  * (Bagder) SERVER fixes
  1207.    - Does now properly support no arguments to report current server name
  1208.      (BUG FIX)
  1209.    - Supports 'SERVER <num>' to switch to the server with that ID, existing
  1210.      in the server list.
  1211.    - 'SERVER +' changes to the next [non-disabled] server in the list. If the
  1212.      current server isn't in the list, or if the last server is in use now,
  1213.      the first server will be picked.
  1214.    - Now makes sure the server functions avoid some NULL reading when the
  1215.      current server isn't found in the list. (BUG FIX)
  1216.    - Frees all items in the server struct in FreeServ() (BUG FIX)
  1217.    (Vader requests)
  1218.  
  1219. Version 4.0Beta6
  1220.  
  1221.  * (Bagder) Fixed the topic bug which made beta5 run very bad.
  1222.  
  1223.  * (Trolan) [Kelly Cochran] brought a new config.h.amiga
  1224.  
  1225.  * (Bagder) Found and removed a nastly little piece of bug that very well
  1226.    could lead to SIGSEGVs and various userdata crashes. (in ChangeGuest())
  1227.  
  1228.  * (Bagder) DCC chat fix. Trying a second dcc chat left rubbish in the bot's
  1229.    list.
  1230.  
  1231.  * (Bagder) Made the userdata read more forward compatible. New fields should
  1232.    be silently discarded in older versions.
  1233.  
  1234.  * (Bagder) Made KICK not possible to kick the bot itself (people will never
  1235.    stop consider that fun). KICK for chanops now only allows kicking people
  1236.    with lower level than themselves. To avoid getting the bot used in kick-
  1237.    wars.
  1238.  
  1239.  * (Bagder) Found at least 4 different places in which Dancer ate memory. 3 of
  1240.    them really make the bot slowly eat itself to death.
  1241.  
  1242.  * (Bagder) Appearantly I did add somthing bad. It hangs after a few hours. =(
  1243.  
  1244. Version 4.0Beta5
  1245.  
  1246.  * (Bagder) Made the CMD command check for buffer overflow and sort the names
  1247.    alphabetically in each level. The CHGCMDLEV could make CMD crash
  1248.    if there were a lot of commands on the same level.
  1249.  
  1250.  * (Bagder) Rewrote some internal split lists that keep the split users. The
  1251.    guest counter should now only count actually present guests, while the
  1252.    numSplitGuests counts the split users. Took away the 'numofsplits' variable
  1253.    since it wasn't used anymore!
  1254.  
  1255.  * (Bagder) Added a KICK command. Persons on a TRUSTED level can use sitekicks
  1256.    and patternkicks too. Usage is of course 'kick <who> <reason>' where
  1257.    <who> must be a nick for CHANOPs and can be '*nick' or '*!*@*' for higher
  1258.    level people. NOTE, if a > CHANOP tries to kick the bot, it claims that
  1259.    _ban_ pattern would match the bot so it won't do it. I just didn't wanna
  1260.    add another text ;)
  1261.  
  1262. Version 4.0beta4
  1263.  
  1264.  * (Bagder) Now includes server name and channel name in the header of all
  1265.    new logs.
  1266.  
  1267.  * (Bagder) 'CHGCMDLEV <command> -' is now supported to restore the built-in
  1268.    level on a specified command. I also rewrote the command line parsing for
  1269.    the function.
  1270.  
  1271.  * (Bagder) Made all access levels within the Dancer source dynamic. There are
  1272.    now 7 internal levels used, and they can all be changed in the .config file
  1273.    (and are to become changeable with the SET command). The commands in
  1274.    command.c have now been redesigned to be able to follow a change of the
  1275.    internal levels. THEY NEED A RESTART AT THE MOMENT.
  1276.    All internal level usages and dependencies are dynamically using these
  1277.    levels. Remeber that if you intend to add stuff. The new dependencies are
  1278.    using the old defined names so there should be no confusion.
  1279.      *NOTE* *NOTE* *NOTE* *NOTE* *NOTE* *NOTE* *NOTE* *NOTE* *NOTE* *NOTE* 
  1280.    Stored users are _not_ using dynamic levels but will remain having their
  1281.    stored level whatever you do with the internal ones.
  1282.  
  1283.  * (Bagder) The CHGCMDLVL command invokes are now properly saved in the .set
  1284.    file so that following re-invokes of the bot will use the new levels for
  1285.    the changed command(s). Only changed commands will of course actually get
  1286.    saved. The new level will be stored 'hard' on the command which means that
  1287.    even if the internal levels are changed, the changed commands will remain
  1288.    at set level.
  1289.  
  1290.  * (Bagder) I don't like the AUTOOP feature, but since we have it we might as
  1291.    well make it goodlooking. It will no longer op any user right away on join.
  1292.    If will now wait (10-20 seconds, randomly and depending on the "sloppy"
  1293.    events methods) until it checks if the user is op, and if not it will get
  1294.    opped (once). Reason for this is of course to avoid op-floods that occur
  1295.    after i.e netheals and to let other users/scripts do the oping in first
  1296.    hand. Only one person get opped in each sloppy event (to prevent flooding)
  1297.    so if lots of AUTOOP'ed users join at once and none of them op themselves,
  1298.    it just might take a while before the bot has opped them all.
  1299.    Also prevents fast joiners/leavers with autoop-flag enabled to make the bot
  1300.    op-flood the channel or itself.
  1301.  
  1302.  * (Bagder) Made USERMOD tell the modified user if the user is currently joined
  1303.    and the -q (quiet) flag was not used.
  1304.  
  1305.  * (Bagder) Made comments get stored in the regular .users file too instead
  1306.    of the extra file. I do not like all those files to keep simple userdata.
  1307.    If a .users file have been stored including the .comment data, the next
  1308.    (re-)load of the userfile will make the .comment file to get rename to
  1309.    '<file>_rm' since it will no longer be needed nor used.
  1310.  
  1311.  * (Bagder) Made yet another bunch of sscanf()s safer. This time in server.c
  1312.  
  1313.  * (Bagder) Extended FindUser() slightly. It should now be able to match users
  1314.    properly even with the nick-part of the pattern used. Now, we can make a
  1315.    user match "nick!user@domain" which might be a better way to i.e detect
  1316.    bots or multiple users using the same account/site etc.
  1317.  
  1318. Version 4.0beta3
  1319.  
  1320.  * (Bagder) Revolution in the seen-arena. I do now store 'departure' time on
  1321.    each and every nick registered, and not only per-host as was done before.
  1322.    This way, seen [recent] will become much better as well as the whole seen
  1323.    concept will be clearer and soon easier to use and understand (even for
  1324.    lusers). I also let the nicks use separate time-outs in the save so that
  1325.    not only old hosts are forgotten but even old nicks.
  1326.     The timestamp saved together with nicks do not interfere with the old
  1327.    standard, so new seen-files can still be used by old bot versions.
  1328.     ...perhaps one of the greatest features that comes from this is that we
  1329.    now can see which of all the nicks a certain host used the last time. I.e
  1330.    'SEEN oldnick' can now actually tell us when *THAT* particular nick (and
  1331.    not just his host) was used, and what nick that particular host has used
  1332.    since!
  1333.  
  1334.  * (Bagder) Spent time on the docs. dancerdoc.html is updated and does now
  1335.    also include the former ChannelGuard manual.
  1336.  
  1337.  * (Bagder) Made some small changes in the FAQ about the new 'make configure'
  1338.    and 'make install' options.
  1339.  
  1340.  * (Bagder) ircd studying made me add a chapter to my ChannelGuard docs that
  1341.    explains the server flood control in detail. It also made me disable the
  1342.    multi-kick again (untested source is left though, if we ever find a good
  1343.    reason to use it).
  1344.  
  1345.  * (Bagder) Made a new SET group called BAN and moved AUTOUNBAN, BANTIME,
  1346.    BOTBANTIME, KICKBAN and REPORTBAN to it. I also made the both TIME items
  1347.    require level 200.
  1348.  
  1349.  * (Bagder) Added BOTBANTIME, which is the good old default time used for the
  1350.    bot bans when no time is specified.
  1351.  
  1352.  * (Bagder) AUTOUNBAN is a new SET item that, if enabled, makes Dancer
  1353.    automatically unban the least important ban when there are 18 or more bans
  1354.    set in the channel. The least important one is selected in this order:
  1355.     1 - the NON-ENFORCED ban with the least time left
  1356.     2 - the oldest NON-ENFORCED ban
  1357.     3 - the ENFORCED ban with the least time left
  1358.     4 - the oldest ENFORCED ban
  1359.  
  1360.  * (Bagder) Added the file 'fplcheck' to the source root. It is a shell script
  1361.    run with 'make configure' (after the actual configure script) that helps
  1362.    you find and fix the Makefile to use the FPL library before compiling your
  1363.    Dancer. Changed the Makefile to use it too.
  1364.  
  1365.  * (Bagder) Added a test of the multi-kick system.
  1366.  
  1367.  * (Bagder) Went through all file saving functions and made the important
  1368.    ones use temporary files to make save-errors less serious.
  1369.  
  1370. Version 4.0beta2
  1371.  
  1372.  * (Bagder) 'USED <nick>' has been added for testing purposes only. Meant to
  1373.    become something like a more verbose SEEN.
  1374.  
  1375.  * (Bagder) Made 'seen -m' acceptable publicly. Made seen -A no longer require
  1376.    dcc chat (after all, the message queue do work! ;)
  1377.  
  1378.  * (Bagder) breese discovered a glitch when someone joins a channel before
  1379.    the list returned from the '/who *' command is completed. Dancer can then
  1380.    get a nick reported as joined twice. This should now be prevented.
  1381.  
  1382.  * (Bagder) Took some time to tidy up the init/cleanup mess. Starting the bot
  1383.    with no or broken .config or .users file should no longer cause Dancer to
  1384.    crash. It should even display an error message to stderr as well as in the
  1385.    logfile.
  1386.  
  1387.  * (Bagder) New way of looking at the .serv file and .config server parameter.
  1388.    The previous way is abandoned, and now it works like:
  1389.      At start-up time...
  1390.    - All servers in the .serv file are added to the internal list (they may
  1391.      be DISABLED).
  1392.    - All servers in the server-field of the .config file are also added to the
  1393.      list. If one of the servers in here already is added, the previous flag
  1394.      status will be kept. Thus, if the .serv file has marked a server as 
  1395.      DISABLED, it will remain so even if it appears in the .config file too.
  1396.    This means both lists get 'merged'.
  1397.  
  1398.      At run-time...
  1399.    - If you attempt to delete a server from the list that was read from the
  1400.      .config file at startup, it will only get marked DISABLED. Only servers
  1401.      _not_ present in the .config file can get deleted completely from the
  1402.      list.
  1403.    - DISABLED servers will not get selected whenever the bot needs one.
  1404.    - SERVERSTAT -D <server> disables a server
  1405.    - SERVERSTAT -E <server> enables a server again
  1406.  
  1407.  * (Bagder) New SET concept introduced:
  1408.    - They are now grouped. The first groups out are:
  1409.      1. THRESHOLDS - Flood trigging values.
  1410.      2. FLOOD - Options toggling the channel guard level.
  1411.      3. VERBOSE - Options controlling bot talk
  1412.      4. MISC - Various properties.
  1413.      5. OWNER - Options only the owner should decide whether to use.
  1414.    - Each item (and/or group) can get an individual access level (for now,
  1415.      the "OWNER" group is the only one that uses it and it requires 242)
  1416.    - Each group and item has its own help text.
  1417.    - 'SET <group>.<item> <value>' is the new supposed way to set items with.
  1418.      If <group> and <item> is a unique beginning of one group and one item,
  1419.      that one will get affected. This way, you don't have to specify the whole
  1420.      words, only enough to make them unique.
  1421.    - 'SET <item> <value>' is still supported as long as the item name is
  1422.      unique. In the future, two groups may use identical item name for two
  1423.      different purposes.
  1424.    - When an item has been set, the status of that item's group will be
  1425.      displayed.
  1426.    - 'SET <group>' displays the current status of that group
  1427.    - 'SET' displays the current status of all groups
  1428.    - 'HELP SET <item>' works the same and now also shows the current contents
  1429.      of the item.
  1430.    - 'HELP SET <group>' tells help about the SET-group.
  1431.  
  1432.    This will not only make less output on the screen, but also a better way to
  1433.    deal with an increasing number of SETs as well as making it easier
  1434.    internally to add new items/groups/SETs.
  1435.  
  1436.    There's probably some more to it too. Just ask.
  1437.  
  1438.  * (Bagder) save-settings used a faulty end-of-loop check.
  1439.  
  1440.  * (Bagder) Switched the TZ-command's ahead-time to make it output the correct
  1441.    difference between timezones.
  1442.  
  1443.  * (Bagder) Made _all_ sscanf()s in command.c use limited %s and %[ scans
  1444.  
  1445.  * (breese) Made 'make install' run the installbot script
  1446.  
  1447. Version 4.0beta
  1448.  
  1449.  * (Bagder) Made TELL work [better] with 511 character messages.
  1450.  
  1451.  * (breese) Fixed the *SERIOUS* security hole in transfer.c/Execute().
  1452.    Discovered by AndyS.
  1453.  
  1454.  * (gr8ron) Fixed netstuff.c to compile on amiga.
  1455.  
  1456.  * (breese) Fixed the bug of reversing the nibbles in dcc chat on Linux.
  1457.    It was due to a broken inet_ntoa() (that's what you get for being nice
  1458.    and try to use the OS calls :)
  1459.  
  1460.  * (breese) Fixed the signals so that garbage IP# in dcc chat doesn't
  1461.    result in a crash.
  1462.  
  1463.  * (breese) Added a few toplevel domains.
  1464.  
  1465.  * (breese) Fixed another shell security leak. Added the EXECPROTECT
  1466.    flag as well.
  1467.  
  1468.  * (Bagder) Changed spell command. It will now pipe the parameter to the script
  1469.    defined with 'spellcmd' in dancer.config. (Default is "./script/speller.sh")
  1470.    This allows much more flexible spell scripts for other spell programs and/
  1471.    or different platform standards.
  1472.    The old 'cmdspell' is no longer supported.
  1473.  
  1474.  * (gr8ron) (Tero Janka) Fixed the config.h.amiga slightly
  1475.  
  1476.  * (gr8ron) Made the HELPSYNTAX flag get saved.
  1477.  
  1478.  * (gr8ron + Bagder) Sorted out the file name problem a little. There's now
  1479.    a files.h file containg the important file name default defines. Check that
  1480.    out and you'll see what I mean.
  1481.  
  1482.  * (Bagder) Made USERADD and USERMOD -P cut off the prefix letters from the
  1483.    hostpatterns when they add them to users.
  1484.  
  1485.  * (Bagder) Hopefully improved the SPLIT command when there is no split
  1486.    information in the list (it seems as if the numofsplits counter isn't
  1487.    decreased properly at all times).
  1488.  
  1489.  * (Bagder) UNBAN <pattern> should work a lot better now.
  1490.  
  1491.  * (Bagder) It should now compile perfectly well even without HAVE_LIBFPL
  1492.    defined in config.h
  1493.  
  1494.  * (breese) TELL now searches for registered username before using the
  1495.    seen data.
  1496.  
  1497.  * (breese) A public ctcp action without text would cause a crash. Fixed.
  1498.  
  1499.  * (breese) Changed launch.sh slightly
  1500.  
  1501.  * (breese) Changed the retrieval of the username of the bot
  1502.  
  1503.  * (breese) Fixed the output of SEEN -A
  1504.  
  1505. Version 3.10
  1506.  
  1507.  * (breese) Fixed a ntohl() in InitNet() to make FreeBSD Dancer run.
  1508.  
  1509.  * (Bagder) A bunch of hooks are now in function.
  1510.  
  1511.  * (Bagder) Made 'WARNADD' use the full host name of the user that added it.
  1512.  
  1513.  * (Bagder) FPL added labels work.
  1514.  
  1515.  * (Bagder) CMD accepts a pattern argument and shows only the matching
  1516.    commands.
  1517.  
  1518.  * (Bagder) Autokickban should no longer re-send the same ban even if many
  1519.    persons matching the same ban join. This was the propable cause why Dancer
  1520.    got flooded in an attack lately.
  1521.  
  1522.  * (Bagder) In cases when several bans are known with the same nick, 'unban'
  1523.    now tries to get an actual ban first. Previously, the following sequence
  1524.    didn't work: 'ban nick' 'ban *nick' 'unban nick'.
  1525.  
  1526.  * (Bagder) Now uses sitebans if any of the following letters are found in the
  1527.    username part of a person to ban: '*!@[]?'
  1528.  
  1529.  * (Bagder) Implemented breese's new userinfo parser. Makes better bans and
  1530.    warnings. Also new username prefix concept.
  1531.  
  1532.  * (Bagder) 'explain *' works again.
  1533.  
  1534.  * (Bagder) Fixed the ban pattern routine to work properly with ppl using
  1535.    usernames consisting of a valid prefix only.
  1536.  
  1537.  * (Bagder/breese) Fixed Match() to work better and faster with wildcards
  1538.    using multiple '*' letters in a row.
  1539.  
  1540.  * (DarkDesgn) Added in fpl.library supoort for the Amiga version and readded
  1541.    the HELPSYNTAX flag that mysteriously disappeared from SET.
  1542.  
  1543. Version 3.9
  1544.  
  1545.  * (Bagder) USERMOD -P is extended to better allow adding of existing patterns.
  1546.    To add the pattern 'foobar2' uses to the registered user 'foobar', we can
  1547.    now use the form 'USERMOD -p foobar2 foobar'. If the pattern specified with
  1548.    -p matches the nick of a person in the channel, that person's pattern will
  1549.    be used.
  1550.  
  1551.  * (Bagder) Fixed the reban problem that sometimes made Dancer claim the ban
  1552.    was already set when it actually wasn't.
  1553.  
  1554.  * (DarkDesgn) Added USERMOD -r to changed registered user nick.
  1555.    (Bagder) Don't allow it to use an already existing registered nick.
  1556.  
  1557.  * (breese) Changed the prefix stuff to avoid confusion when people use
  1558.    usernames "~" and similar.
  1559.  
  1560.  * (breese) Added the global variable 'now' to avoid the many time(NULL)
  1561.  
  1562.  * (breese) Removed a crash if someone did a CLIENT when they already
  1563.    had established a connection.
  1564.  
  1565.  * (breese) Based TELL on list.[ch] rather than on it's own shaky code
  1566.  
  1567.  * (Bagder) Added the new fpl interface. Requires the libfpl.a (or on amiga,
  1568.    the fpl.library).
  1569.  
  1570.  * (DarkDesgn) Added HELPSYNTAX flag - automatically show syntax information
  1571.    after a HELP command.
  1572.  
  1573.  * (DarkDesgn) Fixed LoadServ() not fclose()'ing the server file, causing 
  1574.    problems, and fixed SaveServ() and ExplainWrite() to remove() before
  1575.    rename().
  1576.  
  1577.  * (DarkDesgn) Fixed a couple #define problems in regex.c dealing with alloca
  1578.    usage, fixed and cleaned up the makefile.amiga and config.h.amiga, added 
  1579.    additional patch routines for Amiga, and fixed user.c's lack of not
  1580.    remove()'ing a file before rename()'ing it.
  1581.   
  1582.  * (Bagder) Improved the TELL matches. *REALLY* uses the stored patterns of
  1583.    all users now instead of the previous "kludge".
  1584.  
  1585.  * (breese) Made RELOAD verbose
  1586.   
  1587.  * (breese) Added LINKLIST
  1588.  
  1589.  * (breese) IBCP is now based on datagrams instead (DCC LINK UDP)
  1590.  
  1591.  * (breese) Removed the extra nick reported in SEEN -A
  1592.  
  1593.  * (breese) Further improved host checking.
  1594.  
  1595.  * (Bagder) SERVERADD, SERVERDEL, SERVERLIST and SERVERSTAT are introduced to
  1596.    enable 200-users to change the serverlist but also to store and keep more
  1597.    and detailed informaiton about the servers in the list.
  1598.  
  1599. Version 3.8
  1600.  
  1601.  * (breese) Retrieval of username improved
  1602.  
  1603.  * (Bagder) Added the EMAIL and SETEMAIL commands that view or set the email
  1604.    field of the userdata.
  1605.  
  1606.  * (Bagder) Fixed Sview -R. Displays the registered user with the specified
  1607.    nick prior to the user in the channel.
  1608.  
  1609.  * (Bagder) Autoop is now done on flags basis. Only ppl marked as 'Autoop'
  1610.    will get automatically opped when joined (AUTOOP still needs to be set
  1611.    ON for this to trigger).
  1612.  
  1613.  * (Bagder) Banprotect works. Users marked with the 'B' flag will make the
  1614.    bot kick anyone that sets a ban matching the user(s) and the ban will be
  1615.    unbanned.
  1616.  
  1617.  * (Bagder) Improved the "old-userfile" detection. I discovered that one of
  1618.    my old userfile fooled it to believe it was a new one!
  1619.  
  1620.  * (Bagder) Improved the usermod -e and -d flags.
  1621.  
  1622.  * (Bagder) Fixed the sview ouput to include flags and email and stuff.
  1623.  
  1624.  * (Bagder) Added the 'L' flag, Botlink.
  1625.  
  1626.  * (Bagder) Fixed the userlist checksum stuff for the bot to discover if any
  1627.    user have been modified manually.
  1628.  
  1629.  * (Bagder) Improved the split detection to only allow server names that end
  1630.    in true domain names.
  1631.  
  1632.  * (phb) New amigados patches.
  1633.  
  1634.  * (phb) Fixed DCC chat with port 1024
  1635.  
  1636.  * (breese) Fixed a timing bug in the event loop, and was hence able
  1637.    to remove a kludge I once made to circumvent the bug. Used the same
  1638.    opportunity to correct some misconceptions from the network code.
  1639.  
  1640.  * (breese) Changed the retrieval of the bots host/domain name
  1641.  
  1642.  * (breese) Fixed the message queue and the message reaper
  1643.  
  1644.  * (breese) Introduced linked bots. Connection is done via DCC LINK.
  1645.    Based on IBCP (Inter-Bot Communication Protocol.) Still in its early
  1646.    infancy.
  1647.  
  1648.  * (breese) CLIENT is accepted from outside the channel
  1649.  
  1650.  * (breese) Added chat system (CHAT)
  1651.  
  1652.  * (phb) Fixed the reversed HAVE__CRYPT test in user.c
  1653.  
  1654.  * (breese) Fixed the Linux crashing SeenCleanup() bug.
  1655.  
  1656.  * (Jean-Paul DZISIAK) Found and corrected the AddTail() flaw.
  1657.  
  1658. Version 3.7
  1659.  
  1660. * (Bagder) Added -F to USERMOD. The flags are atm:
  1661.    'B' for banprotect
  1662.    'A' for autoop
  1663.  
  1664.  * (Bagder) Hopefully fixed Userdomain() in cases when there's only one dot
  1665.    to the right of @.
  1666.  
  1667.  * (Bagder) Applied Amiga-patch from Andrew Gray <DarkDesigns@trader.com>
  1668.  
  1669.  * (Bagder) New user-system. The .passwd file is history and all new passwords
  1670.    will be set using the new built-in crypt routine (a must for future multi-
  1671.    bot multi-platform) and yet more information is stored about all registered
  1672.    users. Such as creation time, last (any) modification time and password
  1673.    changed time.
  1674.  
  1675.  * (Bagder) EXPDEL is in. the 'dancer.explain.add' file should be removed
  1676.    after you've started Dancer and changed any explain the first time.
  1677.    All explains will in this release and future always get stored in the
  1678.    .explain file by Dancer.
  1679.  
  1680.  * (Bagder) USERADD and USERMOD have replaced REGISTER.
  1681.  
  1682.  * (breese) Got rid of that annoying "connect() weirdness" message that
  1683.    Linux people were experiencing.
  1684.  
  1685.  * (breese) Added snapshots and cleaned up dancer.h
  1686.  
  1687.  * (breese) Added CLIENT for the poor souls behind firewalls or
  1688.    with buggy clients
  1689.  
  1690.  * (breese) autoconf added (acconfig.h configure.in, Makefile.in,
  1691.    config.h, configure). Changed all platform dependent defines to
  1692.    adhere to the defines generated by configure.
  1693.  
  1694.  * (breese) config.[ch] changed names to setup.[ch] to avoid confusion
  1695.    with the autoconf stuff
  1696.  
  1697. Version 3.6
  1698.  
  1699.  * (Bagder) Removed the Execute() crash. (most noticable in FIND)
  1700.  
  1701.  * (breese) Made 'activelog' get -1 by default which makes Dancer log
  1702.    everyhing until told not to the first time.
  1703.  
  1704.  * (Zagor) Fixed the tz crash.
  1705.  
  1706.  * (Bagder) Fixed some known ban problems:
  1707.    - the 6 second repeat when trying to set an enforced ban that isn't set by
  1708.      the server (this also takes care of the so called "overlapping" problem)
  1709.    - unbanning when the lag to the server is >6 secs made the bot resend the
  1710.      unban a number of times. 
  1711.  
  1712.  * (breese) Added userselectable flood parameters, add put all flood
  1713.    related functions in flood.c
  1714.  
  1715.  * (breese) Fixed the dcc chat crash (wish, hope)
  1716.  
  1717.  * (Bagder/breese) Added support for the the new ircd 2.9 hostname
  1718.    prefixes (+, -, ^, =)
  1719.  
  1720.  * (Bagder) I accidentaly placed two enums below the LASTMSG in language.h
  1721.    which made 'help log' crash.
  1722.  
  1723. Version 3.5
  1724.  
  1725.  * (Bagder) Took a few minutes and added a source header to all C sources,
  1726.    headers and Makefiles.
  1727.  
  1728.  * (Bagder) July 11th 1996 - Back on IRC. Back to Dancer development.
  1729.  
  1730. Version 3.4
  1731.  
  1732.  * (Bagder) Made a butt-ugly fix to work-around some domain name problems.
  1733.    Undocumented, find it in the source if you need more info.
  1734.  
  1735.  * (breese) "/ctcp bot ping" (ie. without a time) would crash the bot.
  1736.    This bug has been removed.
  1737.  
  1738.  * (PhB/breese) New logging system
  1739.  
  1740.  * (breese) Rewrote Execute() to fix a security leak
  1741.  
  1742.  * (breese) Fixed Linux dcc chat
  1743.  
  1744.  * (breese) Added non-blocking connect for clients to avoid Ping Timeout
  1745.    caused by the big timeout of connect()
  1746.  
  1747.  * (breese) Added socket lingering
  1748.  
  1749.  * (breese) Fixed SIGPIPEs from clients dropping carrier
  1750.  
  1751.  * (breese) USERLIST know hides higher userlevels
  1752.  
  1753.  * (Bagder) SAY and ME now reply about SAY being off to the errfrom.
  1754.  
  1755.  * (Bagder) The func matches redirects errfrom messages to NULL;
  1756.  
  1757. Version 3.3
  1758.  
  1759.  * (Bagder) Ban <pattern> does not perform the 'ban *user' siteban adjustments
  1760.    since it could easily get very stupid.
  1761.  
  1762.  * (Bagder) Removed case insensitivity in the regex search since that crashed
  1763.    the Solaris Dancer 3.2... ? This _must_ get fixed somehow.
  1764.  
  1765.  * (Bagder) Now supports exxplains that begins with a space in the file (thus
  1766.    enabling '#channel' explains when padding the word with a space).
  1767.  
  1768. Version 3.2
  1769.  
  1770.  * (Bagder) PatternExist() now matches case insensitive. It's used in the
  1771.    'E' style patterns in dancer.func.
  1772.  
  1773.  * (Bagder) When using DCC-chat-only (without joining the channel) you can
  1774.    now again use SVIEW as supposed.
  1775.  
  1776.  * (Bagder) The new "alias" system is added. For now, check out the
  1777.    dancer.func.example of how to add custom command aliases and context
  1778.    sensitive actions.
  1779.  
  1780.  * (Bagder) The bot is no longer gonna show up as idle if it hasn't been
  1781.    silent.
  1782.  
  1783.  * (Bagder) Made the ban command capable of setting a siteban when a user-
  1784.    ban already is present (it unbans the userban first, in the same MODE-
  1785.    command to the server).
  1786.  
  1787.  * (Bagder) Made the toplist show the top 7.
  1788.  
  1789.  * (Bagder) 'BAN -K' makes the bot kick all users in the channel that match
  1790.    the pattern. To be used in cases where i.e you want to kickban several
  1791.    users joined from the same user account and you don't wanna make a site
  1792.    ban.
  1793.  
  1794.  * (breese/Zagor) SPELL now uses the speller.awk script.
  1795.  
  1796.  * (Zagor) Made CONVERT aware of a bunch of known prefixes. (i.e kilo, mega,
  1797.    pico, etc)
  1798.  
  1799.  * (Bagder) Cleaned up the directory tree a little and put the sources in
  1800.    src/
  1801.  
  1802. Version 3.1
  1803.  
  1804.  * (Zagor/Bagder) FIND now reports "No match found, <nick>".
  1805.  
  1806.  * (Bagder) Added the parse.[ch] files to the package. Coming newfunc system.
  1807.  
  1808.  * (Zagor) 'toplist kicked'
  1809.  
  1810.  * (Zagor) SPELL command (requires ispell)
  1811.  
  1812.  * (Zagor) CONVERT is a new command
  1813.  
  1814.  * (breese) 'invite <password>' from outside the channel makes the bot invite
  1815.    the person
  1816.  
  1817.  * (breese) CUT can be used by 10+ users to cut their own 'hanging' DCC chat
  1818.    connection
  1819.  
  1820.  * (Bagder) PresentTop() now deals with empty toplists
  1821.  
  1822.  * (Bagder) AddKick() auto-banning fix.
  1823.  
  1824.  * (Zagor) A bunch of more toplists (continent/kicker/banner/command/mode)
  1825.  
  1826. Version 3.0
  1827.  
  1828.  * ENFORCED bans that were unbanned twice (and thus timeouting to get banned
  1829.    again), couldn't get unbanned (removed) from the banlist with the UNBAN
  1830.    command until the ban was set in the channel again.
  1831.  
  1832.  * BAN_ENFORCELEVEL is now raised to 200.
  1833.  
  1834.  * Terrible little lockup could occur if a spying user got its dcc closed.
  1835.  
  1836.  * BANLIST always displays double-unbanned enforced bans that wait for the
  1837.    timeout. They're displayed as "[ENFORCED] [UNBANNED]".
  1838.  
  1839.  * CHBAN now accepts the ban-pattern as well as nick or banid.
  1840.  
  1841. Version 2.17
  1842.  
  1843.  * Improved the main()-loop
  1844.    - probably fixed the connect bug
  1845.    - should've fixed the problem that appeared when a server closed connection
  1846.      and the bot re-connected to that same server, which previously screwed up
  1847.      the guestlist and probably some more things.
  1848.  
  1849.  * Made a few more commands publicly available. (like LAG, SVIEW and EXPADD)
  1850.  
  1851.  * (950517) REGISTER now informs of the old level when a new one is set, and
  1852.    doesn't change the user if the same level is reset as it already has.
  1853.  
  1854.  * Remade the AddKick() function to prevent a multitude of bans on multi-
  1855.    account bot attacks. Lemme inform you a bit of how it does the evaluation:
  1856.    If the AddKick() is about to set a ban on a user (with a *user@*.site
  1857.    pattern) and ONE other ban already is set on that site but on a different
  1858.    user, the previous ban is removed and a siteban is set. If more than one
  1859.    ban is set, the standard user-bans will be used for the new ban too!
  1860.         
  1861.  * Removed the "comma-separator" from the TOPIC command.
  1862.  
  1863.  * Eetu's OSF-defines and Makefile-flags were added.
  1864.  
  1865.  * FIND-fix for NetBSD by Phb.
  1866.  
  1867.  * (950514) AddKick() is now hopefully not flooding the server with ban
  1868.    requests as it did previously!
  1869.  
  1870.  * (950513) Applied Phb's patches. Now introduces TOPIC and CHGCMDLEVEL as
  1871.    well as the 'cmgcmdlevel' .config entry. Enables the bot runner to change
  1872.    level of individual bot commands.
  1873.  
  1874.  * breese's new ParseServer() code.
  1875.  
  1876.  * Changed Send() to check the nick-parameter. If it is NULL and no chat
  1877.    is opened, it won't do anything.
  1878.  
  1879.  * CmdRegister() fix to make the 'changed' stuff work better.
  1880.  
  1881.  * AddBan() fix to prevent multiple bans in flood attacks
  1882.  
  1883.  * (950513) breese's new ParseServer()
  1884.  
  1885.  * (950510) Made the spylink report about added and removed clients.
  1886.  
  1887. Version 2.16
  1888.  
  1889.  * (960509) Bj÷rn Stenberg <Bjorn.Stenberg@sth.frontec.se> added the country
  1890.    toplist.
  1891.  
  1892.  * (960509) TELLDEL works (breese fix)
  1893.  
  1894.  * Added breese's profiling stuff. Is it still makeable with regular make?
  1895.    My sunos make complains about those new fixes!
  1896.  
  1897.  * (960508) [Temporarily] Replaced the explain-routines with a new set. They
  1898.    give almost the same functionality. They're slower and not at all that
  1899.    neatly written, but hey, they work! ;)
  1900.  
  1901.  * (960507) Incorporated breese's seen-fix to add nick on host-seens.
  1902.  
  1903.  * Improved the PubCommand() parse just a little more.
  1904.  
  1905.  * SEEN <pattern> is now restricted to show only 15 matches. 'seen *' did
  1906.    make the bot to ping timeout!
  1907.  
  1908.  * SVIEW shows registered nick name if it differs from the used one.
  1909.  
  1910.  * REGISTER can change the level of non-joined users.
  1911.  
  1912.  * WHOIS is now an SVIEW alias.
  1913.  
  1914. Version 2.15
  1915.  
  1916.  * Made out-of-channel /msgs get shown in the spylink.
  1917.  
  1918.  * The use of the REGISTER command is now stored together with the data of
  1919.    the user it changed. Who did it, when it was done and what was done is
  1920.    stored. It uses an extra row in the .users file.
  1921.  
  1922.  * Uses breese's new Makefile. It fixes the final version by default, use
  1923.    'make debug' to create the debug version.
  1924.  
  1925.  * Changed the PubCommand() parse slightly to adjust to NetBSD limitations.
  1926.  
  1927.  * Improved kick-queue handling (increased pause between kicks after the 3rd
  1928.    kick).
  1929.  
  1930.  * Brand's:
  1931.    - AUTOOP feature implemented. If enabled, autoops stats >= 241
  1932.      users on join. set AUTOOP ON - enables it.
  1933.    - COMMENT is a command to add any generic comment to your userinfo.
  1934.      set COMMENT on - will make the bot diplay it on joins
  1935.  
  1936.  * TOPLIST is a new command for new and fun top-list information
  1937.    Only four ones added to far. Please add more as you think of any.
  1938.  
  1939.  * 'logdays' was removed from the .config
  1940.  
  1941.  * 'storedays' was added. This should be the number of days logfiles should
  1942.    be kept. Older logfiles will be removed automatically...
  1943.  
  1944.  * SVIEW and WHOIS doesn't display level info of users with the same or higher
  1945.    level than the peeking user.
  1946.  
  1947.  * NAMES is now introduced as the GUESTLIST command, available for 100+ users.
  1948.    The new status-peeking regulation is in use for that too.
  1949.  
  1950.  * Applied Brand's new NetBSD fixes.
  1951.  
  1952. Version 2.14
  1953.  
  1954.  * Changed the public CTCP flood algorithm. It separates ACTIONS from the rest.
  1955.    Dancer triggers a flood on 6 ACTIONs within 4 seconds or 3 any-CTCP within
  1956.    6 seconds. The one that triggers the flood is ignored, and the flooder is
  1957.    (if CTCP is ON) kicked, warned or ignored.
  1958.    The private CTCP flood detect is the same old one.
  1959.  
  1960.  * The kicklist (the X latest kicks) now also contains the last used nick of
  1961.    the misbehaving fellow. This way Dancer knows which nick to attach to the
  1962.    pattern if it bans and thus enabling 'unban user' for these kinds of bans
  1963.    too. Also changed the output of 'kicklist' to include the nick name.
  1964.    The kick-Q only kicks each nick once. If the user manages to change nick
  1965.    while not yet kick, it'll get kicked again.
  1966.  
  1967.  * All kicks now go through the internal flood check and on kick-intensive
  1968.    situations, they automatically get pushed to the kick-queue. When the
  1969.    kick-q is enabled, the 10 second CTCP ignore is switched on.
  1970.  
  1971.  * The kick-queue is changed a lot. Now, as long as it knows there are pending
  1972.    kicks, it scans the guestlist and kicks the first guest that is marked
  1973.    for kicking. If no person is marked, the list is considered empty.
  1974.    REASON for this:
  1975.      A) it doesn't kick nicks that already has left or was kicked by someone
  1976.         else
  1977.      B) it is nickchange resistant (queueing up old nick names like it used
  1978.         to is pretty stupid).
  1979.    Nick and flood bots have proved to get kicked with this algorithm. Left to
  1980.    experience is *extensive* flood bot takeover attempts.
  1981.  
  1982.  * CTCP ignores are no longer host-based. Too frequent CTCPs will make the bot
  1983.    ignore all CTCPs for 10 seconds (except 20+ user's dcc chat requests) and
  1984.    each following CTCP wile ignoring will extend the timeout time.
  1985.    All CTCP attack bots tried are ignored accordingly.
  1986.  
  1987.  * Changed the timeout-bans-text to use the much more describtive TimeAgo().
  1988.    Which makes the former i.e "10000 seconds ban" make "2 hours 46 minutes
  1989.    ban"
  1990.  
  1991.  * when TALK is on and the bot is opped or deopped, it does now only respond
  1992.    if its op-status changes. I.e just repeated opping won't make it flood.
  1993.  
  1994.  * Kicks are queued up if being made too quick by the bot. (Still needs more
  1995.    fixing, but this might help a little for now.)
  1996.    More StickyKick()s are used to avoid some of the extra kicks. QueueKick()
  1997.    is no longer used directly by any function.
  1998.  
  1999.  * WARNADD has a -b option that'll make the bot kickban matching users
  2000.    WARNLIST -b lists kickban warns only
  2001.  
  2002.  * TELLME and the join-notify now check for TELLs to any of all known
  2003.    accounts of registered users.
  2004.  
  2005.  * Added the 'bug' command for easier filing of bug reports from online
  2006.    users. Stores the bugs in 'dancer.bugs' by default. 'bugfile' is the new
  2007.    entry in the .config file.
  2008.  
  2009.  * Added some stuff to the status output (number of ops, split users, bot's
  2010.    mode changes, bans, enforced bans, warns and kickban warns)
  2011.  
  2012.  * Improved parsing of the banlist (got really confused on some american
  2013.    servers previously). Though it ignores all other info but the banpatterns.
  2014.  
  2015.  * Improved usage of multiple servers (previous versions had problems to
  2016.    connect to all but the first server)
  2017.  
  2018.  * Improved bans of users using 10-letter usernames  (NOT nick name)
  2019.  
  2020.  * Timeouts autobans due to repeated kicks
  2021.  
  2022.  * Language fixes, a separate source file for all localized strings.
  2023.  
  2024. Version 2.13
  2025.  
  2026.   * QueueKick() made the bot unable to handle clonebot attacks.
  2027.     Has been replaced by StickyKick().
  2028.  
  2029. Version 2.12
  2030.  
  2031.   * NetBSD version
  2032.  
  2033.   * Fixed TELLDEL (which previously wasn't working)
  2034.  
  2035.   * Multi kicks and Warning() kicks are now QueueKick()ed
  2036.  
  2037.   * Fixed some bugs, especially some in the Solaris version
  2038.  
  2039.   * KickAll() is now put on a queue to prevent Excess Flood
  2040.  
  2041. Version 2.11
  2042.  
  2043.   * CHBAN can now change ban reason
  2044.  
  2045.   * New and better warning system (linked lists)
  2046.  
  2047.   * WARNLIST now supports -A as well as *!*@* pattern style instead of nick
  2048.  
  2049.   * Logs invites
  2050.  
  2051.   * Made TELL secret in logs and spy-messages
  2052.  
  2053.   * Fixed the banlist bug, now gets cleaned up when the bot leaves the
  2054.     channel.
  2055.  
  2056.   * Now reads the banner's name even if the ban command was typed in public
  2057.  
  2058.   * Added 'warnfile' to .config
  2059.  
  2060. Version 2.10
  2061.  
  2062.   * KICKLIST shows the last (max 10) kicks done in the channel.
  2063.  
  2064.   * WARNLIST accepts a <match> parameter to only list the warn-patterns that
  2065.     match the specified pattern.
  2066.  
  2067.   * Unbanned patterns were removed too quick from the internal banlist.
  2068.  
  2069.   * 3 botkicks with max 5 mins interval between them, or 5 regular userkicks+
  2070.     botkicks, makes that user get banned, and all users joined from that
  2071.     account are kicked out from the channel.
  2072.  
  2073.   * siteban will now kick all users joined from the banned site
  2074.  
  2075.   * BAN-ing someone with a pattern that already is banned will now still kick
  2076.     the person.
  2077.  
  2078.   * Made some kicks sticky, ie. a new kick would be issued if an
  2079.     offender changes nick to avoid a kick.
  2080.  
  2081.   * COUNTRY will now try to guess the country if it doesn't match a
  2082.     code or a nickname. It also show the full name of the country now.
  2083.  
  2084. Version 2.9
  2085.  
  2086.   * Status 20+ ppl can change the mode even when 'MODE' is on.
  2087.  
  2088.   * Resistance against ctcp flooding
  2089.  
  2090.   * Warnings to user about potential nick collisions
  2091.  
  2092.   * Fixed Avalance() kicking
  2093.  
  2094.   * Fixed dcc chat connections
  2095.  
  2096.   * Rewrote netsplit stuff
  2097.  
  2098.   * New BAN system implemented. CHBAN/BAN/UNBAN are affected. Read top of
  2099.     bans.c to get detailed theories.
  2100.  
  2101.   * EXPLAIN now gets the first word and tries to explain it and ignores the
  2102.     rest of the line.
  2103.  
  2104.   * OPS, CHANOP and OPME are valid OP aliases
  2105.  
  2106.   * SAW is now a valid SEEN alias
  2107.  
  2108.   * SEEN -a should work now even on ppl still in the channel or netsplit!
  2109.  
  2110.   * TELL notify is done now on netjoins if a netsplitted person got a
  2111.     'tell' while split.
  2112.  
  2113.   * IDENTIFY is renamed to MYNICK
  2114.  
  2115.   * SHOW of a non-showable command in a dcc chat no longer crashes the bot
  2116.  
  2117.   * FIND now supports a number-of-matches argument.
  2118.  
  2119.   * Made a bunch of commands publically available
  2120.  
  2121. Version 2.8
  2122.  
  2123.   * Command line options has been removed. Everything must be handled
  2124.     through the .config file
  2125.  
  2126.   * New logfile is created Xth day.
  2127.  
  2128.   * Improved STATUS
  2129.  
  2130.   * Added CUT
  2131.  
  2132.   * Current settings are saved to file on exit.
  2133.  
  2134.   * Process ID gets written to the file ".pid" on start. This is used by
  2135.     the external launch script
  2136.  
  2137.   * Made external launch script (launch.perl) which checks if the bot is
  2138.     running and if not it starts it
  2139.  
  2140.   * Previously the bot could get confused if a user joined or made client
  2141.     connections more than once. Also, there was a security leak: if a
  2142.     user had authenticated, everybody from the same account became
  2143.     authenticated. This is especially unfortunate because some anonymeous
  2144.     telnet clients use the same account.
  2145.  
  2146.     Now each person on the channel and each client connection gets their
  2147.     seperate identification structure. If possible, these two will be
  2148.     unified. The only place where this unification can go wrong is when
  2149.     you change nick when the bot cannot see you (if you're off the channel
  2150.     or on the other side of a netsplit.) To force a unification IDENTIFY
  2151.     has been added. It must be sent through dcc chat with your current
  2152.     nick as argument.
  2153.  
  2154.   * Failed authentications gets logged and send on the spylink
  2155.  
  2156. Version 2.7
  2157.  
  2158.   * Added macro for easy use of multiple, randomly picked, replies.
  2159.  
  2160.   * SHUTDOWN can show time left, and be canceled
  2161.  
  2162.   * Responds to /invite's from LEVELTRUST
  2163.  
  2164.   * Format of seen file has been changed. Use seenconv-2.7.c to convert
  2165.     older files.
  2166.  
  2167.   * Commands that need passwds are hidden from CMD and ALIAS if the
  2168.     user haven't been authenticated yet
  2169.  
  2170.   * Added possibility to specify port and password in serverlist.
  2171.     Format is server:port:passwd
  2172.  
  2173.   * Fixed TALK and QUIET to work from dcc chat
  2174.  
  2175.   * Ban protected. If a ban matches the host of the bot, it is removed.
  2176.     If set by a user, the user is deopped.
  2177.  
  2178.   * Added ALIAS and WHOLEFT
  2179.  
  2180.   * Added more debugging info
  2181.  
  2182. Version 2.6
  2183.  
  2184.   * Made a flag indicated whether a command can be used in public
  2185.     or not.
  2186.  
  2187.   * List of users on the channel is now flushed in OnError() too.
  2188.  
  2189.   * Message queue moved from SIGALRM handler to a select(2) timeout
  2190.     handler. SIGALRM proved to cause too much trouble because it
  2191.     breaks the system calls.
  2192.  
  2193. Version 2.5
  2194.  
  2195.   * Added REPORTADD/DEL for desync/fake snooping
  2196.  
  2197.   * Added DEBUGADD/DEL for debug info
  2198.  
  2199.   * SPYLIST is obsolete and has been removed. Use CLIENTLIST instead
  2200.  
  2201.   * Wrote Multicast()
  2202.  
  2203.   * Added detection of channel desync and fake (canceled) mode changes
  2204.  
  2205.   * Rewrote the TELL system. Added TELLADD, TELLDEL, TELLLIST, and
  2206.     TELLME. Made TELL netsplit aware.
  2207.     Please delete older tellfiles.
  2208.  
  2209.   * Added low overhead server pinging and LAG
  2210.  
  2211.   * Added support for alternative servers
  2212.  
  2213. Version 2.4
  2214.  
  2215.   * Help for SET arguments
  2216.  
  2217.   * Added check for beep bombs
  2218.  
  2219.   * Most user definable values moved to .config file
  2220.  
  2221.   * LEVELPUBX are allowed to issue public commands if they have ops.
  2222.  
  2223.   * Added TOPIC, WALL, and SHUTDOWN
  2224.  
  2225.   * Rewrote SeenHost() to have proper support for wildcards.
  2226.  
  2227.   * Added command aliases.
  2228.  
  2229.   * Made a message reaper to remove all occurences of a nick/channel from
  2230.     the message queue if we receive ERR_NOSUCHNICK or ERR_NOSUCHCHANNEL
  2231.     from the server. This reduces the amount of wasted bandwidth.
  2232.  
  2233.   * Gave all funcs, structs, and variables dealing with the message queue
  2234.     more meaningful names.
  2235.  
  2236.   * Added proper handling to various errors from the server.
  2237.  
  2238. Version 2.3
  2239.  
  2240.   * Rewrote the core of the system - HandleSockets(). The previous core
  2241.     didn't work properly with the SIGALRM handler, which could cause
  2242.     problems when trying to connect to a server.
  2243.  
  2244.   * Streamlined the output and capabilities of Execute(). fork(2) is
  2245.     no longer needed.
  2246.  
  2247.   * Error handling in CmdFind()
  2248.  
  2249.   * Removed an endian dependency in CtcpDCC()
  2250.  
  2251.   * CALC works in public commands too.
  2252.  
  2253.   * 3 violation levels. Lowest level gets kicked after WARNLOW warnings
  2254.     (defaults to 0, ie. gets kicked immediately.) Medium level gets
  2255.     WARNMID warnings before being kicked. Highest level doesn't get
  2256.     kicked (and no warnings either.)
  2257.  
  2258. Version 2.2
  2259.  
  2260.   * Fixed the looping bug that occured if there was a client connection
  2261.     and the bot left IRC and came back. In the invalid assumption that
  2262.     the client connections were removed, as they would have if the the
  2263.     bot quitted, the client list was cleared. When the bot returned and
  2264.     got a command from a client it would loop, because select(2) would
  2265.     return immediately, and the socket that should have been read was
  2266.     no longer visible to the bot. This nasty bug caused the program to
  2267.     use as much CPU-time as it could (typically 80%)
  2268.  
  2269.   * Rewrote the reply system. If a client connection is used the message
  2270.     will be sent immediately, otherwise it will be put on a message
  2271.     queue (in the SIGALARM handler. These messages are send at a rate of
  2272.     one line per second to avoid flooding users and being disconnected
  2273.     from the server with an "Excess flood" message.
  2274.  
  2275.   * Message queue is now stalled when not connected to a server. Done by
  2276.     checking the 'running' flag
  2277.  
  2278.   * Notice[f] and Async were bad names. They have been renamed to Send[f]
  2279.     and Execute respectively.
  2280.  
  2281.   * Rearranged the command hierarchy (again)
  2282.  
  2283.   * Removed dcc chat dependency in Execute.
  2284.  
  2285.   * Made EXPADD check syntax better. Omision of a '=' would crash it. Now
  2286.     the key may be seperated from the description by either '=' or a
  2287.     whitespace. (This is known as the Edd syntax ;)
  2288.  
  2289.   * Added DEFPASS <nick>, which will overwrite the password of <nick> with
  2290.     default (for the forgetful soul.)
  2291.  
  2292.   * Added SHOW. "SHOW <nick> <cmd>" will redirect the output of <cmd> to
  2293.     <nick>
  2294.  
  2295.   * Changed layout of logfile. Made it more readable (and grep-friendly.)
  2296.  
  2297.   * Hidden passwords from logfile.
  2298.  
  2299.   * Extended ban timeout from <seconds> to [[HH:]MM:]SS format.
  2300.  
  2301.   * Put registered accounts into linked-list instead of a fixed array.
  2302.     (Some of those netproviders just have an incredible amount of accounts
  2303.     they want registered :)
  2304.  
  2305.   * Changed the name of the KICK flag to BOMB, as it was misleading.
  2306.     Added check for Tsunami.
  2307.  
  2308.   * Rewrote Userhost() to check if last part is numeric rather than
  2309.     the first part. In named addresses the last part represents the
  2310.     top-level domains, and they never use numbers (machine names
  2311.     shouldn't start with a non-alphabetic char either, but some
  2312.     sysadmins have no clue.)
  2313.  
  2314.   * Disabled "dangerous" public commands and options, ie. commands that
  2315.     may produce much output and hence cause flooding. (fx. EXPLAIN *,
  2316.     or SEEN -A)
  2317.  
  2318.   * Removed command seperator (;), as nobody used it anyway and it's
  2319.     omission leaves a much more consistant interface.
  2320.  
  2321.   * Accounts listed in WHOIS -A.
  2322.  
  2323.   * Added -M and -A options to SEEN.
  2324.  
  2325.   * Made NAMES command for debugging purposes.
  2326.  
  2327.   * Added counters for served commands. Displayed in STATUS.
  2328.  
  2329.   * Less DanBot dependant bot support. Now, the bot has to have exacly
  2330.     the LEVELBOT level and make the MASTERMSG action to get ops. A certain
  2331.     nickname is no longer needed.
  2332.  
  2333.   * Added Debug(). If an error occurs, log it _and_ send it to spylinks.
  2334.  
  2335.   * Added a master flag for FLOOD, which will disable reacting to floods
  2336.     some time after a netjoin. This prevents accidential kicking due to
  2337.     netburps.
  2338.  
  2339.   * Due to netsplit awareness ACCEPT is superfluous and has been removed.
  2340.  
  2341. Version 2.0
  2342.  
  2343.   * Added timed bans (BAN, UNBAN, CHBAN, BANLIST)
  2344.  
  2345.   * Added warning messages (WARNADD, WARNDEL, WARNLIST)
  2346.  
  2347.   * Added SVIEW
  2348.  
  2349.   * Added SPLIT, and made the bot netsplit aware
  2350.  
  2351.   * Added FIND
  2352.  
  2353.   * Added SAY and ME
  2354.  
  2355.   * Added many new flags to SET
  2356.  
  2357.   * Changed layout of CMD
  2358.  
  2359.   * Removed most /dcc chat requirements
  2360.  
  2361.   * Fixed stuff in SEEN
  2362.  
  2363.   * Gave the bot a voice of it's own
  2364.  
  2365.   * Added another programmer ;)
  2366.  
  2367. Version 1.33
  2368.  
  2369.   * Added SET flags to .config file
  2370.  
  2371. Version 1.30
  2372.  
  2373.   * Fixed ACCEPT and added some information
  2374.  
  2375.   * Fixed a security leak in OP <passwd>
  2376.  
  2377. Version 1.29
  2378.  
  2379.   * Rearranged the command hierarchy
  2380.  
  2381. Version 1.28
  2382.  
  2383.   * Added ACCEPT
  2384.  
  2385.   * Made the bot remember who had PASSed after a RELOAD
  2386.  
  2387. Version 1.27
  2388.  
  2389.   * Added EXPADD
  2390.  
  2391.   * CALC now uses the Unix 'bc' command instead of my own code
  2392.  
  2393. Version 1.26
  2394.  
  2395.   * Piped stderr as well as stdout
  2396.  
  2397.   * Made it possible to use options for shell commands
  2398.  
  2399.   * Added FINGER
  2400.  
  2401. Version 1.25
  2402.  
  2403.   * If a client (/dcc chat) connection exists all replies will be sent
  2404.     through it.
  2405.  
  2406.   * Added async shell commands to the socket handling. This way the bot
  2407.     won't freeze while executing shell commands.
  2408.  
  2409.   * Added VRFY
  2410.  
  2411.   * Added HOST
  2412.  
  2413.   * Added check for dead server socket (thanks to Titan)
  2414.  
  2415. Version 1.22
  2416.  
  2417.   * Added UPTIME (was included - and still is - in STATUS, but just to
  2418.     retain a "standard" interface.)
  2419.  
  2420.   * Restarts on "Ping timeout", "Excess Flood", and nickname collision.
  2421.  
  2422. Version 1.21
  2423.  
  2424.   * Command parser rewritten
  2425.  
  2426.   * Multiple instructions per line supported
  2427.  
  2428.   * Multiple arguments per instruction supported
  2429.  
  2430. Version 1.12
  2431.  
  2432.   * Backups of seen file now adds a timestamp to be unique.
  2433.  
  2434. Version 1.11
  2435.  
  2436.   * Added COUNTRY
  2437.  
  2438. Version 1.08
  2439.  
  2440.   * Users not authenticated by an IRC server, ie. someone with a tilde (~)
  2441.     in their login name, were not correctly processed.
  2442.  
  2443. Version pre-1.08
  2444.  
  2445.   * Many commands, features, and bugs. Nothing recorded.
  2446.  
  2447. Version 0.0
  2448.  
  2449.   * Added programmer ;)
  2450.