1 This is bobot++.info, produced by makeinfo version 4.7 from
4 This file documents Bobot++ by Clinton Ebadi and Etienne Bernard
5 (The original author who no longer works on the program).
7 Copyright 2002,2004,2005 Clinton Ebadi
9 Permission is granted to copy, distribute and/or modify this document
10 under the terms of the GNU Free Documentation License, Version 1.1 or
11 any later version published by the Free Software Foundation; with no
12 Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
16 File: bobot++.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
18 This document describes Bobot++ by Clinton Ebadi and Etienne Bernard
19 (The original author who no longer works on the program).
21 This document applies to version 2.2 of the program named Bobot++.
23 Copyright 2002,2004,2005 Clinton Ebadi
25 Permission is granted to copy, distribute and/or modify this document
26 under the terms of the GNU Free Documentation License, Version 1.1 or
27 any later version published by the Free Software Foundation; with no
28 Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
41 --- The Detailed Node Listing ---
45 * Configuration File Placement::
46 * Configuration Files::
77 * User List Commands::
81 * Adding New Commands::
84 * Misc Scripting Stuff::
95 * Received Message Hooks::
96 * Sent Message Hooks::
98 * Miscellaneous Hooks::
102 * High Level Message Functions::
103 * Low Level Message Functions::
105 Misc. Scripting Stuff
111 File: bobot++.info, Node: Introduction, Next: Configuration, Prev: Top, Up: Top
116 Bobot++ is a powerful IRC bot written in C++. It can be used standalone
117 as a channel maintenence bot, or extended to do almost anything using
120 FIXME: Fill the intro in more?
123 File: bobot++.info, Node: Configuration, Next: Using the Bot, Prev: Introduction, Up: Top
128 Bobot++ is easy to configure. See the `examples' directory for an
129 example configuration.
131 The main configuration file is `bot.conf'. There are several
132 auxiliary configuration files (a user list, aliases file, ban list, and
137 * Configuration File Placement::
138 * Configuration Files::
141 File: bobot++.info, Node: Configuration File Placement, Next: Configuration Files, Prev: Configuration, Up: Configuration
143 2.1 Configuration File Placement
144 ================================
146 Bobot++ will look in `/etc/bobotpp/default/' for its default config if
147 none is specified on the command line. Put the configuration files you
148 want to be loaded by default in this directory. If you are not root, or
149 you want to have your own personal configuration, put it in
150 `~/.bobotpp/config/default/'.
153 File: bobot++.info, Node: Configuration Files, Prev: Configuration File Placement, Up: Configuration
155 2.2 Configuration Files
156 =======================
167 File: bobot++.info, Node: bot.conf, Next: bot.users, Prev: Configuration Files, Up: Configuration Files
172 `bot.conf' contains key value pairs separated by `='.
176 Comments are started with a `#' and cause the entire line to be
177 ignored. _Note that this only works when the `#' is the first character
180 bot.conf is the main configuration file for a Bobot++. The available
181 configuration variables are listed below in the format "VARIABLE
182 <default-value>: description"
184 A few of the options have more complex syntax, they are documented in
185 their own subsections.
192 * MAXNICKLENGTH <9>: The maximum length a valid nickname may be.
193 This should be set before setting the bot's nickname if it will be
194 more than nine characters long. Most IRC servers support nicknames
195 longer than nine characters, but Bobot++ still follows the old spec
196 and defaults to nine.
198 * NICKNAME <Bobot>: The nickname of the bot (NICK is an alias for
201 * USERNAME <bobot>: The IRC username of the bot
203 * CMDCHAR <!>: The character that prefixes commands given to the bot
204 (COMMAND is an alias for CMDCHAR)
206 * IRCNAME <I'm a bobot++!>: The IRC name (or 'real name') of the bot
207 (REALNAME is an alias for IRCNAME)
209 * USERLIST <bot.users>: Name of the file where the userlist is stored
211 * AUTOEXECFILE <bot.autoexec>: Name of the file containing Scheme
212 code to be executed when the bot starts (only used if the bot is
213 compiled with scripting support)
215 * INITFILE <bot.init>: Name of the file containing the default
218 * SHITLIST <bot.shit>: Name of the file where the shitlist (ban
221 * LOGFILE <$LOGDIR/bot.log>: Location of the bot logfile (set this
222 to `/dev/null' to disable logging).
224 * SERVER <None>: This specifies the server to which the bot will
225 connect. Note that this has a special syntax *note server syntax::.
227 * CHANNEL <None>: This specifies the channels the bot will join when
228 it starts up. This has a special syntax *note channel syntax::.
232 File: bobot++.info, Node: server syntax, Next: channel syntax, Prev: bot.conf, Up: bot.conf
234 2.2.1.1 server syntax
235 .....................
237 The server syntax in `bot.conf' allows you to specify an alternate port
238 to connect on, and a password to send the server.
240 You may use more than one server line; Bobot++ will attempt to
241 connect to the first one, and will connect to the next one in the list
242 if it fails. The bot will continue cycling through the server list
243 until it is able to connect to one. There is a command (`!cycle') to
244 make the bot to cycle servers.
246 SERVER = SERVER_NAME [PORT [PASSWORD]]
248 This will make Bobot++ attempt to connect to SERVER_NAME on port
249 PORT with the password PASSWORD. SERVER_NAME should be the address of
250 the server. PORT and PASSWORD are optional.
253 File: bobot++.info, Node: channel syntax, Prev: server syntax, Up: bot.conf
255 2.2.1.2 channel syntax
256 ......................
258 The channel syntax in `bot.conf' allows you to specify the initial
259 modes the bot should set on a channel, the modes the bot should
260 maintain, and a key if the channel needs it.
262 You may have any number of channel lines. When Bobot++ starts it will
263 attempt to join and gain operator status in every channel listed.
265 CHANNEL = NAME:INITIAL_MODES:MODES_TO_KEEP:CHANNEL_KEY
267 The bot will join NAME and set the channel modes to INITIAL_MODES
268 (e.g. "nt") if it is able to gain operator status. It will then
269 maintain MODES_TO_KEEP. If the channel requires a key to enter simply
270 set CHANNEL_KEY. Every argument except for NAME is optional.
274 CHANNEL = #foo:nt:nt:bar
276 The bot will join `#foo' with the channel key `bar' and will then
277 maintain the modes `nt'.
281 The bot will join `#bar' and will not set any modes nor will it
282 attempt to maintain any modes.
285 File: bobot++.info, Node: bot.users, Next: bot.init, Prev: bot.conf, Up: Configuration Files
287 2.2.2 bot.users (User List)
288 ---------------------------
290 `bot.users' is the default file name of the userlist. It may be changed
291 in `bot.conf' via the USERLIST option. *You must add an entry for
292 yourself manually.* You will probably want to add other entries using
293 the IRC command interface as it is more intuitive than editing the file
296 The file contains lines with the format:
298 `HOST_MASK:CHANNEL_MASK:LEVEL:PROTECTION:AUTO-OP:EXPIRATION:PASSWORD'
300 * HOST_MASK is the host mask (e.g. `*!*username
301 .domain.com') of the user
303 * CHANNEL_MASK is a channel mask of the channels that the user has
304 priviliges to use the bot in (e.g. `*' for all channels, `#*' for
305 all non-local channel, `#foo*' for all channels starting with
306 "foo," `#bar' for channel "#bar" only, etc.)
308 * LEVEL is the user level of the user (*Note User Levels::).
310 * PROTECTION is the protection level of the user (*Note
313 * AUTO-OP is set to control whether a user is automatically given
314 operator priviliges on channel entry (*Note Automatic Op::).
316 * EXPIRATION is the UNIX timestamp of when the user entry becomes
317 invalid. Setting this to -1 will make the entry permanent.
319 * PASSWORD is the password the user must supply to the bot to
320 authenticate. This can be set to `*NONE*' to not have a password.
324 File: bobot++.info, Node: bot.init, Next: bot.autoexec, Prev: bot.users, Up: Configuration Files
326 2.2.3 bot.init (Command Aliases)
327 --------------------------------
329 This file stores a list of IRC command aliases. The filename may be
330 changed in `bot.conf' via the INITFILE option. You use this file to set
331 up aliases for IRC commands, e.g. to make `!a' call `!adduser'. This
332 way you can save typing for commonly used commands.
334 The format of a line in the file is: ALIAS COMMAND
336 This will make ALIAS call COMMAND. e.g. `t topic' will make `!t New
337 Topic' set the current channel's topic to "New Topic," just as if you
338 had used `!topic New Topic'.
341 File: bobot++.info, Node: bot.autoexec, Next: bot.shit, Prev: bot.init, Up: Configuration Files
343 2.2.4 bot.autoexec (Scheme Init File)
344 -------------------------------------
346 This file is only used when Bobot++ is compiled with scripting support.
347 The name of the autoexec file can be changed in `bot.conf' via the
350 The contents of this file are evaluated by Guile when the bot
351 starts. You can use this to do things like loading a few default
352 modules when the bot starts.
355 File: bobot++.info, Node: bot.shit, Prev: bot.autoexec, Up: Configuration Files
357 2.2.5 bot.shit (Ban/Shit List)
358 ------------------------------
360 This file stores the ban list. The name may be changed in `bot.conf'
361 via the SHITLIST option. You will most likely want to use the IRC
362 command interface to edit this file instead of editing it directly.
364 The file contains lines in the form:
366 `HOST_MASK:CHANNEL_MASK:LEVEL:EXPIRATION:REASON'
368 * HOST_MASK is the host mask (e.g. `*!*username
369 .domain.com') of the user
371 * CHANNEL_MASK is a channel mask of the channels that the user is
372 banned on (e.g. `*' for all channels, `#*' for all non-local
373 channel, `#foo*' for all channels starting with "foo," `#bar' for
374 channel "#bar" only, etc.
376 * LEVEL is a number specifying if the bot should not allow the user
377 to gain ops, to kick the user upon joining, or to prevent the user
378 from being debanned by other users. *Note Shit Levels:: for
379 information on the available levels.
381 * EXPIRATION is the UNIX timestamp of when the shit entry becomes
382 invalid. This may be set to -1 to make it valid forever.
384 * REASON is text that is sent to the user when they are kicked or
385 banned from the channel.
389 File: bobot++.info, Node: Using the Bot, Next: Scripting, Prev: Configuration, Up: Top
394 Using Bobot++ is easy. This chapter covers starting the bot, a few
395 Bobot++ specific concepts, and using the built-in commands of the bot.
401 * Built-In Commands::
404 File: bobot++.info, Node: Starting the Bot, Next: Concepts, Prev: Using the Bot, Up: Using the Bot
409 The bot is usually installed with the binary name `bobotpp'. It accepts
410 the following command line arguments.
412 * `[--help][-h]' - Shows detailed help and exits
414 * `[--version][-v]' - Shows version information and exits
416 * `[--no-background][-b]' - Run bobot++ in the foreground
418 * `[--config-file file][-f]' - Use file instead of `bot.conf'
420 * `[--config-dir dir][-d]' - Use dir as dir to load config file from
422 * `[--config dir][-c]' - Search your config path (defaults to
423 `$HOME/.bobotpp/config/' and then `/etc/bobotpp/') for dir and
424 then loads your config data using dir
426 * `[--sys-config dir][-s]' - Looks for config in `/etc/bobotpp/dir'.
427 Note that the user dir is still searched first
429 * `[--user-config dir][-u]' - Looks for config in
430 `$HOME/.bobotpp/config/dir/'. Note that the system dir is still
431 searched after this if dir is not found.
433 * `[--debug][-D]' Makes Bobot++ print debugging info and run in the
436 * `[--debug-scripts][-S]' Enables the Guile debugging evaluator for
437 verbose script errors and backtraces while still running the bot
440 The default configuration is read from
441 `$HOME/.bobotpp/config/default/' and then `/etc/bobotpp/default/' if
442 the user config is not found.
444 The bot defaults to running in the background as a daemon.
447 File: bobot++.info, Node: Concepts, Next: Built-In Commands, Prev: Starting the Bot, Up: Using the Bot
452 There are a few general concepts that a user of Bobot++ should know
463 File: bobot++.info, Node: User Levels, Next: Protection, Prev: Concepts, Up: Concepts
468 There are several user levels available in Bobot++ to provide gradated
469 access to commands. `!adduser' and `bot.users' use the numeric code;
470 Scheme uses the textual name for the level. By default (if the user is
471 not found in the userlist) a user has access to commands with the level
474 0. `bot:user-none' - No *built-in* commands may be executed _by
475 default_ (commands may be added from Scheme that can be executed
476 by users of level none and the level required to execute a command
477 may be changed from Scheme).
479 1. `bot:user-user' - Will be able to execute most commands but not
480 all and cannot use masks on kicks and bans.
482 2. `bot:user-trusted' - For built-ins with a default configuration
483 this user has access to the same set of commands as an `user' but
484 may use masks on kicks and bans. Scheme commands may be added
485 which require a user to be of this level.
487 3. `bot:user-friend' - In the default configuration a user who is a
488 friend will be able to do everything short of stopping the bot.
489 Again, there may be user added commands that require a higher user
492 4. `bot:user-master' - This is the highest user level and has access
493 to every feature of the bot.
497 File: bobot++.info, Node: Protection, Next: Automatic Op, Prev: User Levels, Up: Concepts
502 A user added via Scheme, the `bot.users' file, or `!adduser' may be
503 protected from being deoped, kicked, or banned. The user list and IRC
504 commands use the numeric codes, Scheme uses the symbolic names.
506 0. `bot:protection/none' No protection
508 1. `bot:protection/no-ban' No ban. If a user is banned the bot will
511 2. `bot:protection/no-kick' No kick. The user may still be kicked but
512 the bot will kickban the user who kicked the protected user.
514 3. `bot:protection/no-deop' No deop. The bot will ensure that the
515 user always maintains operator status.
518 File: bobot++.info, Node: Automatic Op, Next: Shit Levels, Prev: Protection, Up: Concepts
523 A user may be automatically given operator status upon entering a
524 channel. Scheme uses the symbolic name, the user list (`bot.users') and
525 IRC commands use the numeric value.
527 0. `bot:aop/no' Do not automatically op the user
529 1. `bot:aop/yes' Do automatically op the user
532 File: bobot++.info, Node: Shit Levels, Prev: Automatic Op, Up: Concepts
537 The shit list and shit list related commands use different levels to
538 define how much the bot hates a user. Scheme uses the symbolic names,
539 the shit list and IRC commands use the numbers.
541 0. `bot:shit/none' The bot doesn't hate the user (this is the normal
544 1. `bot:shit/no-op' The bot will deop the user any time he gains
545 operator priviliges in the channel
547 2. `bot:shit/no-join' The bot will kick and ban the user when he
550 3. `bot:shit/no-deban' The bot will kick and ban usre when he joins
551 the channel, and will prevent other users from debanning him.
554 File: bobot++.info, Node: Built-In Commands, Prev: Concepts, Up: Using the Bot
556 3.3 Built-In Commands
557 =====================
559 Bobot++ has many built-in commands that make it useful without
560 scripting support. The reference leaves off the command char; remember
561 to use whatever you defined the command char to be in `bot.conf'. If a
562 command needs the channel name then you must specify the channel as the
563 first argument to the command when private messaging the bot a command.
568 * User List Commands::
571 File: bobot++.info, Node: Message Commands, Next: User List Commands, Prev: Built-In Commands, Up: Built-In Commands
573 3.3.1 Message Commands
574 ----------------------
576 COMMAND NEEDS MIN LEVEL DESCRIPTION
578 `action' `do' Yes USER Causes the bot to perform the
579 action `do' in the current channel.
582 `say' Yes Makes the bot say MESSAGE on
586 File: bobot++.info, Node: User List Commands, Prev: Message Commands, Up: Built-In Commands
588 3.3.2 User List Commands
589 ------------------------
591 COMMAND NEEDS MIN LEVEL DESCRIPTION
594 `addserver' Adds the server specified by HOST
595 NAME or IP ADDRESS to the server
598 `alias' Makes an alias, and adds the
599 function NEW NAME, that will do
600 exactly the same command as OLD
602 `ban' Bans MASK or NICK from CHANNEL. You
603 need to be a trusted user to ban
606 `channels' Prints the channel(s) where the bot
608 `cycle' Yes Makes the bot leave and join
610 `dcclist' Gives the list of all DCC Chat
612 `deban' Yes Debans MASK or NICK from CHANNEL.
613 You need to be a trusted user to
615 `delserver' Deletes server from server list
616 whose number in the server list is
618 `deluser' Removes NICK or MASK from the
620 `delshit' Removes NICK or MASK from the
622 `deop' Yes Deops MASK or NICK on CHANNEL.
623 `die' Makes the bot stop immediately.
624 `execute' *Only available if scripting
627 `ident' Identifies you on the bot. Note
628 that you should not use this
629 command in public ...
630 `invite' Yes Invites NICK on CHANNEL.
631 `join' Makes the bot join CHANNEL.
632 `keep' Yes Sets the MODES that the bot will
634 `kick' Yes Kicks MASK or NICK out of CHANNEL,
635 because of REASON. You need to be a
636 trusted user to use a MASK.
637 `kickban' Yes Bans then kicks MASK or NICK out of
638 CHANNEL, because of REASON. You need
639 to be a trusted user to use a MASK.
640 `load' Reloads the userlist from disk.
641 `loadscript' *Only available if scripting
643 `lock' Locks topic on CHANNEL.
644 `mode' Yes Sends MODE STRING as mode for
646 `names' Yes Shows the nicknames and status of
648 `nextserver' Makes the bot connect to the next
649 server in its server list.
650 `nick' Makes the bot use nickname NICK.
651 `nslookup' Does a nameserver query about NICK
652 host, HOST or IP ADDRESS.
653 `op' Yes Ops NICK on CHANNEL.
654 `part' Yes Makes the bot leave CHANNEL.
655 `password' Changes your password on the bot.
656 Use `NONE' as password if you want
657 to clear it. Do not use this
659 `reconnect' Makes the bot reconnect to its
661 `rspymessage' Removes you from the spy list.
662 `save' Saves the userlist.
663 `server' Select the server to connect to.
664 SERVER NUMBER is the number of the
665 server in the serverlist.
666 `serverlist' Shows the bot's serverlist.
669 `shitlist' Shows the bot's shitlist.
670 `spylist' Shows the bot's spylist.
671 `spymessage' Adds you to the spylist
672 `stats' Yes Gives CHANNEL's statistics.
673 `tban' Yes Bans NICK or MASK from CHANNEL for
675 `tkban' Yes Bans NICK or MASK from CHANNEL for
676 TIME seconds, then kicks him/them
678 `topic' Yes If no TOPICis given, prints
679 CHANNEL's topic. Otherwise, the bot
680 will change CHANNEL's topic to
682 `unlock' Yes Makes the bot unlock topic on
684 `userlist' Shows the bot's userlist
685 `who' Yes Show your level on CHANNEL
686 `whois' Yes Shows information about NICK on
690 File: bobot++.info, Node: Scripting, Next: Concept Index, Prev: Using the Bot, Up: Top
695 Bobot++'s most powerful feature is its scripting system. You write
696 scripts using Guile Scheme. This manual does not cover how to use Guile
697 or how to learn Scheme. *Note Guile Reference Manual: (guile)Top, for
698 the Guile reference manual and
699 `http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html' for a
700 good tutorial on Scheme.
702 Note that in previous versions the scripting commands where in the
703 form `bot-FUNCTION'. They are now in the form `bot:FUNCTION'. The old
704 names are still available, but are deprecated and will be removed in
705 Bobot++ 3.0. New commands are only available with the `bot:' prefix.
706 The command `perl -pi -e ``s/bot-/bot:/g'' YOUR-FILES' should be enough
707 to convert your code to use the new functions.
709 *NOTE*: All arguments to functions and hooks called by the bot are
710 strings unless otherwise specified.
714 * Adding New Commands::
717 * Misc Scripting Stuff::
722 File: bobot++.info, Node: Adding New Commands, Next: Hooks, Prev: Scripting, Up: Scripting
724 4.1 Adding New Commands
725 =======================
727 Adding a new command is simple. To register a new command use
730 -- Function: bot:addcommand name func needs-channel? num-of-args
732 The NAME is a string representing the name of the command being
733 added. FUNC is a function accepting NUM-OF-ARGS arguments.
734 NEEDS-CHANNEL? is a bool that is true if the function needs the
735 channel name as its first arg, and false otherwise. NUM-OF-ARGS
736 is the number of args FUNC will take and must be within zero (0)
737 and twenty (20). MIN-LEVEL is one of the *Note User Levels::. A
738 user must be at least a MIN-LEVEL user to use the new command.
739 None of the arguments are guaranteed to be passed; if they aren't
740 they are set to the empty string `""'. An example of a new
743 (define (hello channel name)
744 (if (string=? name "")
745 (bot:say channel "Hello world!")
746 (bot:say channel (string-append "Hello " name "!")))
748 (bot:addcommand "hello" hello #t 2 0)
750 This will display "Hello World!" if called as `!hello' and "Hello
751 World USER" if called as `!hello USER'.
754 File: bobot++.info, Node: Hooks, Next: Sending Messages, Prev: Adding New Commands, Up: Scripting
759 Hooks are a powerful feature of Bobot++. Hooks are a hybrid of ircII
760 and tiny fugue (a MUD bot) hooks with a little bit of extra stuff added
761 in. A hook is called when a regular expression is matched against a
762 message sent to or by the bot.
764 Bobot++ uses different hook types for each IRC message type, and also
765 includes a hook for accessing raw irc messages. Hooks are tagged with a
766 priority and a flag that specifies whether to call the next hook that
767 matches after calling the current one or to stop processing.
769 Hooks are processed from the highest to lowest priority, with
770 fallthrough hooks of equal priority to non-fallthrough hooks being
779 File: bobot++.info, Node: Creating a Hook, Next: Hook Types, Prev: Hooks, Up: Hooks
781 4.2.1 Creating a Hook
782 ---------------------
784 To add a new hook you use the function `bot:addhook'.
786 -- Function: bot:addhook type regex function [pri fall name]
787 TYPE specifies the type of hook (the types of hooks are listed in
790 REGEX is a standard regular expression. If REGEX is matched,
791 FUNCTION will be called.
793 FUNCTION will take a different number of args depending on the
796 PRI specifies the priority of the hook--higher priority hooks are
797 executed first. This argument is optional and defaults to `0'.
799 FALL is `#t' if the hook is a fallthrough hook and `#f' is the
800 hook is not a fallthrough hook. This arg is also optional and
803 NAME is the optional name of the hook that defaults to
804 `"DEFAULT"'. If you set the name then you can have more than one
805 hook that matches the same regexp, as long as they have the same
806 name. E.g. in a log script you could have the regexps for the log
807 function all be `".*"' and set their names to `"log"' to avoid a
808 conflict with other hooks.
811 File: bobot++.info, Node: Hook Types, Prev: Creating a Hook, Up: Hooks
816 The following sections document the different hooks Bobot++ exposes.
818 The general format of each hook description is as if it were a
819 function to be defined, but these describe the function to be passed to
820 `bot:add-hook'. Do _not_ name your functions these names.
822 That said, here is the list of available hooks functions. FIXME:
827 * Received Message Hooks::
828 * Sent Message Hooks::
830 * Miscellaneous Hooks::
833 File: bobot++.info, Node: Received Message Hooks, Next: Sent Message Hooks, Prev: Hook Types, Up: Hook Types
835 4.2.2.1 Receieved Message Hooks
836 ...............................
838 The following hooks are triggered when a mesage is received by the bot.
840 -- Function: hooks/action from to action
841 This hook is triggered when someone performs an action.
843 FROM is the nickname the person that performed the action.
845 TO is the target of the action, which is either a channel or the
846 Bot's nick if the user private messages the bot.
848 ACTION is the text of the action. E.g. if someone did `* foobar
849 does baz', then ACTION would be the string `"does baz"'.
851 -- Function: hooks/nickname old-nick new-nick
852 This hook is called when someone changes his nickname from
853 OLD-NICK to NEW-NICK.
855 -- Function: hooks/signoff nick message
856 This hook is called when someone signs off of IRC.
858 NICK is the nickname of the person signing off.
860 MESSAGE is his quit message
862 -- Function: hooks/ctcp nick to command rest
863 This hook is called when a CTCP request is received by the bot.
865 NICK is the nickname of the sender.
867 TO is the target of the CTCP request. This will either be a
868 channel the bot is in, or the nickname of the bot.
870 COMMAND is the CTCP command issued.
872 REST contains the arguments to the CTCP command.
874 -- Function: hooks/ctcp-reply nick command rest
875 This hook is called when a CTCP REPLY is received. This occurs when
876 the bot has sent a CTCP request to another client. The CTCP REPLY
877 is always addressed to the bot directly.
879 NICK is the nickname of the person who replied.
881 COMMAND is the command to which NICK is replying.
883 REST contains the body of the reply.
885 -- Function: hooks/disconnect server intentional
886 This is called when the bot is disconnected from a server.
888 SERVER is the hostname of the server from which the bot was
891 INTENTIONAL is a flag set to `#t' when the bot disonnected from
892 the server as the result of a command (issued by a user from IRC,
893 SIGHUP, or from a script), or `#f' when the bot disconnected from
894 the server unintentionally..
896 -- Function: hooks/invite nick channel
897 This hook is called when a user invited the bot to join a channel.
899 NICK is the nickname of the user who sent the invite.
901 CHANNEL is the channel to which the bot was invited.
903 -- Function: hooks/join nick channel
904 This is called when a user or the bot joins a channel.
906 NICK is the nickname of the user who joined CHANNEL. This may be
907 the bot's nickname (the IRC server sends the JOIN command back to
908 the the bot after it joins a channel).
910 CHANNEL is the channel that was joined
912 -- Function: hooks/kick target from channel reason
913 This hook is called when a user, including the bot, is kicked out
916 TARGET is the nick of the user who was kicked. This may be the
919 FROM is the nick of the user who issued the kick. This may also be
922 CHANNEL is the channel the kick was issued in.
924 REASON is the reason the user was kicked.
926 -- Function: hooks/part nick channel
927 This hook is called when a user parts a channel.
929 NICK is the user who parted the channel. This may be the bot.
931 CHANNEL is the channel from which the user parted.
933 -- Function: hooks/mode nick target modes
934 This hook is called when someone sets the modes of TARGET.
936 NICK is the user who set the modes. This may be the bot.
938 TARGET is the target of the MODE command. This may be a channel or
939 a user. If it is a user, it may be the bot.
941 MODES is the MODE string.
943 -- Function: hooks/message nick message
944 This hook is called when someone sends a private message to the
947 NICK is the nickname of the user who sent the message.
949 MESSAGE is the message the user sent.
951 -- Function: hooks/notice nick message
952 This hook is called when a user send a private notice to the bot.
954 NICK is the user who sent the notice.
956 MESSAGE is the message the user sent.
958 -- Function: hooks/public nick channel message
959 This hook is called when a user sends a normal message to a
962 NICK is the user who sent the message.
964 CHANNEL is the channel to which the message was sent.
966 MESSAGE is the message that was sent.
968 -- Function: hooks/public-notice nick channel message
969 This hook is called when a user send a notice to a channel.
971 NICK is the user who sent the notice.
973 CHANNEL is the channel to which the notice was sent.
975 MESSAGE is the message that was sent.
977 -- Function: hooks/raw raw-message
978 This hook is called every time a message is received. This matches
979 on the raw message text and passes the hook function the raw IRC
982 RAW-MESSAGE is the raw IRC message.
984 -- Function: hooks/topic nick channel new-topic
985 This hook is called when a user changes the topic in a channel.
987 NICK is the user who set the topic. This may be the bot.
989 CHANNEL is the channel that's topic was changed.
991 NEW-TOPIC is the new topic.
994 File: bobot++.info, Node: Sent Message Hooks, Next: DCC CHAT Hooks, Prev: Received Message Hooks, Up: Hook Types
996 4.2.2.2 Sent Message Hooks
997 ..........................
999 These hooks are called when the bot sends a message. MYNICK is always
1000 the bot's nick and will not be documented in each hook description.
1002 -- Function: hooks/send/public mynick channel message
1003 This hook is called when the bot sends a normal message to a
1006 CHANNEL is the channel to which the bot sent the message.
1008 MESSAGE is the message the bot sent.
1010 -- Function: hooks/send/message mynick to message
1011 This hook is called when the bot sends a private message to a user.
1013 TO is the nick of the user to whom the message was sent.
1015 MESSAGE is the message that was sent.
1017 -- Function: hooks/send/action mynick to message
1018 This hook is called when the bot sents an action to a channel or a
1021 TO is the channel or nick of the user to which the action was sent.
1023 MESSAGE is the text of the action.
1025 -- Function: hooks/send/ctcp mynick to command message
1026 This hook is called when the bot sends a CTCP message _other than_
1027 an ACTION to a channel or user.
1029 TO is the channel or nick of the user to which the CTCP was sent.
1031 COMMAND is the CTCP command that was sent.
1033 MESSAGE is a string containing the arguments to the CTCP command.
1035 -- Function: hooks/send/who who
1036 This is called when the bot sends a WHO message. The regex is
1037 matched on WHO, which is also passed as the only argument to your
1040 WHO is the channel or nick that was WHOed.
1042 -- Function: hooks/send/whois nick
1043 This is called when the bot sends a WHOIS message. The regex is
1044 matched on NICK, which is also passed as the only argument to your
1047 NICK is the nickname of the person who was WHOISed.
1050 File: bobot++.info, Node: DCC CHAT Hooks, Next: Miscellaneous Hooks, Prev: Sent Message Hooks, Up: Hook Types
1052 4.2.2.3 DCC CHAT Hooks
1053 ......................
1055 These hooks are called when a user initializes a DCC CHAT and when the
1056 bot receives messages from the user in a DCC CHAT.
1058 -- Function: hooks/dcc/chat-begin from
1059 This hook is called when a user begins a DCC CHAT with the bot.
1060 FROM is the user's address in the form `nick!user@host'.
1062 -- Function: hooks/dcc/chat-end address
1063 This hook is called when a DCC CHAT is purged after being idle for
1064 a while, or when the user closes the DCC CHAT. As such, you cannot
1065 write any more data to the DCC CHAT.
1067 ADDRESS is the address (nick!user@host) of the person on the other
1070 -- Function: hooks/dcc/chat-message from message
1071 This hook is called when a user sends a message to the bot through
1074 FROM is the user's address in the form `nick!user@host'.
1076 MESSAGE is the message the user sent to the bot.
1079 File: bobot++.info, Node: Miscellaneous Hooks, Prev: DCC CHAT Hooks, Up: Hook Types
1081 4.2.2.4 Miscellaneous Hooks
1082 ...........................
1084 -- Function: hooks/flood nick
1085 This hook is called when a user is detected flooding the bot.
1087 NICK is the nickname of the user flooding the bot.
1089 -- Function: hooks/timer time
1090 This hook is called once a minute. The regex is *not* used.
1092 TIME is the in zero-padded `hh:mm' format.
1095 File: bobot++.info, Node: Sending Messages, Next: Misc Scripting Stuff, Prev: Hooks, Up: Scripting
1097 4.3 Sending Messages
1098 ====================
1100 There are several types of messages you can send with Bobot++ from
1101 scripts. They are split into High and Low level message sending
1102 functions. Most bots will only use the high level functions, but the
1103 low level ones are provided for when a bot needs to do things like send
1104 raw IRC messages or CTCP commands.
1108 * High Level Message Functions::
1109 * Low Level Message Functions::
1112 File: bobot++.info, Node: High Level Message Functions, Next: Low Level Message Functions, Prev: Sending Messages, Up: Sending Messages
1114 4.3.1 "High Level" Message Functions
1115 ------------------------------------
1117 -- Function: bot:say channel message
1118 Send a public or private MESSAGE to CHANNEL.
1120 Sends a normal text message, as if a user had typed it in. The
1121 DEST can be a nickname or a channel.
1123 -- Function: bot:action channel message
1124 Send an "action" type MESSAGE to CHANNEL
1126 -- Function: bot:msg target message
1127 -- Function: bot:say target message
1128 Send a public or private message to TARGET.
1130 TARGET may be a channel or a nickname.
1132 In versions of Bobot++ prior to 2.1.8 `bot:say' could only send to
1133 channels, and `bot:msg' could only send private messages to users.
1134 They are aliases of the same command now, but it may be worth
1135 using them as they used to for clarity.
1137 -- Function: bot:notice target message
1138 Sends MESSAGE as a NOTICE to TARGET. TARGET may be a user (nick)
1142 File: bobot++.info, Node: Low Level Message Functions, Prev: High Level Message Functions, Up: Sending Messages
1144 4.3.2 "Low Level" Message Functions
1145 -----------------------------------
1147 The "Low Level" messaging functions allow you to do things like send
1148 CTCP messages. You probably want to read rfc 2812 and the CTCP spec
1149 before using these. If you have no idea what these do, read rfc 2812
1150 (IRC Client Protocol) and CTCP spec. These functions all return
1151 `*unspecified*' always, so don't use the return value for anything.
1153 -- Function: bot:ctcp to command message
1154 TO is the target of your CTCP message, COMMAND is the CTCP
1155 command, and MESSAGE is the message (or arguments) of the command.
1156 Make sure to `bot:ctcp-quote' the message!
1158 -- Function: bot:ctcp-reply to command message
1159 TO is the target of your CTCP reply, COMMAND is the CTCP command,
1160 and MESSAGE is the message (or arguments) of the command. Make
1161 sure to `bot:ctcp-quote' the message!
1163 This is used to reply to a ctcp that the bot has received.
1166 File: bobot++.info, Node: Misc Scripting Stuff, Next: Scheme Commands, Prev: Sending Messages, Up: Scripting
1168 4.4 Misc. Scripting Stuff
1169 =========================
1171 These are a few useful things that I thought people writing scripts
1174 If you want to execute code when the bot exits, just do `add-hook!
1175 bot:exit-hook THUNK' where THUNK is an argumentless procedure (a
1176 thunk). When the bot exits your thunk will be called.
1184 File: bobot++.info, Node: Scheme Commands, Next: Query Functions, Prev: Misc Scripting Stuff, Up: Scripting
1189 These scheme functions are the same as the commands. They allow you to
1190 execute bot commands from scheme scripts.
1192 -- Function: bot:adduser nick-or-mask cbannel-mask level prot auto-op
1193 Adds an user to the userlist, for a `nick!user@host' matching the
1194 one given, on a channel matching the CHANNELMASK given.
1196 The LEVEL can be: The PROT can be: The AUTO-OP can be:
1197 0 - No level 0 - No protection 0 - No auto-op
1198 1 - User 1 - No ban 1 - Op on join
1199 2 - Trusted User 2 - No kick
1200 3 - Friend 3 - No deop
1204 -- Function: bot:addserver hostname ip-address [portnumber]
1205 Adds the server specified by HOSTNAME or IP-ADDRESS to the server
1208 -- Function: bot:addshit nick-or-mask channel-mask level [time reason]
1209 Adds an user to the shitlist, for a nick!user@host matching the
1210 one given, on a channel matching the CHANNELMASK given.
1215 2 - Kick and Ban on join
1216 3 - Kick and Ban on join, no deban
1219 -- Function: bot:ban channel mask-or-nick
1220 Bans MASK or NICK from CHANNEL. You need to be a trusted user to
1223 -- Function: bot:change-command-level nick-or-mask channel-mask
1225 Gives NICK or MASK level NEW-LEVEL on channel(s) CHANNEL-MASK.
1226 Note that you can not change level for someone whose level is
1227 greater than yours, and that you can not give a level greater than
1230 -- Function: bot:cycle channel
1231 Makes the bot leave and join CHANNEL.
1233 -- Function: bot:deban channel mask-or-nick
1234 Debans MASK or NICK from CHANNEL. You need to be a trusted user to
1237 -- Function: bot:delserver server-number
1238 Deletes server from server list whose number in the server list is
1241 -- Function: bot:deluser nick-or-mask channel-mask
1242 Removes NICK or MASK from the userlist.
1244 -- Function: bot:delshit nick-or-mask channel-mask
1245 Removes NICK or MASK from the shitlist.
1247 -- Function: bot:deop channel mask-or-nick
1248 Deops MASK or NICK on CHANNEL.
1250 -- Function: bot:die reason
1251 Makes the bot stop immediately.
1253 -- Function: bot:do ?
1255 -- Function: bot:invite channel nick
1256 Invites NICK on CHANNEL.
1258 -- Function: bot:join channel
1259 Makes the bot join CHANNEL.
1261 -- Function: bot:keep channel modes
1262 Sets the MODES that the bot will keep for CHANNEL. See also STATS.
1264 -- Function: bot:kick channel mask-or-nick [reason]
1265 Kicks MASK or NICK out of CHANNEL, because of REASON. You need to
1266 be a trusted user to use a MASK.
1268 -- Function: bot:kickban channel mask-or-nick [reason]
1269 Bans then kicks MASK or NICK out of CHANNEL, because of REASON.
1270 You need to be a trusted user to use a MASK.
1272 -- Function: bot:lock channel
1273 Locks topic on CHANNEL.
1275 -- Function: bot:mode channel mode-string
1276 Sends MODE-STRING as mode for CHANNEL.
1278 -- Function: bot:nextserver
1279 Makes the bot connect to the next server in its server list.
1281 -- Function: bot:nick nick
1282 Makes the bot use nickname NICK.
1284 -- Function: bot:op channel nick
1285 Ops NICK on CHANNEL.
1287 -- Function: bot:part channel
1288 Makes the bot leave CHANNEL.
1290 -- Function: bot:reconnect
1291 Makes the bot reconnect to its current server.
1293 -- Function: bot:server server-number
1294 Select the server to connect to. SERVER-NUMBER is the number of
1295 the server in the serverlist.
1297 -- Function: bot:setfloodrate ?
1299 -- Function: bot:setversion ?
1301 -- Function: bot:tban channel nick-or-mask time
1302 Bans NICK or MASK from CHANNEL for TIME seconds.
1304 -- Function: bot:tkban channel nick-or-mask time [reason]
1305 Bans NICK or MASK from CHANNEL for TIME seconds, then kicks
1306 him/them because of REASON.
1308 -- Function: bot:topic channel topic
1309 If no TOPIC is given, prints CHANNEL's topic. Otherwise, the bot
1310 will change CHANNEL's topic to TOPIC.
1312 -- Function: bot:unlock channel
1313 Makes the bot unlock topic on CHANNEL.
1315 -- Function: bot:who target
1316 Sends a WHO command to TARGET. TARGET may be either a channel or a
1319 -- Function: bot:whois nick
1320 Sends a WHOIS command to NICK. NICK *must* be a nickname, you
1321 cannot send a WHOIS to a channel.
1323 -- Function: bot:delcommand
1324 [ Probably deletes a command added with `bot:addcommand' ? ]
1327 File: bobot++.info, Node: Query Functions, Prev: Scheme Commands, Up: Scripting
1332 [ I didn't know where to put any of these, so I just stuck them in
1335 There probably needs to be several sections added, like dealing
1336 with users (kicking, added, etc), dealing with the bot (channels,
1337 nickname of the bot, etc), server issues (serverlist), useful
1338 tools (nslookup, whois), and do on. ]
1340 These functions allow scripts to get various bits of information.
1342 -- Function: bot:logport
1343 [ Probably returns the log port? ]
1345 -- Function: bot:getnickname
1346 [ Gets the bot's nickname? ]
1348 -- Function: bot:getserver
1350 -- Function: bot:getserverlist
1352 -- Function: bot:flush
1353 [ Flushes the socket to the server? ]
1355 -- Function: bot:flushport
1356 [ Flushes the log port? ]
1358 -- Function: bot:random ?
1359 [ Returns a random number? What range? Why? ]
1361 -- Function: bot:addtimer ? ?
1363 -- Function: bot:deltimer ?
1365 -- Function: bot:dcc-chat-send ? ?
1367 [ And what about the stuff defined in `bobot-utils.scm' ? I just
1368 added it here so it could be somewhere. There should also be a
1369 section dealing with modules. How to use them. What module
1370 scripts are in. What module bobot++ provided primites are in.
1373 -- Function: bot:log . messages
1374 Write as many MESSAGES as you want to the log. If the arg is a
1375 thunk it will be executed and it's output will be written to the
1378 -- Function: bot:load file
1380 -- Function: bot:load-module module-spec
1382 -- Function: bot:use-module module-spec
1384 -- Function: bot:match-not-channel regex
1385 `bot:match-not-channel' adds a prefix regex to your REGEX so it
1386 doesn't match the sender or channel in a PUBLIC message
1388 -- Function: bot:match-to-me regex
1389 `bot:match-to-me' matches text that was addressed to the bot with a
1390 ':', ',', or nothing after the bot name.
1392 -- Function: bot:sent-to-me? message
1394 -- Function: bot:ctcp-quote message
1395 Returns the CTCP quoted message Input _MUST NOT_ contain the
1396 trailing `\r\n' (it is added by the message sending code).
1398 -- Variable: %bot:loadpath
1400 -- Function: %bot:load-extensions
1403 File: bobot++.info, Node: Concept Index, Next: Function Index, Prev: Scripting, Up: Top