BotBlock v1.2
(c) 2004 by Don Blaheta
Released under the Artistic Licence
http://www.opensource.org/licenses/artistic-license.php
Based loosely on SCode by James Seng

The idea:

Robots that automatically post spam are just the vile spawn of Satan,
clearly, but they're out there, and it'd be nice if blogs could defend
against them.  James Seng's mt-bayesian plugin is one tactic, but it
still requires scanning for false positives, so isn't sufficient by
itself.  Many blogs have added a filter that requires one to read a
graphic and type the text that it contains---Seng's SCode is one example
of this---but this is hostile to users who by choice or necessity use a
text-only browser.

Besides, the bots seem to be getting the hang of OCR.

What's something that robots can't do?  As a researcher in computational
linguistics, I can say that one of the hardest problems out there is
language understanding, especially when it requires domain knowledge.
So I wrote this MT plugin to ask users questions and check their
answers.  There is a random number component (so the bot programmers
can't just do straight-up text matching) and a language component.  If
each user of BotBlock modifies the questions---even if only to rephrase
them!---then it will be impossible for the bots to keep up.  Even if
they catch on to some questions, you can always just change them, no
reinstallation required.

See the INSTALL file for installation instructions.

Version info:

1.2.2: Cleaner logfile code; commented out multiple question ("too
  hard", sigh); made future/past stricter to block random correct
  answers. (8 Aug 2007)

1.2.1: Fixed the "multiple" question to not accept 0 as a valid 
  answer. (16 Dec 2004)

1.2: Separated the questions into their own, separate module for
  editing; added num_to_words and a question that uses it. (16 Dec 2004)

1.1: Further simplified the question-writing code; documented how to
  write questions; added logging capability.  (15 Dec 2004)

1.0.1: Changed default max files and timeout; fixed BotBlock::block to
  return an error message if there are no indices available.  (12 Dec 2004)

1.0: Initial version. (11 Dec 2004)
