   This file documents Bobot++ by Clinton Ebadi and Etienne Bernard
(original author, no longer works on program).

   This document describes Bobot++ by Clinton Ebadi and Etienne Bernard
(original author, no longer works on program).

   This document applies to version 2.1.0 of the program named Bobot++

   Copyright 2002 Clinton Ebadi

   Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
Texts.

Introduction
************

   This manual feels abused and neglected because it has almost no
content.

Configuration
*************

   Bobot++ is easy to configure. The configuration file format may be
changing in the 2.1 series, so it is not documented for now. See the
`examples' directory for an example configuration.

Configuration File Syntax
=========================

   Not here yet.

Configuration File Placement
============================

   Bobot++ will look in `/etc/bobotpp/default/' for its default config
if none is specified on the command line. Put the configuration files
you want to be loaded by default in this directory. If you are not root
or you want to have your own personal configration, put it in
`~/.bobotpp/config/default/'.

Scripting
*********

   Bobot++'s most powerful feature is its scripting system. You write
scripts using Guile Scheme. This manual does not cover how to use Guile
or how to learn Scheme. See Guile Reference Manual (guile), for
the Guile reference manual and
<http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html> for a
good tutorial on Scheme.

   Note that in previous versions the scripting commands where in the
form `bot-FUNCTION'. They are now in the form `bot:FUNCTION'. The old
names are still available, but are deprecated and will be removed in
Bobot++ 2.4. The command `perl -pi -e ``s/bot-/bot:/g'' YOUR-FILES'
should be enough to convert your code to use the new functions.

Adding New Commands
===================

   Not here yet.

Hooks
=====

   Hooks are a powerful feature of Bobot++. Hooks are a hybrid of ircII
hooks and tiny fugue (a MUD bot) hooks. The basic idea of a hook if
that you match a text against regular expression and call a function if
text in a message matches that regex. The different types of hooks
provided by Bobot++ correspond to the different classes of messages
that Bobot++ can recieve. A Hook also has several properties, including
its priority and whether or not it is a fallthrough hook. Higher
priority hooks are executed before lower priority hooks and fallthrough
hooks are executed before non-fallthrough hooks. A fallthrough hook can
match and processing of hooks will continue; as soon as the first
non-fallthrough hooks matches processing of hooks stops.

Creating a Hook
---------------

   To add a new hook you use the function `bot:addhook'. `bot:addhook'
is prototyped as `(bot:addhook type regex function pri fall)'. `type'
specifies the type of hook (the types of hooks are listed in Hook Types).
`regex' is a standard regular expression. If `regex' is
matched, `function' will be called. `function' will take a different
number of args depending on the hook type. `pri' specifies the priority
of the hook-higher priority hooks are executed first. This argument is
optional and defaults to `0'. `fall' is `#t' if the hook is a
fallthrough hook and `#f' is the hook is not a fallthrough hook. This
arg is also optional and default to `#t'.

Hook Types
----------

   Here is a list of the various hooks are notes on each one. The
general format of a hook is:

   * `hooks/name' (this is the Scheme variable name of the hook)
        - Description of the hook

        - # of args
             - `arg1': desc

             - `arg2': desc

             - ...

             - `argN': desc

   That said, here is the list of available hooks:

   * `hooks/action'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/nickname'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/signoff'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/ctcp'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/ctcp-reply'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/disconnect'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/flood'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/invite'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/join'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/kick'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/part'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/mode'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/message'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/notice'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/public'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/public-notice'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/raw'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/timer'
        - Description of the hook

        - # of args
             - `arg1': desc

   * `hooks/topic'
        - Description of the hook

        - # of args
             - `arg1': desc

Concept Index
*************

Function Index
**************

Variable Index
**************