(-*- text -*-)
User Visible Changes In Bobot++

IMPORTANT NOTES: 
  As of version 1.98 unknown_lamer is the new maintainer.  Also as of
  version 1.98, you must have Guile 1.5.6+ or 1.6.x in order to
  compile scripting support.

  As of version 2.2.0 no new updates are promised. I am splitting out
  the Parser and a few other well written bits and using them from
  Scheme to implement most of the Bobot++ functionality in pure
  Scheme. The time spent maintaining this not terribly good C++ (a
  good bit of which is my fault due to my inexperience when I began
  maintaing Bobot++) is a waste to me now. I would rather be hacking
  on a Lisp program instead.

  I will still accept patches, and may fix bugs if I have time (and
  people report them). I may finish the manual since the scripting
  section is all that remains, and that will apply to the new bot as
  well.

=====================================================================
====== The News =====================================================
=====================================================================

Version 2.2.3 (2008-11-12):
- Building with Guile in a non-standard location now works
- Building without Guile now works again
- Building with GCC 4.x now works
  + GCC prior to 4.x's libc headers exported the libc symbols from
    both :: and std:: leading to a few unqualified libc calls sneaking
    into Bobot++'s source
- All uses of the long deprecated GH API have been removed
  + Building against libguile 1.8 built with --disable-deprecated now
    works
  + Building against Guile 1.6 likely no longer works
  + However, building against guile-vm libguile does work and Bobot++
    is the first application built this way
- This will be the last of the 2.2.x series; a 2.3.x series /might/ be
  started to enhance the scripting interface and finish the manual

Version 2.2.2 (2006-06-28):
- No longer segfaults when loading bobot-utils.scm
- bot:match-to-me produces a valid regexp again
- scripts/uname now properly uses (ice-9 rdelim) instead of redelim
- bot:load now loads files properly

Version 2.2.1 (2006-06-28):
- If the log directory does not exist the bot creates it
- If there are lines with only whitespace on them in the config file
  and error message is no longer printed to the log

Version 2.2.0 (2006-05-24):
- Scripting
  + Hooks  
    * hooks/disconnect now takes an additonal argument that specifies
      whether the disconnect was intentional or not.
    * Added hooks/send/who
    * Added hooks/send/whois
  + The deprecated scripting procedure and hook names are now in a
    `begin-deprecated' block. If your guile is built without
    deprecated feature support, they will not be available.
  + Renamed Functions
    * bot:send-ctcp was renamed to bot:ctcp
    * bot:send-ctcp-reply was renamed to bot:ctcp-reply
  + New Functions
    * bot:who (send WHO request)
    * bot:whois (send WHOIS request)
  + New Constants
    * bot:shit/none, bot:shit/no-op, bot:shit/no-join,
      bot:shit/no-deban shit list constants
- Documention
  + Reorganized a few sections
  + Every hook is now documented
  + Using bot section is now much more usable
  + Every config file is now documented
- The code was cleaned up a bit

Version 2.1.8: 
- Scripting
  + Hooks
    * Added bot:protection/[none|ban|kick|deop] and bot:aop/[yes|no]
      constants to the Scheme scripting interface
    * hooks/timer argument is now zero padded instead of space padded
      (e.g. "11:01" instead of "11: 1")
    * hooks/disconnect is now called when the bot is disconnected from the
      server unintentionally (network connection timeout, server died,
      etc.)
    * hooks/action is now passed the user's nick instead of the full
      address like all other hooks
  + Message Sending
    * Implemented bot:notice
    * bot:msg and bot:say may both send to channels and users (instead
      of bot:msg for users and bot:say for channels)
    * Renamed bot:send-CTCP to bot:send-ctcp
    * Added bot:send-ctcp-reply to send a ctcp-reply
  + Misc
    * Added (bobotpp bot) module that modules may use to gain access
      to the bobot++ functions
  + Debugging
    * The debugging evaluator is now enabled when --debug is passed to
      the bot
    * New command line option: --debug-scripts enables the debugging
      evaluator while running everything else normally
    * Merged error handling patch from Dale Smith. This adds detailed
      errors and backtraces when --debug/--debug-scripts is passed to
      Bobot++.
- Documentation
  + Merged documentation patch from Dale Smith (thanks)
- Misc
  + NOTICEs and PRIVMSGs are now sent correctly if they contain an
    embedded newline
  + Max nick length is now configurable via 'maxnicklength' option in
    bot.conf (defaults to 9)
- The bot now builds with --disable-scripting again (this is my fault,
  I haven't built without it in a long time)


Version 2.1.7:
- Fixed a number of small bugs and corner cases
- Should compile without warnings (GCC 3.4)

Version 2.1.6:
- The String class implementation has been redone and replaced by one
  based on std::string (eventually String will be gone entirely, but
  it a lot of work)
- Patches from Jos Hulzink <josh@stack.nl> were applied which fix a
  few major bugs in the StringTokenizer (thanks)

Version 2.1.5: Cleanups
- A DCC CHAT with the bot may now only be initiated if the user is a
  Friend of the bot
- Implemented bot:ctcp-quote
- The Bot Configuration section of the manual has been completed.
- Fixed a potential (but unlikely) buffer overflow in Utils::strToTime
  (if there were more than 512 digits in part of the string form of
  the time the buffer would overflow)
- Misc. Bugfixes

Version 2.1.4: DCC Support Enhancements
- Internal Change: DCCConnection is now an abstract class
- Internal Change: DCCChatConnection provides the functionality of
  the old DCCConnection so that DCC FILE support can be added
- New Scheme Procedure: (bot:sent-to-me? message), checks to see if a
  message was addressed to the bot. This is better than using
  bot:match-to-me because the hook will continue to function if the
  bot's nick changes. The only downside to using it is that there may
  be an increased overhead of calling more hooks than could be called,
  but that shouldn't be much of a problem.
- New Scheme Procedure: (bot:change-command-level command level),
  changes the level a user command to allow a user of `level' level or
  above to run it.

Version 2.1.3: Something
- The flood rate can now be set using !setfloodrate INTEGER. The
default is two messages per second before the bot will ignore
you. (thanks to Björn Gustavsson for requesting this)
- The flood rate may also be set from Scheme using (bot:setfloodrate
integer)
- A very large crash bug has been fixed. Previously, if an undefined
command was called, any attempts to call a subsequent command would
cause the bot to crash. Now the bot doesn't crash.

Version 2.1.2: Llama

- match-to-me and match-not-channel are now bot:match-to-me and
  bot:match-not-channel. Just use perl -pi -e
  "s/match-to-me/bot:match-to-me" SCRIPTS (change to match-not-channel
  for match-not-channel).
- Each script is now loaded into its own module so namespace clashes
  should no longer occur
- New procedure: (bot:load-module INTERFACE-SPEC) will load a "bot
  module" with the specified INTERFACE-SPEC (e.g. (foo bar)). A bot
  module is the same as a system module except that you don't use
  define-module to define it. The %bot:loadpath is searched for
  INTERFACE-SPEC (when converted to a string) with an extension in
  %bot:load-extensions. E.g. (foo bar) becomes "foo/bar".
- New procedure: (bot:use-module INTERFACE-SPEC) is the same as
  bot:load-module except it will make the exported bindings from
  INTERFACE-SPEC available in the current-module.
- Updated example bot and new example scripts included with the bot.

Version 2.1.1: foom

- Host masks are now case insensitive when matched. At least one other
  person thought this was a good idea since IRC is case preserving but
  not case sensitive.
- You can now "name" a hook using an extra arg to bot:addhook. This
  name can be used to have multiple hooks of the same type with the
  same regexp. The default name is "DEFAULT" so don't use that as the
  name for your hooks.
- Logging now works again (oops, I didn't realize I broke it until I
  started to work on DCC).
- DCC CHAT now "works." You can connect to the bot and talk to to it
  and use Scheme hooks to talk to the user.
- New hooks: hooks/dcc/chat-begin and hooks/dcc/chat-message. These
  are called when a new DCC Chat begin and when the user sends a
  message.
- New Function: bot:dcc-chat-send TO MESSAGE, sends a MESSAGE to the
  person at address TO
- New hooks: hooks/send/... where ... is one of action, ctcp, public,
  or message. These are triggered when the bot does an
  ACTION, sends a CTCP (_not_ a ctcp-reply), sends a PRIVMSG to a
  channel, or sends a PRIVMSG to another user, respectively. There
  will be more send hooks added later.
- New hooks: hooks/dcc/chat-begin and
  hooks/dcc/chat-message. chat-begin is called when the chat starts
  and has one argument: the address (in user!nick@host
  format). chat-message has two arguments: from (user!nick@host) and
  message, which is the raw message (since there is no real protocol
  for DCC). chat-start hooks are matched against the address and
  chat-message hooks are matched against the text "ADDRESS MESSAGE"
  where ADDRESS is the sender's address and MESSAGE is the message.

Version 2.1.0: Zug Zug
- Hooks can now be fallthrough or non fallthrough. You can set a hooks
  priority and whether or not it falls through (i.e. continues hook
  matching after it has been executed) using two optional args to
  (bot-addhook). The new args are pri (integer priority) and fallthru
  (#t or #f) and are at the end. Higher priority hooks are executed
  before lower priority hooks, and fallthrough hooks are executed
  before non-fallthrough hooks. 
- The default config is read from ~/.bobotpp/config/default/ or
  /etc/bobotpp/default/ if the user config is not found. Put your
  default config in either dir. You may also specify a specific config
  under these dirs using the --config or -c arg to bobotpp (see
  bobotpp --help for the full list of commands you may use and how to
  use them).
- Scripts are now stored in ~/.bobotpp/scripts/ or
  PREFIX/share/bobotpp/scripts/ (where PREFIX is /usr/local unless you
  changed it with the --prefix arg to configure). The new function
  bot-load will take a filename and load it from these dirs, returning
  #t if the file was loaded and #f if it wasn't. You can modify the
  search list by appending to %bot-loadpath.
- bobot-utils.scm is now autoloaded, so you don't need to
  load it if you want to use its functions.
- Logs are now in ~/.bobotpp/logs/
- bot-* procedures in Scheme are now bot:*. The old bot-* functions
  are defined as aliases in bobot-utils.scm
- You can now use lambda's for new commands (oops, I wasn't protecting
  the objects from garbage collection)


Version 2.0: Stable release / CVS merges
- Merged stuff from Etienne Bernard's dev tree that he was working on
  before I took over (not much)
- bot-adduser and bot-addshit now work from Scheme

Version 1.99: Configure joy
- You can now disable scripting using --disable-scripting or
  --enable-scripting=no
- Crypt can also be disabled with --disable-crypt or --enable-crypt=no
- Old hooks behavior has been restored (new hooks are added to the end
  of the hooks list and processing does not stop at the first matched
  hook). The hook behavior will change radically in 2.1.

Version 1.98: Unknown_lamer made a large number of changes
- Code is now ISO C++ and compiles with GCC 3.1
- Converted makefile system to use automake
- configure.ac now requires autoconf 2.50 (this is only a problem if
  you modify it, but I should be the only one doing that)
- Transition to new Guile 1.6 API has begun
- Scripting must always be enabled for now (known "bug")
- first hook of a given type to match is the only hook executed, all
  others are ignored. Note that the last hook to be registered is the
  first in the list!


Version 1.97: lots of changes, especially guile's scripting support, which
              is not yet documented. See in the scripts/ directory for
              examples, and in Interp.C (the Startup() function) for the
              list of all available commands.

Version 1.30: Syntax change for "channel =" in bot.conf. See examples/bot.conf.
              Rewrite of ident/password system. Should be more secure and
	      flexible.
