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::
76 * Adding New Commands::
79 * Misc Scripting Stuff::
88 * Received Message Hooks::
89 * Sent Message Hooks::
91 * Miscellaneous Hooks::
95 * High Level Message Functions::
96 * Low Level Message Functions::
99 File: bobot++.info, Node: Introduction, Next: Configuration, Prev: Top, Up: Top
104 Bobot++ is a powerful IRC bot written in C++. It can be used standalone
105 as a channel maintenence bot, or extended to do almost anything using
108 FIXME: Fill the intro in more?
111 File: bobot++.info, Node: Configuration, Next: Using the Bot, Prev: Introduction, Up: Top
116 Bobot++ is easy to configure. See the `examples' directory for an
117 example configuration.
119 The main configuration file is `bot.conf'. There are several
120 auxiliary configuration files (a user list, aliases file, ban list, and
125 * Configuration File Placement::
126 * Configuration Files::
129 File: bobot++.info, Node: Configuration File Placement, Next: Configuration Files, Prev: Configuration, Up: Configuration
131 2.1 Configuration File Placement
132 ================================
134 Bobot++ will look in `/etc/bobotpp/default/' for its default config if
135 none is specified on the command line. Put the configuration files you
136 want to be loaded by default in this directory. If you are not root, or
137 you want to have your own personal configuration, put it in
138 `~/.bobotpp/config/default/'.
141 File: bobot++.info, Node: Configuration Files, Prev: Configuration File Placement, Up: Configuration
143 2.2 Configuration Files
144 =======================
155 File: bobot++.info, Node: bot.conf, Next: bot.users, Prev: Configuration Files, Up: Configuration Files
160 `bot.conf' contains key value pairs separated by `='.
164 Comments are started with a `#' and cause the entire line to be
165 ignored. _Note that this only works when the `#' is the first character
168 bot.conf is the main configuration file for a Bobot++. The available
169 configuration variables are listed below in the format "VARIABLE
170 <default-value>: description"
172 A few of the options have more complex syntax, they are documented in
173 their own subsections.
180 * MAXNICKLENGTH <9>: The maximum length a valid nickname may be.
181 This should be set before setting the bot's nickname if it will be
182 more than nine characters long. Most IRC servers support nicknames
183 longer than nine characters, but Bobot++ still follows the old spec
184 and defaults to nine.
186 * NICKNAME <Bobot>: The nickname of the bot (NICK is an alias for
189 * USERNAME <bobot>: The IRC username of the bot
191 * CMDCHAR <!>: The character that prefixes commands given to the bot
192 (COMMAND is an alias for CMDCHAR)
194 * IRCNAME <I'm a bobot++!>: The IRC name (or 'real name') of the bot
195 (REALNAME is an alias for IRCNAME)
197 * USERLIST <bot.users>: Name of the file where the userlist is stored
199 * AUTOEXECFILE <bot.autoexec>: Name of the file containing Scheme
200 code to be executed when the bot starts (only used if the bot is
201 compiled with scripting support)
203 * INITFILE <bot.init>: Name of the file containing the default
206 * SHITLIST <bot.shit>: Name of the file where the shitlist (ban
209 * LOGFILE <$LOGDIR/bot.log>: Location of the bot logfile (set this
210 to `/dev/null' to disable logging).
212 * SERVER <None>: This specifies the server to which the bot will
213 connect. Note that this has a special syntax *note server syntax::.
215 * CHANNEL <None>: This specifies the channels the bot will join when
216 it starts up. This has a special syntax *note channel syntax::.
220 File: bobot++.info, Node: server syntax, Next: channel syntax, Prev: bot.conf, Up: bot.conf
222 2.2.1.1 server syntax
223 .....................
225 The server syntax in `bot.conf' allows you to specify an alternate port
226 to connect on, and a password to send the server.
228 You may use more than one server line; Bobot++ will attempt to
229 connect to the first one, and will connect to the next one in the list
230 if it fails. The bot will continue cycling through the server list
231 until it is able to connect to one. There is a command (`!cycle') to
232 make the bot to cycle servers.
234 SERVER = SERVER_NAME [PORT [PASSWORD]]
236 This will make Bobot++ attempt to connect to SERVER_NAME on port
237 PORT with the password PASSWORD. SERVER_NAME should be the address of
238 the server. PORT and PASSWORD are optional.
241 File: bobot++.info, Node: channel syntax, Prev: server syntax, Up: bot.conf
243 2.2.1.2 channel syntax
244 ......................
246 The channel syntax in `bot.conf' allows you to specify the initial
247 modes the bot should set on a channel, the modes the bot should
248 maintain, and a key if the channel needs it.
250 You may have any number of channel lines. When Bobot++ starts it will
251 attempt to join and gain operator status in every channel listed.
253 CHANNEL = NAME:INITIAL_MODES:MODES_TO_KEEP:CHANNEL_KEY
255 The bot will join NAME and set the channel modes to INITIAL_MODES
256 (e.g. "nt") if it is able to gain operator status. It will then
257 maintain MODES_TO_KEEP. If the channel requires a key to enter simply
258 set CHANNEL_KEY. Every argument except for NAME is optional.
262 CHANNEL = #foo:nt:nt:bar
264 The bot will join `#foo' with the channel key `bar' and will then
265 maintain the modes `nt'.
269 The bot will join `#bar' and will not set any modes nor will it
270 attempt to maintain any modes.
273 File: bobot++.info, Node: bot.users, Next: bot.init, Prev: bot.conf, Up: Configuration Files
275 2.2.2 bot.users (User List)
276 ---------------------------
278 `bot.users' is the default file name of the userlist. It may be changed
279 in `bot.conf' via the USERLIST option. *You must add an entry for
280 yourself manually.* You will probably want to add other entries using
281 the IRC command interface as it is more intuitive than editing the file
284 The file contains lines with the format:
286 `HOST_MASK:CHANNEL_MASK:LEVEL:PROTECTION:AUTO-OP:EXPIRATION:PASSWORD'
288 * HOST_MASK is the host mask (e.g. `*!*username
289 .domain.com') of the user
291 * CHANNEL_MASK is a channel mask of the channels that the user has
292 priviliges to use the bot in (e.g. `*' for all channels, `#*' for
293 all non-local channel, `#foo*' for all channels starting with
294 "foo," `#bar' for channel "#bar" only, etc.)
296 * LEVEL is the user level of the user (*Note User Levels::).
298 * PROTECTION is the protection level of the user (*Note
301 * AUTO-OP is set to control whether a user is automatically given
302 operator priviliges on channel entry (*Note Automatic Op::).
304 * EXPIRATION is the UNIX timestamp of when the user entry becomes
305 invalid. Setting this to -1 will make the entry permanent.
307 * PASSWORD is the password the user must supply to the bot to
308 authenticate. This can be set to `*NONE*' to not have a password.
312 File: bobot++.info, Node: bot.init, Next: bot.autoexec, Prev: bot.users, Up: Configuration Files
314 2.2.3 bot.init (Command Aliases)
315 --------------------------------
317 This file stores a list of IRC command aliases. The filename may be
318 changed in `bot.conf' via the INITFILE option. You use this file to set
319 up aliases for IRC commands, e.g. to make `!a' call `!adduser'. This
320 way you can save typing for commonly used commands.
322 The format of a line in the file is: ALIAS COMMAND
324 This will make ALIAS call COMMAND. e.g. `t topic' will make `!t New
325 Topic' set the current channel's topic to "New Topic," just as if you
326 had used `!topic New Topic'.
329 File: bobot++.info, Node: bot.autoexec, Next: bot.shit, Prev: bot.init, Up: Configuration Files
331 2.2.4 bot.autoexec (Scheme Init File)
332 -------------------------------------
334 This file is only used when Bobot++ is compiled with scripting support.
335 The name of the autoexec file can be changed in `bot.conf' via the
338 The contents of this file are evaluated by Guile when the bot
339 starts. You can use this to do things like loading a few default
340 modules when the bot starts.
343 File: bobot++.info, Node: bot.shit, Prev: bot.autoexec, Up: Configuration Files
345 2.2.5 bot.shit (Ban/Shit List)
346 ------------------------------
348 This file stores the ban list. The name may be changed in `bot.conf'
349 via the SHITLIST option. You will most likely want to use the IRC
350 command interface to edit this file instead of editing it directly.
352 The file contains lines in the form:
354 `HOST_MASK:CHANNEL_MASK:LEVEL:EXPIRATION:REASON'
356 * HOST_MASK is the host mask (e.g. `*!*username
357 .domain.com') of the user
359 * CHANNEL_MASK is a channel mask of the channels that the user is
360 banned on (e.g. `*' for all channels, `#*' for all non-local
361 channel, `#foo*' for all channels starting with "foo," `#bar' for
362 channel "#bar" only, etc.
364 * LEVEL is a number specifying if the bot should not allow the user
365 to gain ops, to kick the user upon joining, or to prevent the user
366 from being debanned by other users. *Note Shit Levels:: for
367 information on the available levels.
369 * EXPIRATION is the UNIX timestamp of when the shit entry becomes
370 invalid. This may be set to -1 to make it valid forever.
372 * REASON is text that is sent to the user when they are kicked or
373 banned from the channel.
377 File: bobot++.info, Node: Using the Bot, Next: Scripting, Prev: Configuration, Up: Top
382 Using Bobot++ is easy. This chapter covers starting the bot, a few
383 Bobot++ specific concepts, and using the built-in commands of the bot.
389 * Built-In Commands::
392 File: bobot++.info, Node: Starting the Bot, Next: Concepts, Prev: Using the Bot, Up: Using the Bot
397 The bot is usually installed with the binary name `bobotpp'. It accepts
398 the following command line arguments.
400 * `[--help][-h]' - Shows detailed help and exits
402 * `[--version][-v]' - Shows version information and exits
404 * `[--no-background][-b]' - Run bobot++ in the foreground
406 * `[--config-file file][-f]' - Use file instead of `bot.conf'
408 * `[--config-dir dir][-d]' - Use dir as dir to load config file from
410 * `[--config dir][-c]' - Search your config path (defaults to
411 `$HOME/.bobotpp/config/' and then `/etc/bobotpp/') for dir and
412 then loads your config data using dir
414 * `[--sys-config dir][-s]' - Looks for config in `/etc/bobotpp/dir'.
415 Note that the user dir is still searched first
417 * `[--user-config dir][-u]' - Looks for config in
418 `$HOME/.bobotpp/config/dir/'. Note that the system dir is still
419 searched after this if dir is not found.
421 * `[--debug][-D]' Makes Bobot++ print debugging info and run in the
424 * `[--debug-scripts][-S]' Enables the Guile debugging evaluator for
425 verbose script errors and backtraces while still running the bot
428 The default configuration is read from
429 `$HOME/.bobotpp/config/default/' and then `/etc/bobotpp/default/' if
430 the user config is not found.
432 The bot defaults to running in the background as a daemon.
435 File: bobot++.info, Node: Concepts, Next: Built-In Commands, Prev: Starting the Bot, Up: Using the Bot
440 There are a few general concepts that a user of Bobot++ should know
451 File: bobot++.info, Node: User Levels, Next: Protection, Prev: Concepts, Up: Concepts
456 There are several user levels available in Bobot++ to provide gradated
457 access to commands. `!adduser' and `bot.users' use the numeric code;
458 Scheme uses the textual name for the level. By default (if the user is
459 not found in the userlist) a user has access to commands with the level
462 0. `bot:user-none' - No *built-in* commands may be executed _by
463 default_ (commands may be added from Scheme that can be executed
464 by users of level none and the level required to execute a command
465 may be changed from Scheme).
467 1. `bot:user-user' - Will be able to execute most commands but not
468 all and cannot use masks on kicks and bans.
470 2. `bot:user-trusted' - For built-ins with a default configuration
471 this user has access to the same set of commands as an `user' but
472 may use masks on kicks and bans. Scheme commands may be added
473 which require a user to be of this level.
475 3. `bot:user-friend' - In the default configuration a user who is a
476 friend will be able to do everything short of stopping the bot.
477 Again, there may be user added commands that require a higher user
480 4. `bot:user-master' - This is the highest user level and has access
481 to every feature of the bot.
485 File: bobot++.info, Node: Protection, Next: Automatic Op, Prev: User Levels, Up: Concepts
490 A user added via Scheme, the `bot.users' file, or `!adduser' may be
491 protected from being deoped, kicked, or banned. The user list and IRC
492 commands use the numeric codes, Scheme uses the symbolic names.
494 0. `bot:protection/none' No protection
496 1. `bot:protection/no-ban' No ban. If a user is banned the bot will
499 2. `bot:protection/no-kick' No kick. The user may still be kicked but
500 the bot will kickban the user who kicked the protected user.
502 3. `bot:protection/no-deop' No deop. The bot will ensure that the
503 user always maintains operator status.
506 File: bobot++.info, Node: Automatic Op, Next: Shit Levels, Prev: Protection, Up: Concepts
511 A user may be automatically given operator status upon entering a
512 channel. Scheme uses the symbolic name, the user list (`bot.users') and
513 IRC commands use the numeric value.
515 0. `bot:aop/no' Do not automatically op the user
517 1. `bot:aop/yes' Do automatically op the user
520 File: bobot++.info, Node: Shit Levels, Prev: Automatic Op, Up: Concepts
525 The shit list and shit list related commands use different levels to
526 define how much the bot hates a user. Scheme uses the symbolic names,
527 the shit list and IRC commands use the numbers.
529 0. `bot:shit/none' The bot doesn't hate the user (this is the normal
532 1. `bot:shit/no-op' The bot will deop the user any time he gains
533 operator priviliges in the channel
535 2. `bot:shit/no-join' The bot will kick and ban the user when he
538 3. `bot:shit/no-deban' The bot will kick and ban usre when he joins
539 the channel, and will prevent other users from debanning him.
542 File: bobot++.info, Node: Built-In Commands, Prev: Concepts, Up: Using the Bot
544 3.3 Built-In Commands
545 =====================
547 Bobot++ has many built-in commands that make it useful without
548 scripting support. The reference leaves off the command char; remember
549 to use whatever you defined the command char to be in `bot.conf'. If a
550 command needs the channel name then you must specify the channel as the
551 first argument to the command when private messaging the bot a command.
553 COMMAND NEEDS MIN LEVEL DESCRIPTION
555 `action' `do' Yes USER Causes the bot to perform the
556 action `do' in the current channel.
558 `addserver' Adds the server specified by HOST
559 NAME or IP ADDRESS to the server
562 `alias' Makes an alias, and adds the
563 function NEW NAME, that will do
564 exactly the same command as OLD
566 `ban' Bans MASK or NICK from CHANNEL. You
567 need to be a trusted user to ban
570 `channels' Prints the channel(s) where the bot
572 `cycle' Yes Makes the bot leave and join
574 `dcclist' Gives the list of all DCC Chat
576 `deban' Yes Debans MASK or NICK from CHANNEL.
577 You need to be a trusted user to
579 `delserver' Deletes server from server list
580 whose number in the server list is
582 `deluser' Removes NICK or MASK from the
584 `delshit' Removes NICK or MASK from the
586 `deop' Yes Deops MASK or NICK on CHANNEL.
587 `die' Makes the bot stop immediately.
589 `execute' *Only available if scripting
592 `ident' Identifies you on the bot. Note
593 that you should not use this
594 command in public ...
595 `invite' Yes Invites NICK on CHANNEL.
596 `join' Makes the bot join CHANNEL.
597 `keep' Yes Sets the MODES that the bot will
599 `kick' Yes Kicks MASK or NICK out of CHANNEL,
600 because of REASON. You need to be a
601 trusted user to use a MASK.
602 `kickban' Yes Bans then kicks MASK or NICK out of
603 CHANNEL, because of REASON. You need
604 to be a trusted user to use a MASK.
605 `load' Reloads the userlist from disk.
606 `loadscript' *Only available if scripting
608 `lock' Locks topic on CHANNEL.
609 `mode' Yes Sends MODE STRING as mode for
612 `names' Yes Shows the nicknames and status of
614 `nextserver' Makes the bot connect to the next
615 server in its server list.
616 `nick' Makes the bot use nickname NICK.
617 `nslookup' Does a nameserver query about NICK
618 host, HOST or IP ADDRESS.
619 `op' Yes Ops NICK on CHANNEL.
620 `part' Yes Makes the bot leave CHANNEL.
621 `password' Changes your password on the bot.
622 Use `NONE' as password if you want
623 to clear it. Do not use this
625 `reconnect' Makes the bot reconnect to its
627 `rspymessage' Removes you from the spy list.
628 `save' Saves the userlist.
629 `say' Yes Makes the bot say MESSAGE on
631 `server' Select the server to connect to.
632 SERVER NUMBER is the number of the
633 server in the serverlist.
634 `serverlist' Shows the bot's serverlist.
637 `shitlist' Shows the bot's shitlist.
638 `spylist' Shows the bot's spylist.
639 `spymessage' Adds you to the spylist
640 `stats' Yes Gives CHANNEL's statistics.
641 `tban' Yes Bans NICK or MASK from CHANNEL for
643 `tkban' Yes Bans NICK or MASK from CHANNEL for
644 TIME seconds, then kicks him/them
646 `topic' Yes If no TOPICis given, prints
647 CHANNEL's topic. Otherwise, the bot
648 will change CHANNEL's topic to
650 `unlock' Yes Makes the bot unlock topic on
652 `userlist' Shows the bot's userlist
653 `who' Yes Show your level on CHANNEL
654 `whois' Yes Shows information about NICK on
658 File: bobot++.info, Node: Scripting, Next: Concept Index, Prev: Using the Bot, Up: Top
663 Bobot++'s most powerful feature is its scripting system. You write
664 scripts using Guile Scheme. This manual does not cover how to use Guile
665 or how to learn Scheme. *Note Guile Reference Manual: (guile)Top, for
666 the Guile reference manual and
667 `http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html' for a
668 good tutorial on Scheme.
670 Note that in previous versions the scripting commands where in the
671 form `bot-FUNCTION'. They are now in the form `bot:FUNCTION'. The old
672 names are still available, but are deprecated and will be removed in
673 Bobot++ 3.0. New commands are only available with the `bot:' prefix.
674 The command `perl -pi -e ``s/bot-/bot:/g'' YOUR-FILES' should be enough
675 to convert your code to use the new functions.
677 *NOTE*: All arguments to functions and hooks called by the bot are
678 strings unless otherwise specified.
682 * Adding New Commands::
685 * Misc Scripting Stuff::
688 File: bobot++.info, Node: Adding New Commands, Next: Hooks, Prev: Scripting, Up: Scripting
690 4.1 Adding New Commands
691 =======================
693 Adding a new command is simple. To register a new command use
696 -- Function: bot:addcommand name func needs-channel? num-of-args
698 The NAME is a string representing the name of the command being
699 added. FUNC is a function accepting NUM-OF-ARGS arguments.
700 NEEDS-CHANNEL? is a bool that is true if the function needs the
701 channel name as its first arg, and false otherwise. NUM-OF-ARGS
702 is the number of args FUNC will take and must be within zero (0)
703 and twenty (20). MIN-LEVEL is one of the *Note User Levels::. A
704 user must be at least a MIN-LEVEL user to use the new command.
705 None of the arguments are guaranteed to be passed; if they aren't
706 they are set to the empty string `""'. An example of a new
709 (define (hello channel name)
710 (if (string=? name "")
711 (bot:say channel "Hello world!")
712 (bot:say channel (string-append "Hello " name "!")))
714 (bot:addcommand "hello" hello #t 2 0)
716 This will display "Hello World!" if called as `!hello' and "Hello
717 World USER" if called as `!hello USER'.
720 File: bobot++.info, Node: Hooks, Next: Sending Messages, Prev: Adding New Commands, Up: Scripting
725 Hooks are a powerful feature of Bobot++. Hooks are a hybrid of ircII
726 and tiny fugue (a MUD bot) hooks with a little bit of extra stuff added
727 in. A hook is called when a regular expression is matched against a
728 message sent to or by the bot.
730 Bobot++ uses different hook types for each IRC message type, and also
731 includes a hook for accessing raw irc messages. Hooks are tagged with a
732 priority and a flag that specifies whether to call the next hook that
733 matches after calling the current one or to stop processing.
735 Hooks are processed from the highest to lowest priority, with
736 fallthrough hooks of equal priority to non-fallthrough hooks being
745 File: bobot++.info, Node: Creating a Hook, Next: Hook Types, Prev: Hooks, Up: Hooks
747 4.2.1 Creating a Hook
748 ---------------------
750 To add a new hook you use the function `bot:addhook'.
752 -- Function: bot:addhook type regex function [pri fall name]
753 TYPE specifies the type of hook (the types of hooks are listed in
756 REGEX is a standard regular expression. If REGEX is matched,
757 FUNCTION will be called.
759 FUNCTION will take a different number of args depending on the
762 PRI specifies the priority of the hook--higher priority hooks are
763 executed first. This argument is optional and defaults to `0'.
765 FALL is `#t' if the hook is a fallthrough hook and `#f' is the
766 hook is not a fallthrough hook. This arg is also optional and
769 NAME is the optional name of the hook that defaults to
770 `"DEFAULT"'. If you set the name then you can have more than one
771 hook that matches the same regexp, as long as they have the same
772 name. E.g. in a log script you could have the regexps for the log
773 function all be `".*"' and set their names to `"log"' to avoid a
774 conflict with other hooks.
777 File: bobot++.info, Node: Hook Types, Prev: Creating a Hook, Up: Hooks
782 The following sections document the different hooks Bobot++ exposes.
784 The general format of each hook description is as if it were a
785 function to be defined, but these describe the function to be passed to
786 `bot:add-hook'. Do _not_ name your functions these names.
788 That said, here is the list of available hooks functions. FIXME:
793 * Received Message Hooks::
794 * Sent Message Hooks::
796 * Miscellaneous Hooks::
799 File: bobot++.info, Node: Received Message Hooks, Next: Sent Message Hooks, Prev: Hook Types, Up: Hook Types
801 4.2.2.1 Receieved Message Hooks
802 ...............................
804 The following hooks are triggered when a mesage is received by the bot.
806 -- Function: hooks/action from to action
807 This hook is triggered when someone performs an action.
809 FROM is the nickname the person that performed the action.
811 TO is the target of the action, which is either a channel or the
812 Bot's nick if the user private messages the bot.
814 ACTION is the text of the action. E.g. if someone did `* foobar
815 does baz', then ACTION would be the string `"does baz"'.
817 -- Function: hooks/nickname old-nick new-nick
818 This hook is called when someone changes his nickname from
819 OLD-NICK to NEW-NICK.
821 -- Function: hooks/signoff nick message
822 This hook is called when someone signs off of IRC.
824 NICK is the nickname of the person signing off.
826 MESSAGE is his quit message
828 -- Function: hooks/ctcp nick to command rest
829 This hook is called when a CTCP request is received by the bot.
831 NICK is the nickname of the sender.
833 TO is the target of the CTCP request. This will either be a
834 channel the bot is in, or the nickname of the bot.
836 COMMAND is the CTCP command issued.
838 REST contains the arguments to the CTCP command.
840 -- Function: hooks/ctcp-reply nick command rest
841 This hook is called when a CTCP REPLY is received. This occurs when
842 the bot has sent a CTCP request to another client. The CTCP REPLY
843 is always addressed to the bot directly.
845 NICK is the nickname of the person who replied.
847 COMMAND is the command to which NICK is replying.
849 REST contains the body of the reply.
851 -- Function: hooks/disconnect server intentional
852 This is called when the bot is disconnected from a server.
854 SERVER is the hostname of the server from which the bot was
857 INTENTIONAL is a flag set to `#t' when the bot disonnected from
858 the server as the result of a command (issued by a user from IRC,
859 SIGHUP, or from a script), or `#f' when the bot disconnected from
860 the server unintentionally..
862 -- Function: hooks/invite nick channel
863 This hook is called when a user invited the bot to join a channel.
865 NICK is the nickname of the user who sent the invite.
867 CHANNEL is the channel to which the bot was invited.
869 -- Function: hooks/join nick channel
870 This is called when a user or the bot joins a channel.
872 NICK is the nickname of the user who joined CHANNEL. This may be
873 the bot's nickname (the IRC server sends the JOIN command back to
874 the the bot after it joins a channel).
876 CHANNEL is the channel that was joined
878 -- Function: hooks/kick target from channel reason
879 This hook is called when a user, including the bot, is kicked out
882 TARGET is the nick of the user who was kicked. This may be the
885 FROM is the nick of the user who issued the kick. This may also be
888 CHANNEL is the channel the kick was issued in.
890 REASON is the reason the user was kicked.
892 -- Function: hooks/part nick channel
893 This hook is called when a user parts a channel.
895 NICK is the user who parted the channel. This may be the bot.
897 CHANNEL is the channel from which the user parted.
899 -- Function: hooks/mode nick target modes
900 This hook is called when someone sets the modes of TARGET.
902 NICK is the user who set the modes. This may be the bot.
904 TARGET is the target of the MODE command. This may be a channel or
905 a user. If it is a user, it may be the bot.
907 MODES is the MODE string.
909 -- Function: hooks/message nick message
910 This hook is called when someone sends a private message to the
913 NICK is the nickname of the user who sent the message.
915 MESSAGE is the message the user sent.
917 -- Function: hooks/notice nick message
918 This hook is called when a user send a private notice to the bot.
920 NICK is the user who sent the notice.
922 MESSAGE is the message the user sent.
924 -- Function: hooks/public nick channel message
925 This hook is called when a user sends a normal message to a
928 NICK is the user who sent the message.
930 CHANNEL is the channel to which the message was sent.
932 MESSAGE is the message that was sent.
934 -- Function: hooks/public-notice nick channel message
935 This hook is called when a user send a notice to a channel.
937 NICK is the user who sent the notice.
939 CHANNEL is the channel to which the notice was sent.
941 MESSAGE is the message that was sent.
943 -- Function: hooks/raw raw-message
944 This hook is called every time a message is received. This matches
945 on the raw message text and passes the hook function the raw IRC
948 RAW-MESSAGE is the raw IRC message.
950 -- Function: hooks/topic nick channel new-topic
951 This hook is called when a user changes the topic in a channel.
953 NICK is the user who set the topic. This may be the bot.
955 CHANNEL is the channel that's topic was changed.
957 NEW-TOPIC is the new topic.
960 File: bobot++.info, Node: Sent Message Hooks, Next: DCC CHAT Hooks, Prev: Received Message Hooks, Up: Hook Types
962 4.2.2.2 Sent Message Hooks
963 ..........................
965 These hooks are called when the bot sends a message. MYNICK is always
966 the bot's nick and will not be documented in each hook description.
968 -- Function: hooks/send/public mynick channel message
969 This hook is called when the bot sends a normal message to a
972 CHANNEL is the channel to which the bot sent the message.
974 MESSAGE is the message the bot sent.
976 -- Function: hooks/send/message mynick to message
977 This hook is called when the bot sends a private message to a user.
979 TO is the nick of the user to whom the message was sent.
981 MESSAGE is the message that was sent.
983 -- Function: hooks/send/action mynick to message
984 This hook is called when the bot sents an action to a channel or a
987 TO is the channel or nick of the user to which the action was sent.
989 MESSAGE is the text of the action.
991 -- Function: hooks/send/ctcp mynick to command message
992 This hook is called when the bot sends a CTCP message _other than_
993 an ACTION to a channel or user.
995 TO is the channel or nick of the user to which the CTCP was sent.
997 COMMAND is the CTCP command that was sent.
999 MESSAGE is a string containing the arguments to the CTCP command.
1001 -- Function: hooks/send/who who
1002 This is called when the bot sends a WHO message. The regex is
1003 matched on WHO, which is also passed as the only argument to your
1006 WHO is the channel or nick that was WHOed.
1008 -- Function: hooks/send/whois nick
1009 This is called when the bot sends a WHOIS message. The regex is
1010 matched on NICK, which is also passed as the only argument to your
1013 NICK is the nickname of the person who was WHOISed.
1016 File: bobot++.info, Node: DCC CHAT Hooks, Next: Miscellaneous Hooks, Prev: Sent Message Hooks, Up: Hook Types
1018 4.2.2.3 DCC CHAT Hooks
1019 ......................
1021 These hooks are called when a user initializes a DCC CHAT and when the
1022 bot receives messages from the user in a DCC CHAT.
1024 -- Function: hooks/dcc/chat-begin from
1025 This hook is called when a user begins a DCC CHAT with the bot.
1026 FROM is the user's address in the form `nick!user@host'.
1028 -- Function: hooks/dcc/chat-end address
1029 This hook is called when a DCC CHAT is purged after being idle for
1030 a while, or when the user closes the DCC CHAT. As such, you cannot
1031 write any more data to the DCC CHAT.
1033 ADDRESS is the address (nick!user@host) of the person on the other
1036 -- Function: hooks/dcc/chat-message from message
1037 This hook is called when a user sends a message to the bot through
1040 FROM is the user's address in the form `nick!user@host'.
1042 MESSAGE is the message the user sent to the bot.
1045 File: bobot++.info, Node: Miscellaneous Hooks, Prev: DCC CHAT Hooks, Up: Hook Types
1047 4.2.2.4 Miscellaneous Hooks
1048 ...........................
1050 -- Function: hooks/flood nick
1051 This hook is called when a user is detected flooding the bot.
1053 NICK is the nickname of the user flooding the bot.
1055 -- Function: hooks/timer time
1056 This hook is called once a minute. The regex is *not* used.
1058 TIME is the in zero-padded `hh:mm' format.
1061 File: bobot++.info, Node: Sending Messages, Next: Misc Scripting Stuff, Prev: Hooks, Up: Scripting
1063 4.3 Sending Messages
1064 ====================
1066 There are several types of messages you can send with Bobot++ from
1067 scripts. They are split into High and Low level message sending
1068 functions. Most bots will only use the high level functions, but the
1069 low level ones are provided for when a bot needs to do things like send
1070 raw IRC messages or CTCP commands.
1074 * High Level Message Functions::
1075 * Low Level Message Functions::
1078 File: bobot++.info, Node: High Level Message Functions, Next: Low Level Message Functions, Prev: Sending Messages, Up: Sending Messages
1080 4.3.1 "High Level" Message Functions
1081 ------------------------------------
1083 -- Function: bot:say channel message
1084 Send a public or private MESSAGE to CHANNEL.
1086 Sends a normal text message, as if a user had typed it in. The
1087 DEST can be a nickname or a channel.
1089 -- Function: bot:action channel message
1090 Send an "action" type MESSAGE to CHANNEL
1092 -- Function: bot:msg target message
1093 -- Function: bot:say target message
1094 Send a public or private message to TARGET.
1096 TARGET may be a channel or a nickname.
1098 In versions of Bobot++ prior to 2.1.8 `bot:say' could only send to
1099 channels, and `bot:msg' could only send private messages to users.
1100 They are aliases of the same command now, but it may be worth
1101 using them as they used to for clarity.
1103 -- Function: bot:notice target message
1104 Sends MESSAGE as a NOTICE to TARGET. TARGET may be a user (nick)
1108 File: bobot++.info, Node: Low Level Message Functions, Prev: High Level Message Functions, Up: Sending Messages
1110 4.3.2 "Low Level" Message Functions
1111 -----------------------------------
1113 The "Low Level" messaging functions allow you to do things like send
1114 CTCP messages. You probably want to read rfc 2812 and the CTCP spec
1115 before using these. If you have no idea what these do, read rfc 2812
1116 (IRC Client Protocol) and CTCP spec. These functions all return
1117 `*unspecified*' always, so don't use the return value for anything.
1119 -- Function: bot:ctcp to command message
1120 TO is the target of your CTCP message, COMMAND is the CTCP
1121 command, and MESSAGE is the message (or arguments) of the command.
1122 Make sure to `bot:ctcp-quote' the message!
1124 -- Function: bot:ctcp-reply to command message
1125 TO is the target of your CTCP reply, COMMAND is the CTCP command,
1126 and MESSAGE is the message (or arguments) of the command. Make
1127 sure to `bot:ctcp-quote' the message!
1129 This is used to reply to a ctcp that the bot has received.
1132 File: bobot++.info, Node: Misc Scripting Stuff, Prev: Sending Messages, Up: Scripting
1134 4.4 Misc. Scripting Stuff
1135 =========================
1137 These are a few useful things that I thought people writing scripts
1140 If you want to execute code when the bot exits, just do `add-hook!
1141 bot:exit-hook THUNK' where THUNK is an argumentless procedure (a
1142 thunk). When the bot exits your thunk will be called.
1144 [ I didn't know where to put any of these, so I just stuck them in
1147 There probably needs to be several sections added, like dealing
1148 with users (kicking, added, etc), dealing with the bot (channels,
1149 nickname of the bot, etc), server issues (serverlist), useful
1150 tools (nslookup, whois), and do on. ]
1152 -- Function: bot:adduser nick-or-mask cbannel-mask level prot auto-op
1153 Adds an user to the userlist, for a `nick!user@host' matching the
1154 one given, on a channel matching the CHANNELMASK given.
1156 The LEVEL can be: The PROT can be: The AUTO-OP can be:
1157 0 - No level 0 - No protection 0 - No auto-op
1158 1 - User 1 - No ban 1 - Op on join
1159 2 - Trusted User 2 - No kick
1160 3 - Friend 3 - No deop
1164 -- Function: bot:addserver hostname ip-address [portnumber]
1165 Adds the server specified by HOSTNAME or IP-ADDRESS to the server
1168 -- Function: bot:addshit nick-or-mask channel-mask level [time reason]
1169 Adds an user to the shitlist, for a nick!user@host matching the
1170 one given, on a channel matching the CHANNELMASK given.
1175 2 - Kick and Ban on join
1176 3 - Kick and Ban on join, no deban
1179 -- Function: bot:ban channel mask-or-nick
1180 Bans MASK or NICK from CHANNEL. You need to be a trusted user to
1183 -- Function: bot:change-command-level nick-or-mask channel-mask
1185 Gives NICK or MASK level NEW-LEVEL on channel(s) CHANNEL-MASK.
1186 Note that you can not change level for someone whose level is
1187 greater than yours, and that you can not give a level greater than
1190 -- Function: bot:cycle channel
1191 Makes the bot leave and join CHANNEL.
1193 -- Function: bot:deban channel mask-or-nick
1194 Debans MASK or NICK from CHANNEL. You need to be a trusted user to
1197 -- Function: bot:delserver server-number
1198 Deletes server from server list whose number in the server list is
1201 -- Function: bot:deluser nick-or-mask channel-mask
1202 Removes NICK or MASK from the userlist.
1204 -- Function: bot:delshit nick-or-mask channel-mask
1205 Removes NICK or MASK from the shitlist.
1207 -- Function: bot:deop channel mask-or-nick
1208 Deops MASK or NICK on CHANNEL.
1210 -- Function: bot:die reason
1211 Makes the bot stop immediately.
1213 -- Function: bot:do ?
1215 -- Function: bot:invite channel nick
1216 Invites NICK on CHANNEL.
1218 -- Function: bot:join channel
1219 Makes the bot join CHANNEL.
1221 -- Function: bot:keep channel modes
1222 Sets the MODES that the bot will keep for CHANNEL. See also STATS.
1224 -- Function: bot:kick channel mask-or-nick [reason]
1225 Kicks MASK or NICK out of CHANNEL, because of REASON. You need to
1226 be a trusted user to use a MASK.
1228 -- Function: bot:kickban channel mask-or-nick [reason]
1229 Bans then kicks MASK or NICK out of CHANNEL, because of REASON.
1230 You need to be a trusted user to use a MASK.
1232 -- Function: bot:lock channel
1233 Locks topic on CHANNEL.
1235 -- Function: bot:logport
1236 [ Probably returns the log port? ]
1238 -- Function: bot:mode channel mode-string
1239 Sends MODE-STRING as mode for CHANNEL.
1241 -- Function: bot:nextserver
1242 Makes the bot connect to the next server in its server list.
1244 -- Function: bot:nick nick
1245 Makes the bot use nickname NICK.
1247 -- Function: bot:op channel nick
1248 Ops NICK on CHANNEL.
1250 -- Function: bot:part channel
1251 Makes the bot leave CHANNEL.
1253 -- Function: bot:reconnect
1254 Makes the bot reconnect to its current server.
1256 -- Function: bot:server server-number
1257 Select the server to connect to. SERVER-NUMBER is the number of
1258 the server in the serverlist.
1260 -- Function: bot:setfloodrate ?
1262 -- Function: bot:setversion ?
1264 -- Function: bot:tban channel nick-or-mask time
1265 Bans NICK or MASK from CHANNEL for TIME seconds.
1267 -- Function: bot:tkban channel nick-or-mask time [reason]
1268 Bans NICK or MASK from CHANNEL for TIME seconds, then kicks
1269 him/them because of REASON.
1271 -- Function: bot:topic channel topic
1272 If no TOPIC is given, prints CHANNEL's topic. Otherwise, the bot
1273 will change CHANNEL's topic to TOPIC.
1275 -- Function: bot:unlock channel
1276 Makes the bot unlock topic on CHANNEL.
1278 -- Function: bot:who target
1279 Sends a WHO command to TARGET. TARGET may be either a channel or a
1282 -- Function: bot:whois nick
1283 Sends a WHOIS command to NICK. NICK *must* be a nickname, you
1284 cannot send a WHOIS to a channel.
1286 -- Function: bot:getnickname
1287 [ Gets the bot's nickname? ]
1289 -- Function: bot:getserver
1291 -- Function: bot:getserverlist
1293 -- Function: bot:flush
1294 [ Flushes the socket to the server? ]
1296 -- Function: bot:flushport
1297 [ Flushes the log port? ]
1299 -- Function: bot:random ?
1300 [ Returns a random number? What range? Why? ]
1302 -- Function: bot:delcommand
1303 [ Probably deletes a command added with `bot:addcommand' ? ]
1305 -- Function: bot:addtimer ? ?
1307 -- Function: bot:deltimer ?
1309 -- Function: bot:dcc-chat-send ? ?
1311 [ And what about the stuff defined in `bobot-utils.scm' ? I just
1312 added it here so it could be somewhere. There should also be a
1313 section dealing with modules. How to use them. What module
1314 scripts are in. What module bobot++ provided primites are in.
1317 -- Function: bot:log . messages
1318 Write as many MESSAGES as you want to the log. If the arg is a
1319 thunk it will be executed and it's output will be written to the
1322 -- Function: bot:load file
1324 -- Function: bot:load-module module-spec
1326 -- Function: bot:use-module module-spec
1328 -- Function: bot:match-not-channel regex
1329 match-not-channel adds a prefix regex to your REGEX so it doesn't
1330 match the sender or channel in a PUBLIC message
1332 -- Function: bot:match-to-me regex
1333 match-to-me matches text that was addressed to the bot with a ':',
1334 ',', or nothing after the bot name.
1336 -- Function: bot:sent-to-me? message
1338 -- Function: bot:ctcp-quote message
1339 Returns the CTCP quoted message Input _MUST NOT_ contain the
1340 trailing `\r\n' (it is added by the message sending code).
1342 -- Variable: %bot:loadpath
1344 -- Function: %bot:load-extensions
1347 File: bobot++.info, Node: Concept Index, Next: Function Index, Prev: Scripting, Up: Top