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.3.0:
+- Threadsafety enhancements
+ + Hooks are now threadsafe and hook functions can safely add new
+ hooks
+ + Channel ban lists are threadafe
+ + Channel user lists are threadsafe
+
+
+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
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 is either dir. You may also specify a specific config
+ 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/bobotpp/scripts/ (where PREFIX is /usr/local unless you
+ 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