2003-07-23  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/Parser.C (parseMessage): use the find method of std::map
	to find the command to call instead of [] and then extract the
	pointer to the userFunction from that if it exists. This appears
	to fix the crash when one uses an undefined command followed by
	any defined command.

2003-04-09  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/Interp.C (interp_init_helper): Bind bot:setfloodrate to
	ScriptCmmands::SetFloodRate

	* source/ScriptCommands.C (SetFloodRate): New Method: SetFloodRate

	* source/Bot.C (init_user_functions): Make SETFLOODRATE available
	to bot master

	* source/Bot.H: Made MAX_MESSAGES writeable

	* source/UserCommands.H: New method: SetFloodRate

	* source/Commands.H: New method: SetFloodRate

2003-04-03  Clinton Ebadi  <clinton@unknownlamer.org>

	* configure.ac: Merged all AC_OUTPUTs at the end

2003-04-02  Clinton Ebadi  <clinton@unknownlamer.org>

	* scripts/bobot-utils.scm: Make exported symbols from
	the-bot-module available in the guile-user module so that scripts
	loaded with Interp::Load function.

2003-03-30  Clinton Ebadi  <clinton@unknownlamer.org>

	* scripts/bobot-utils.scm (bot:load-module): Loads a file from the
	%bot:loadpath into its own module and returns that (unnamed) module
	(bot:use-module): Calls bot:load-module and then adds the newly
	loaded module to the (current-module)'s use-list

	* source/Interp.C (interp_init_helper): New procedure to initialize
	the-bot-module (this is the old Interp::Startup verbatim)
	(interp_post_startup_helper): New procedure to export
	the-bot-module from bot_module
	(Startup): Now calls interp_init_helper and
	interp_post_startup_helper to initalize the bot module system

	* source/Interp.H: Added private variable bot_module to Interp

2002-11-04  Clinton Ebadi  <clinton@unknownlamer.org>

	* scripts/bobot-utils.scm: Added bot: to regex functions (yes,
	this breaks existing scripts, this is the unstable tree after all)

2002-11-03  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/Mask.C (match): Made Mask::match case insensitive

2002-09-23  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/Interp.C (scm_apply_wrapper): turned off locking of
	Interp::mutex to see if this makes the bot work again...and it
	does!

2002-09-07  Clinton Ebadi  <clinton@unknownlamer.org>

	* configure.ac: Removed arguments to AM_INIT_AUTOMAKE and updated
	everything to use aclocal/automake 1.6

2002-08-27  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/DCCPerson.H (class DCCPerson): Added
	UserCommands::DCCList as a friend (friends are better than the old
	DCC() function at least).

	* source/DCCManager.H (class DCCManager): Added
	UserCommands::DCCList as a friend

	* source/Interp.H (class Interp): Made function scm_apply_wrapper
	a friend so it can lock Interp::mutex

	* source/Interp.C (scm_apply_wrapper): Lock Interp::mutex if
	MULTITHREAD is defined (it is always defined when scripting is
	enabled) so that Sockets can be made multithreaded using
	CommonC++.

	* source/DCCPerson.H: Removed DCC method and made Bot a friend
	Made DCCManager a friend

	* source/DCCManager.H (class DCCManager): Removed MAP() method
	and made Bot a friend of DCCManager

2002-08-18  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/Interp.C (Startup): Renamed bot:DCC-chat-send to
	bot:dcc-chat-send. 

	* bobot++.texinfo (Hook Types): Fixed a typo (I wrote
	user!nick@host instead of the correct nick!user@host).

	* source/Interp.C (Startup): Register bot:DCC-chat-send

	* source/ScriptCommands.C (sendDCCChatMessage): Added method again

2002-08-08  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/String.C (String): The std::string copy constructor now
	extracts the c_str of the std::string and then takes the strlen of
	that before copying it. This fixes a bug with DCC where if you did
	e.g. "!help" the bot would reply with "No TOPIC PRIVMSG FOUND" or
	something like that, depending on what the last message was
	because Socket will insert a \0 into its semi-static buffer, so
	the len of the String will not equal the strlen of its char*.

2002-08-07  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/DCCPerson.H: Removed destructor (I = idiot)

	* source/DCCConnection.H: DCCManager is now a friend of
	DCCConnection (ugh, the bot has way too many friends).

	* source/DCCPerson.H: Added DCC member that returns a const
	DCCConnection* (the dcc connection). This isn't saved anywhere
	because when a DCCPerson is destroyed, its connection is also
	destroyed.

	* source/Bot.H: dccConnections is now a DCCManager

	* source/DCCPerson.H: Added destructor
	Added handleInput method

	* source/DCCManager.C: New file
	(addConnection): Wrote method, add a DCCConection to the manager

	* source/DCCManager.H: New file

	* source/Interp.C (Startup): Register bot:DCC-chat-send
	(Startup): Removed sendDCCChatMessage stuff

	* source/ScriptCommands.C (sendDCCChatMessage): New method:
	sendDCCChatMessage (to, message) sends message to to.

	* source/DCCConnection.C (connect): Run DCC_CHAT_BEGIN hook with
	one arg: from (user!nick@host).

	* source/DCCParser.C (parseLine): Runs DCC_CHAT_MESSAGE hook with
	two args: from (user!nick@host) and line

2002-08-06  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/Interp.C (Startup): Two new Scheme values:
	hooks/dcc/chat-begin and hooks/dcc/chat-message for the
	DCC_CHAT_BEGIN and DCC_CHAT_MESSAGE hooks.

	* source/BotInterp.H: Added two new enum values to Hook:
	DCC_CHAT_BEGIN and DCC_CHAT_MESSAGE for the DCC chat start and DCC
	chat message hooks

2002-08-05  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/Parser.C (parseCTCP): Removed call to htonl and fixed
	DCC! Ack, sockets take their arguments in network byte order so
	there is no need to convert to host...now DCC _sort of_ works.

2002-08-04  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/UserList.C (save): Increment iterator twice to get around
	bug (see BUGS #2)

	* source/ServerQueue.C: Now sends SEND_* hooks instead of
	triggered general hooks.

	* source/Interp.C (Startup): New scheme side defines: hooks/send/*
	(* = the new SEND_ hooks, but lowercase).

	* source/BotInterp.H: New hook types (SEND_..., ... = ACTION,
	CTCP, PUBLIC, MESSAGE). These are triggered on send messages.

2002-08-01  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/Bot.C (set_log_file): Oops! Fixed logging. Now the bot
	logs again.

	* source/Socket.C (readLine): Now uses a static std::string that
	starts out with 512 chars. This will never need to be resized for
	usualy IRC messages, but might be for DCC messages

2002-07-31  Clinton Ebadi  <clinton@unknownlamer.org>

	* scripts/bobot-utils.scm (not-from-me): New syntax.

	* source/ScriptCommands.C (AddHook): Now takes another optional
	arg--name that will name the hook (see the hooks section in the
	manual for what this does).

	* source/BotInterp.H: Added name field to Hook

2002-07-29  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/ServerQueue.C (sendPrivmsg): Now calls hooks on own
	PRIVMSGes because the IRC server doesn't echo them back to the
	bot. This could be useful for something (e.g. log script).

2002-07-27  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/Interp.C (Shutdown): Runs bot:exit-hook hooks
	(Startup): New var for Scheme: bot:exit-hook. Calls the thunks
	associated with the hook when Interp::Shutdown is called (bot exit).

2002-07-23  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/BotInterp.H (Hook<): Changed behavior of Hook's <. If a
	hook is greater than or less than the other hook, only the
	priority is considered. However, if both hooks have the same
	priority, then the fallthru-ness is considered, with fallthru
	hooks being greater than non-fallthru hooks.
	
	* source/BotInterp.C (hptr_lt): Added this static function to be
	used to sort the hooks list (now hooks should be sorted using
	Hook's operator < instead of using pointer comparision, meaning
	the new hook system will work correctly)

	* scripts/bobot-utils.scm: Make bot:log use for-each instead of
	map because we don't need the result of the displays (this would
	just be a list of #<undefined> values and is a waste of memory).

2002-07-13  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/Bot.C (Bot): userFunctions is now a map for efficiency
	(worst case search is now NlogN instead of N). This improvement is
	not as drastic as the one gained by making the Parser functions
	list a map (because we don't scan this map for every message), but
	it helps to clean up the code

2002-07-12  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/Parser.H: Removed userFunctionsStruct

	* source/Interp.C (Startup): ScriptCommands::sendCTCP registered
	as bot:send-CTCP for Scheme

	* source/ScriptCommands.C (sendCTCP): Wrote sendCTCP

2002-07-11  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/ServerQueue.C (sendUser): Changed . . in USER command to
	0 * (which is the Right Way to because <mode> must be a number...)

	* source/Parser.C (init): New method of Parse. This initalizes the
	functions map. functions replaces the old functions array, and
	should yield better performance (since the functions array had to
	be scanned for every incoming message)

	* source/Parser.H: New member, functions (private)

2002-07-10  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/Interp.C (Startup): New symbols: bot:user-*
	[none|user|trusted|friend|master] are defined in Scheme as the
	different levels of the users. 
	(Startup): All bot-* variables are now bot:*

2002-07-09  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/Bot.H: Made some variables private because they shouldn't
	be changed at runtime

	* source/Parser.C (parseCTCP): Reneabled DCC CHAT (I want to test
	this out to see if it works and make it work)

	* source/Bot.C (Bot::Bot): New var: logs_dir. Set to the log file
	dir. 

	* scripts/bobot-utils.scm: Fixed a typo (I forgot the / after
	scripts in the user scripts dir) that made bobot++ not able to
	load scripts from the user scripts dir

2002-07-08  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/BotInterp.C (RunHooks): Changed iterators to
	reverse_iterators because the hooks list is sorted in ascending
	order--higher priority and fallthrough hooks appear _after_ the
	lower priority and non-fallthrough hooks.

	* source/Main.C (print_long_help): Added function
	(print_short_help): Renamed from printUsage
	(namespace): Most stuff in here is now defined in an anonymouse
	namespace so it doesn't have external linkage
	(real_main): Uses getopt_long instead of getopt. Added several
	command line arguments (bobotpp --help for a full list).

	* scripts/bobot-utils.scm (bot-load): Function moved from
	bobot-scheme.scm
	
	* source/Interp.C (Startup): Autoloads
	PREFIX/bobotpp/scripts/bobot-utils.scm now
	(Startup): New Scheme variable: bot-sys-scripts-dir (system
	scripts dir)

	* source/bobot-scheme.scm.in: Removed

	* source/Makefile.am: Removed bobot-scheme.scm compiliation

	* configure.ac (PREFIX): configure.ac defined prefix now

	* source/Main.C (real_main): Default configuration is now read
	from /etc/bobotpp/default
	* source/bobot-scheme.scm.in: Added file. This defines the
	'bot-load' procedure which will load a file from
	$HOME/.bobotpp/scripts/ or @datadir@/bobotpp/scripts/ if the
	script doesn't exist in the user script dir.

2002-07-01  Clinton Ebadi  <clinton@unknownlamer.org>

	* bobot++.texinfo: Started docs (just a skeleton right now)

	* source/ScriptCommands.C (AddHook): Now takes pri and fall opt
	args to set a hooks priority and whether or not it will
	fallthrough. These args are optional.

	* source/Interp.C (Startup): addhook now takes 3 req and 2 opt args

	* source/BotInterp.C (AddHook): Now uses priority and fallthrough
	(RunHooks): exec fallthrough hooks first.

	* source/BotInterp.H: Changed Hooks to have priority
	Added fhooksMap to BotInterp (fallthrough)

	* source/UserCommands.C (AddShit): Converted to use Commands

2002-06-21  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/Commands.C (AddUser): Fixed a one-off (function call was
	before a brace instead of after one) that caused a segfault when
	the user mask was a wildcard

2002-06-20  Clinton Ebadi  <clinton@unknownlamer.org>

	* all files: Updated address of the FSF

	* source/UserCommands.C (AddUser): Uses Commands now instead of
	manipulating the bot directly

2002-06-18  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/ScriptCommands.C (AddShit): Filled in function.

	* source/Interp.C (Startup): Bind bot-adduser to
	ScriptCommands::AddUser instead of Action
	(Startup): Bind bot-addshit to ScriptCommands::AddShit

	* source/ScriptCommands.C (AddUser): Filled in function

	* source/ServerList.C (delServer): Changed (n - 1) to n...n-1
	would have caused problems if you used more than one server

	* source/Parser.H: Changed const char* to String in userFunctionStruct

	* source/String.H: Added std::string compatibility members

	* configure.ac: You can now disable Crypt and scripting

	* source/*: Added #include "config.h" where needed

	* configure.ac: Added AM_CONFIG_HEADER

	* config.h.in: added file

	* source/Queue.C: Didn't notice iostream.h here! Fixed


Copyright 2002 Clinton Ebadi
Copying and distribution of this file, with or without modification, are
permitted provided the copyright notice and this notice are preserved.
