For your second point, if you have auto-say on and "send to command parser" it really gets sent to the Execute function, not re-sent to the function it is currently in. Otherwise I can envisage an infinite loop.
eg. auto-say on, send to command parser on.
You type "hello nick" <enter>
This gets sent to the primary command parser (let's call it PrimaryCommandParser), like this:
PrimaryCommandParser ("hello nick")
This detects that the auto-say is to be sent to the command parser, so it recalls itself, like this:
(simplified code follows)
void PrimaryCommandParser (sMessage)
{
if (autosay)
if (send_to_command_parser)
PrimaryCommandParser (sMessage);
else
SendToWorld (auto_say_prefix + sMessage);
else
Execute (sMessage);
}
See how that would sent you into an infinite loop?
So, what it actually does is:
void PrimaryCommandParser (sMessage)
{
if (autosay)
if (send_to_command_parser)
Execute (auto_say_prefix + sMessage);
else
SendToWorld (auto_say_prefix + sMessage);
else
Execute (sMessage);
}
Having said that, I'm not fully sure I understand your problem.
I set up auto-say on, exclude special characters off, auto-say prefix "say ", and then did "#chatall test".
This sent: "say #chatall test" which is what I would expect it to do.