[cvslog] (2004-09-02 20:44:19 UTC) Module eggdrop1.7: Change committed!

cvslog cvs at tsss.org
Thu Sep 2 14:44:19 CST 2004


CVSROOT    : /usr/local/cvsroot
Module     : eggdrop1.7
Commit time: 2004-09-02 20:44:19 UTC
Commited by: Will Buckner <wcc at techmonkeys.org>

Added files:
     doc/TCL-COMMANDS

Removed files:
     doc/TCL-SCRIPTS

Log message:

* Oops.

---------------------- diff included ----------------------
Index: eggdrop1.7/doc/TCL-COMMANDS
diff -u /dev/null eggdrop1.7/doc/TCL-COMMANDS:1.1
--- /dev/null	Thu Sep  2 15:44:19 2004
+++ eggdrop1.7/doc/TCL-COMMANDS	Thu Sep  2 15:44:09 2004
@@ -0,0 +1,2279 @@
+$Id: TCL-COMMANDS,v 1.1 2004/09/02 20:44:09 wcc Exp $
+
+Eggdrop Tcl Commands
+Last revised: August 24, 2004
+    _____________________________________________________________________
+
+                           Eggdrop Tcl Commands
+
+
+This is an exhaustive list of all the Tcl commands added to Eggdrop. All
+of the normal Tcl built-in commands are still there, of course, but you
+can also use these to manipulate features of the bot. They are listed
+according to category.
+
+This list is accurate for Eggdrop v1.7.0. Scripts written for v1.3/v1.4
+series of Eggdrop should probably work with a few minor modifications
+depending on the script. 1.6 scripts should work without modification.
+Scripts which were written for  v0.9, v1.0, v1.1 or v1.2 will probably
+not work without modification. Commands which have been changed in this
+version of Eggdrop (or are just new commands) are marked with vertical
+bars (|) on the left.
+
+
+*** OUTPUT COMMANDS ***
+
+  putserv <text> [options]
+    Description: sends text to the server, like '.dump' (intended for direct
+      server commands); output is queued so that the bot won't flood itself
+      off the server.
+    Options:
+      -next:   push messages to the front of the queue
+      -normal: no effect
+    Returns: nothing
+    Module: server
+
+  puthelp <text> [options]
+    Description: sends text to the server, like 'putserv', but it uses a
+      different queue intended for sending messages to channels or people.
+    Options:
+      -next:   push messages to the front of the queue
+      -normal: no effect
+    Returns: nothing
+    Module: server
+
+  putquick <text> [options]
+    Description: sends text to the server, like 'putserv', but it uses a
+      different (and faster) queue.
+    Options:
+      -next:   push messages to the front of the queue
+      -normal: no effect
+    Returns: nothing
+    Module: server
+
+  putkick <channel> <nick,nick,...> [reason]
+    Description: sends kicks to the server and tries to put as many nicks
+      into one kick command as possible.
+    Returns: nothing
+    Module: irc
+
+  putlog <text>
+    Description: sends text to the bot's logfile, marked as 'misc' (o)
+    Returns: nothing
+    Module: core
+
+  putcmdlog <text>
+    Description: sends text to the bot's logfile, marked as 'command' (c)
+    Returns: nothing
+    Module: core
+
+  putxferlog <text>
+    Description: sends text to the bot's logfile, marked as 'file-area' (x)
+    Returns: nothing
+    Module: core
+
+  putloglev <level(s)> <channel> <text>
+    Description: sends text to the bot's logfile, tagged with all of the
+      valid levels given. Use "*" to indicate all log levels.
+    Returns: nothing
+    Module: core
+
+  dumpfile <nick> <filename>
+    Description: dumps file from the help/text directory to a user on IRC via
+      msg (one line per msg). The user has no flags, so the flag bindings
+      won't work within the file.
+    Returns: nothing
+    Module: core
+
+  queuesize [queue]
+    Returns: the number of messages in all queues. If a queue is specified,
+      only the size of this queue is returned. Valid queues are: mode,
+      server, help.
+    Module: server
+
+  clearqueue <queue>
+    Description: removes all messages from a queue. Valid arguments are:
+      mode, server, help, or all.
+    Returns: the number of deleted lines from the specified queue.
+    Module: server
+
+
+*** USER RECORD MANIPULATION COMMANDS ***
+
+  countusers
+    Returns: number of users in the bot's database
+    Module: core
+
+  validuser <handle>
+    Returns: 1 if a user by that name exists; 0 otherwise
+    Module: core
+
+  finduser <nick!user at host>
+    Description: finds the user record which most closely matches the given
+      nick!user at host
+    Returns: the handle found, or "*" if none
+    Module: core
+
+  userlist [flags]
+    Returns: a list of users on the bot. You can use the flag matching
+      system here ([global]{&/|}[chan]{&/|}[bot]). '&' specifies "and";
+      '|' specifies "or".
+    Module: core
+
+  passwdok <handle> <pass>
+    Description: checks the password given against the user's password.
+      Check against the password "" (a blank string) or "-" to find out
+      if a user has no password set.
+    Returns: 1 if the password matches for that user; 0 otherwise
+    Module: core
+
+  getuser <handle> <entry-type> [extra info]
+    Description: an interface to the new generic userfile support. Valid
+      entry types are:
+        BOTFL   - returns the current bot-specific flags for the user
+                  (bot-only)
+        BOTADDR - returns a list containing the bot's address, telnet port,
+                  and relay port (bot-only)
+        HOSTS   - returns a list of hosts for the user
+        LASTON  - returns a list containing the unixtime last seen and the
+                  last seen place. LASTON #channel returns the time last
+                  seen time for the channel or 0 if no info exists.
+        INFO    - returns the user's global info line
+        XTRA    - returns the user's XTRA info
+        COMMENT - returns the master-visible only comment for the user
+        EMAIL   - returns the user's e-mail address
+        URL     - returns the user's url
+        HANDLE  - returns the user's handle as it is saved in the userfile
+        PASS    - returns the user's encrypted password
+    Returns: info specific to each entry-type
+    Module: core
+
+  setuser <handle> <entry-type> [extra info]
+    Description: this is the counterpart of getuser. It lets you set the
+      various values. Other then the ones listed below, the entry-types are
+      the same as getuser's.
+        PASS    - sets a users password (no third arg will clear it)
+        HOSTS   - if used with no third arg, all hosts for the user will be
+                  be cleared. Otherwise, *1* hostmask is added :P
+        LASTON  - This setting has 3 forms. "setuser <handle> LASTON
+                  <unixtime> <place>" sets global LASTON time, "setuser
+                  <handle> LASTON <unixtime>" sets global LASTON time
+                  (leaving the place field empty), and "setuser <handle>
+                  LASTON <unixtime> <channel>" sets a users LASTON time for
+                  a channel (if it is a  valid channel).
+    Returns: nothing
+    Module: core
+
+  chhandle <old-handle> <new-handle>
+    Description: changes a user's handle
+    Returns: 1 on success; 0 if the new handle is invalid or already used,
+      or if the user can't be found
+    Module: core
+
+  chattr <handle> [changes [channel]]
+    Description: changes the attributes for a user record, if you include any.
+      Changes are of the form '+f', '-o', '+dk', '-o+d', etc. If changes are
+      specified in the format of |<changes> <channel>, the channel-specific
+      flags for that channel are altered. You can now use the +o|-o #channel
+      format here too.
+    Returns: new flags for the user (if you made no changes, the current
+      flags are returned). If a channel was specified, the global AND the
+      channel-specific flags for that channel are returned in the format of
+      globalflags|channelflags. "*" is returned if the specified user does
+      not exist.
+    Module: core
+
+  botattr <handle> [changes [channel]]
+    Description: similar to chattr except this modifies bot flags rather
+      than normal user attributes.
+    Returns: new flags for the bot (if you made no changes, the current
+      flags are returned). If a channel was specified, the global AND the
+      channel-specific flags for that channel are returned in the format of
+      globalflags|channelflags. "*" is returned if the specified bot does
+      not exist.
+    Module: core
+
+  matchattr <handle> <flags> [channel]
+    Returns: 1 if the specified user has the specified flags; 0 otherwise
+    Module: core
+
+  adduser <handle> [hostmask]
+    Description: creates a new user entry with the handle and hostmask given
+      (with no password and the default flags)
+    Returns: 1 if successful; 0 if the handle already exists
+    Module: core
+
+  addbot <handle> <address>
+    Description: adds a new bot to the userlist with the handle and bot
+      address given (with no password and no flags)
+    Returns: 1 if successful; 0 if the bot already exists
+    Module: core
+
+  deluser <handle>
+    Description: attempts to erase the user record for a handle
+    Returns: 1 if successful, 0 if no such user exists
+    Module: core
+
+  delhost <handle> <hostmask>
+    Description: deletes a hostmask from a user's host list
+    Returns: 1 on success; 0 if the hostmask (or user) doesn't exist
+    Module: core
+
+  addchanrec <handle> <channel>
+    Description: adds a channel record for a user
+    Returns: 1 on success; 0 if the user or channel does not exist
+    Module: channels
+
+  delchanrec <handle> <channel>
+    Description: removes a channel record for a user. This includes all
+      associated channel flags.
+    Returns: 1 on success; 0 if the user or channel does not exist
+    Module: channels
+
+ haschanrec <handle> <channel>
+    Returns: 1 if the given handle has a chanrec for the specified channel;
+      0 otherwise
+    Module: channels
+
+  getchaninfo <handle> <channel>
+    Returns: info line for a specific channel (behaves just like 'getinfo')
+    Module: channels
+
+  setchaninfo <handle> <channel> <info>
+   Description: sets the info line on a specific channel for a user. If
+     info is "none", it will be removed.
+   Returns: nothing
+   Module: channels
+
+  newchanban <channel> <ban> <creator> <comment> [lifetime] [options]
+    Description: adds a ban to the ban list of a channel; creator is given
+      credit for the ban in the ban list. lifetime is specified in
+      minutes. If lifetime is not specified, ban-time (usually 60) is
+      used. Setting the lifetime to 0 makes it a permanent ban.
+    Options:
+      sticky: forces the ban to be always active on a channel, even
+              with dynamicbans on
+      none:   no effect
+    Returns: nothing
+    Module: channels
+
+  newban <ban> <creator> <comment> [lifetime] [options]
+    Description: adds a ban to the global ban list (which takes effect on
+      all channels); creator is given credit for the ban in the ban list.
+      lifetime is specified in minutes. If lifetime is not specified,
+      global-ban-time (usually 60) is used. Setting the lifetime to 0 makes
+      it a permanent ban.
+    Options:
+      sticky: forces the ban to be always active on a channel, even
+              with dynamicbans on
+      none:   no effect
+    Returns: nothing
+    Module: channels
+
+  newchanexempt <channel> <exempt> <creator> <comment> [lifetime] [options]
+    Description: adds a exempt to the exempt list of a channel; creator is
+      given credit for the exempt in the exempt list. lifetime is specified
+      in minutes. If lifetime is not specified, exempt-time (usually 60) is
+      used. Setting the lifetime to 0 makes it a permanent exempt. The exempt
+      will not be removed until the corresponding ban has been removed. For
+      timed bans, once the time period has expired, the exempt will not be
+      removed until the corresponding ban has either expired or been removed.
+    Options:
+      sticky: forces the exempt to be always active on a channel, even
+              with dynamicexempts on
+      none:   no effect
+    Returns: nothing
+    Module: channels
+
+  newexempt <exempt> <creator> <comment> [lifetime] [options]
+    Description: adds a exempt to the global exempt list (which takes effect
+      on all channels); creator is given credit for the exempt in the exempt
+      list. lifetime is specified in minutes. If lifetime is not specified,
+      exempt-time (usually 60) is used. Setting the lifetime to 0 makes it a
+      permanent exempt. The exempt will not be removed until the
+      corresponding ban has been removed.
+    Options:
+      sticky: forces the exempt to be always active on a channel, even
+              with dynamicexempts on
+      none:   no effect
+    Returns: nothing
+    Module: channels
+
+  newchaninvite <channel> <invite> <creator> <comment> [lifetime] [options]
+    Description: adds a invite to the invite list of a channel; creator is
+      given credit for the invite in the invite list. lifetime is specified
+      in minutes. If lifetime is not specified, invite-time (usually 60) is
+      used. Setting the lifetime to 0 makes it a permanent invite. The invite
+      will not be removed until the channel has gone -i.
+    Options:
+      sticky: forces the invite to be always active on a channel, even
+              with dynamicinvites on
+      none:   no effect
+    Returns: nothing
+    Module: channels
+
+  newinvite <invite> <creator> <comment> [lifetime] [options]
+    Description: adds a invite to the global invite list (which takes effect
+      on all channels); creator is given credit for the invite in the invite
+      list. lifetime is specified in minutes. If lifetime is not specified,
+      invite-time (usually 60) is used. Setting the lifetime to 0 makes it
+      a permanent invite. The invite will not be removed until the channel
+      has gone -i.
+    Options:
+      sticky: forces the invite to be always active on a channel, even
+              with dynamicinvites on
+      none:   no effect
+    Returns: nothing
+    Module: channels
+
+  stick <banmask> [channel]
+    Description: makes a ban sticky, or, if a channel is specified, then it
+      is set sticky on that channel only.
+    Returns: 1 on success; 0 otherwise
+    Module: channels
+
+  unstick <banmask> [channel]
+    Description: makes a ban no longer sticky, or, if a channel is
+      specified, then it is unstuck on that channel only.
+    Returns: 1 on success; 0 otherwise
+    Module: channels
+
+  stickexempt <exemptmask> [channel]
+    Description: makes an exempt sticky, or, if a channel is specified,
+      then it is set sticky on that channel only.
+    Returns: 1 on success; 0 otherwise
+    Module: channels
+
+  unstickexempt <exemptmask> [channel]
+    Description: makes an exempt no longer sticky, or, if a channel is
+      specified, then it is unstuck on that channel only.
+    Returns: 1 on success; 0 otherwise
+    Module: channels
+
+  stickinvite <invitemask> [channel]
+    Description: makes an invite sticky, or, if a channel is specified,
+      then it is set sticky on that channel only.
+    Returns: 1 on success; 0 otherwise
+    Module: channels
+
+  unstickinvite <invitemask> [channel]
+    Description: makes an invite no longer sticky, or, if a channel is
+      specified, then it is unstuck on that channel only.
+    Returns: 1 on success; 0 otherwise
+    Module: channels
+
+  killchanban <channel> <ban>
+    Description: removes a ban from the ban list for a channel
+    Returns: 1 on success; 0 otherwise
+    Module: channels
+
+  killban <ban>
+    Description: removes a ban from the global ban list
+    Returns: 1 on success; 0 otherwise
+    Module: channels
+
+  killchanexempt <channel> <exempt>
+    Description: removes an exempt from the exempt list for a channel
+    Returns: 1 on success; 0 otherwise
+    Module: channels
+
+  killexempt <exempt>
+    Description: removes an exempt from the global exempt list
+    Returns: 1 on success; 0 otherwise
+    Module: channels
+
+  killchaninvite <channel> <invite>
+    Description: removes an invite from the invite list for a channel
+    Returns: 1 on success; 0 otherwise
+    Module: channels
+
+  killinvite <invite>
+    Description: removes an invite from the global invite list
+    Returns: 1 on success; 0 otherwise
+    Module: channels
+
+  ischanjuped <channel>
+    Returns: 1 if the channel is juped, and the bot is unable to join; 0
+      otherwise
+    Module: channels
+
+  isban <ban> [channel]
+    Returns: 1 if the specified ban is in the global ban list; 0 otherwise.
+      If a channel is specified, that channel's ban list is checked as well.
+    Module: channels
+
+  ispermban <ban> [channel]
+    Returns: 1 if the specified ban is in the global ban list AND is marked
+      as permanent; 0 otherwise. If a channel is specified, that channel's
+      ban list is checked as well.
+    Module: channels
+
+  isexempt <exempt> [channel]
+    Returns: 1 if the specified exempt is in the global exempt list; 0
+      otherwise. If a channel is specified, that channel's exempt list is
+      checked as well.
+    Module: channels
+
+  ispermexempt <exempt> [channel]
+    Returns: 1 if the specified exempt is in the global exempt list AND is
+      marked as permanent; 0 otherwise. If a channel is specified, that
+      channel's exempt list is checked as well.
+    Module: channels
+
+  isinvite <invite> [channel]
+    Returns: 1 if the specified invite is in the global invite list; 0
+      otherwise. If a channel is specified, that channel's invite list is
+      checked as well.
+    Module: channels
+
+  isperminvite <invite> [channel]
+    Returns: 1 if the specified invite is in the global invite list AND is
+      marked as permanent; 0 otherwise. If a channel is specified, that
+      channel's invite list is checked as well.
+    Module: channels
+
+  isbansticky <ban> [channel]
+    Returns: 1 if the specified ban is marked as sticky in the global ban
+      list; 0 otherwise. If a channel is specified, that channel's ban list
+      is checked as well.
+    Module: channels
+
+  isexemptsticky <exempt> [channel]
+    Returns: 1 if the specified exempt is marked as sticky in the global
+      exempt list; 0 otherwise. If a channel is specified, that channel's
+      exempt list is checked as well.
+    Module: channels
+
+  isinvitesticky <invite> [channel]
+    Returns: 1 if the specified invite is marked as sticky in the global
+      invite list; 0 otherwise. If a channel is specified, that channel's
+      invite list is checked as well.
+    Module: channels
+
+  matchban <nick!user at host> [channel]
+    Returns: 1 if the specified nick!user at host matches a ban in the global
+      ban list; 0 otherwise. If a channel is specified, that channel's ban
+      list is checked as well.
+    Module: channels
+
+  matchexempt <nick!user at host> [channel]
+    Returns: 1 if the specified nick!user at host matches an exempt in the
+      global exempt list; 0 otherwise. If a channel is specified, that
+      channel's exempt list is checked as well.
+    Module: channels
+
+  matchinvite <nick!user at host> [channel]
+    Returns: 1 if the specified nick!user at host matches an invite in the
+      global invite list; 0 otherwise. If a channel is specified, that
+      channel's invite list is checked as well.
+    Module: channels
+
+  banlist [channel]
+    Returns: a list of global bans, or, if a channel is specified, a
+      list of channel-specific bans. Each entry is a sublist containing:
+      hostmask, comment, expiration timestamp, time added, last time
+      active, and creator. The three timestamps are in unixtime format.
+    Module: channels
+
+  exemptlist [channel]
+    Returns: a list of global exempts, or, if a channel is specified, a
+      list of channel-specific exempts. Each entry is a sublist containing:
+      hostmask, comment, expiration timestamp, time added, last time
+      active, and creator. The three timestamps are in unixtime format.
+    Module: channels
+
+  invitelist [channel]
+    Returns: a list of global invites, or, if a channel is specified, a
+      list of channel-specific invites. Each entry is a sublist containing:
+      hostmask, comment, expiration timestamp, time added, last time
+      active, and creator. The three timestamps are in unixtime format.
+    Module: channels
+
+  newignore <hostmask> <creator> <comment> [lifetime]
+    Description: adds an entry to the ignore list; creator is given credit
+      for the ignore. lifetime is how many minutes until the ignore expires
+      and is removed. If lifetime is not specified, ignore-time (usually 60)
+      is used. Setting the lifetime to 0 makes it a permanent ignore.
+    Returns: nothing
+    Module: core
+
+  killignore <hostmask>
+    Description: removes an entry from the ignore list
+    Returns: 1 if successful; 0 otherwise
+    Module: core
+
+  ignorelist
+    Returns: a list of ignores. Each entry is a sublist containing:
+      hostmask, comment, expiration timestamp, time added, and creator.
+      The timestamps are in unixtime format.
+    Module: core
+
+  isignore <hostmask>
+    Returns: 1 if the ignore is in the list; 0 otherwise
+    Module: core
+
+  save
+    Description: writes the user and channel files to disk
+    Returns: nothing
+    Module: core
+
+  reload
+    Description: loads the userfile from disk, replacing whatever is in
+      memory
+    Returns: nothing
+    Module: core
+
+  backup
+    Description: makes a simple backup of the userfile that's on disk.
+      If the channels module is loaded, this also makes a simple backup
+      of the channel file.
+    Returns: nothing
+    Module: core
+
+  getting-users
+    Returns: 1 if the bot is currently downloading a userfile from
+      a sharebot (and hence, user records are about to drastically
+      change); 0 if not
+    Module: core
+
+*** CHANNEL COMMANDS ***
+
+  channel add <name> [option-list]
+    Description: adds a channel record for the bot to monitor. The full
+      list of possible options are given in doc/settings/mod.channels. Note
+      that the channel options must be in a list (enclosed in {}).
+    Returns: nothing
+    Module: channels
+
+  channel set <name> <options...>
+    Description: sets options for the channel specified. The full list of
+      possible options are given in doc/settings/mod.channels.
+    Returns: nothing
+    Module: channels
+
+  channel info <name>
+    Returns: a list of info about the specified channel's settings.
+    Module: channels
+
+  channel get <name> <setting>
+    Returns: The value of the setting you specify. For flags, a value of 0
+      means it is disabled (-), and non-zero means enabled (+).
+    Module: channels
+
+  channel remove <name>
+    Description: removes a channel record from the bot and makes the bot no
+      longer monitor the channel
+    Returns: nothing
+    Module: channels
+
+  savechannels
+    Description: saves the channel settings to the channel-file if one is
+      defined.
+    Returns: nothing
+    Module: channels
+
+  loadchannels
+    Description: reloads the channel settings from the channel-file if one
+      is defined.
+    Returns: nothing
+    Module: channels
+
+  channels
+    Returns: a list of the channels the bot has a channel record for
+    Module: channels
+
+ channame2dname <channel-name>
+ chandname2name <channel-dname>
+   Description: these two functions are important to correctly support
+     !channels. The bot differentiates between channel description names
+     (chan dnames) and real channel names (chan names). The chan dnames
+     are what you would normally call the channel, such as "!channel". The
+     chan names are what the IRC server uses to identify the channel. They
+     consist of the chan dname prefixed with an ID; such as "!ABCDEchannel".
+
+     For bot functions like isop, isvoice, etc. you need to know the chan
+     dnames. If you communicate with the server, you usually get the chan
+     name, though. That's what you need the channame2dname function for.
+
+     If you only have the chan dname and want to directly send raw server
+     commands, use the chandname2name command.
+
+     NOTE: For non-!channels, chan dname and chan name are the same.
+   Module: irc
+
+  isbotnick <nick>
+    Returns: 1 if the nick matches the botnick; 0 otherwise
+    Module: server
+
+  botisop [channel]
+    Returns: 1 if the bot has ops on the specified channel (or any channel
+      if no channel is specified); 0 otherwise
+    Module: irc
+
+  botishalfop [channel]
+    Returns: 1 if the bot has halfops on the specified channel (or any channel
+      if no channel is specified); 0 otherwise
+    Module: irc
+
+  botisvoice [channel]
+    Returns: 1 if the bot has a voice on the specified channel (or any
+      channel if no channel is specified); 0 otherwise
+    Module: irc
+
+  botonchan [channel]
+   Returns: 1 if the bot is on the specified channel (or any channel if
+     no channel is specified); 0 otherwise
+   Module: irc
+
+  isop <nickname> [channel]
+    Returns: 1 if someone by the specified nickname is on the channel (or
+      any channel if no channel name is specified) and has ops; 0 otherwise
+    Module: irc
+
+  ishalfop <nickname> [channel]
+    Returns: 1 if someone by the specified nickname is on the channel (or
+      any channel if no channel name is specified) and has halfops; 0 otherwise
+    Module: irc
+
+  wasop <nickname> <channel>
+    Returns: 1 if someone that just got opped/deopped in the chan had op
+      before the modechange; 0 otherwise
+    Module: irc
+
+  washalfop <nickname> <channel>
+    Returns: 1 if someone that just got halfopped/dehalfopped in the chan
+      had halfop before the modechange; 0 otherwise
+    Module: irc
+
+  isvoice <nickname> [channel]
+    Returns: 1 if someone by that nickname is on the channel (or any
+      channel if no channel is specified) and has voice (+v); 0 otherwise
+    Module: irc
+
+  onchan <nickname> [channel]
+    Returns: 1 if someone by that nickname is on the specified channel (or
+      any channel if none is specified); 0 otherwise
+    Module: irc
+
+  nick2hand <nickname> [channel]
+    Returns: the handle of a nickname on a channel. If a channel is not
+      specified, the bot will check all of its channels. If the nick is
+      not found, "" is returned. If the nick is found but does not have
+      a handle, "*" is returned.
+    Module: irc
+
+  hand2nick <handle> [channel]
+    Returns: nickname of the first person on the specified channel (if one
+      is specified) whose nick!user at host matches the given handle; "" is
+      returned if no match is found. If no channel is specified, all channels
+      are checked.
+    Module: irc
+
+  handonchan <handle> [channel]
+    Returns: 1 if the the nick!user at host for someone on the channel (or any
+      channel if no channel name is specified) matches for the handle given;
+      0 otherwise
+    Module: irc
+
+  ischanban <ban> <channel>
+    Returns: 1 if the specified ban is on the given channel's ban list
+      (not the bot's banlist for the channel)
+    Module: irc
+
+  ischanexempt <exempt> <channel>
+    Returns: 1 if the specified exempt is on the given channel's exempt
+      list (not the bot's exemptlist for the channel)
+    Module: irc
+
+  ischaninvite <invite> <channel>
+    Returns: 1 if the specified invite is on the given channel's invite
+      list (not the bot's invitelist for the channel)
+    Module: irc
+
+  chanbans <channel>
+    Returns: a list of the current bans on the channel. Each element is
+      a sublist of the form {<ban> <bywho> <age>}. age is seconds from the
+      bot's point of view
+    Module: irc
+
+  chanexempts <channel>
+    Returns: a list of the current exempts on the channel. Each element is
+      a sublist of the form {<exempts> <bywho> <age>}. age is seconds from the
+      bot's point of view
+    Module: irc
+
+  chaninvites <channel>
+    Returns: a list of the current invites on the channel. Each element is
+      a sublist of the form {<invites> <bywho> <age>}. age is seconds from the
+      bot's point of view
+    Module: irc
+
+  resetbans <channel>
+    Description: removes all bans on the channel that aren't in the bot's
+      ban list and refreshes any bans that should be on the channel but
+      aren't
+    Returns: nothing
+    Module: irc
+
+  resetexempts <channel>
+    Description: removes all exempt on the channel that aren't in the bot's
+      exempt list and refreshes any exempts that should be on the channel
+      but aren't
+    Returns: nothing
+    Module: irc
+
+  resetinvites <channel>
+    Description: removes all invites on the channel that aren't in the bot's
+      invite list and refreshes any invites that should be on the channel
+      but aren't
+    Returns: nothing
+    Module: irc
+
+  resetchan <channel>
+    Description: rereads in the channel info from the server
+    Returns: nothing
+    Module: irc
+
+  getchanhost <nickname> [channel]
+    Returns: user at host of the specified nickname (the nickname is not included
+      in the returned host). If a channel is not specified, bot will check
+      all of its channels. If the nickname is not on the channel(s), "" is
+      returned.
+    Module: irc
+
+  getchanjoin <nickname> <channel>
+    Returns: timestamp (unixtime format) of when the specified nickname
+      joined the channel
+    Module: irc
+
+  onchansplit <nick> [channel]
+    Returns: 1 if that nick is split from the channel (or any channel if no
+      channel is specified); 0 otherwise
+    Module: irc
+
+  chanlist <channel> [flags[&chanflags]]
+    Description: flags are any global flags; the '&' denotes to look for
+      channel specific flags. Examples:
+        n         (Global Owner)
+        &n        (Channel Owner)
+        o&m       (Global Op, Channel Master)
+      Now you can use even more complex matching of flags, including +&- flags
+      and & or | (and or or) matching.
+    Returns: list of nicknames currently on the bot's channel that have all
+      of the flags specified;. If no flags are given, all of the nicknames
+      are returned. Please note that if you're executing chanlist after a
+      part or sign bind, the gone user will still be listed, so you can
+      check for wasop, isop, etc.
+    Module: irc
+
+
+  getchanidle <nickname> <channel>
+    Returns: number of minutes that person has been idle; 0 if the
+      specified user isn't on the channel
+    Module: irc
+
+  getchanmode <channel>
+    Returns: string of the type "+ntik key" for the channel specified
+    Module: irc
+
+  jump [server [port [password]]]
+    Description: jumps to the server specified, or (if none is specified)
+      the next server in the bot's serverlist
+    Returns: nothing
+    Module: server
+
+  pushmode <channel> <mode> [arg]
+    Description: sends out a channel mode change (ex: pushmode #lame +o
+      goober) through the bot's queuing system. All the mode changes will
+      be sent out at once (combined into one line as much as possible) after
+      the script finishes, or when 'flushmode' is called.
+    Returns: nothing
+    Module: irc
+
+  flushmode <channel>
+    Description: forces all previously pushed channel mode changes to be
+      sent to the server, instead of when the script is finished (just for
+      the channel specified)
+    Returns: nothing
+    Module: irc
+
+  topic <channel>
+    Returns: string containing the current topic of the specified channel
+    Module: irc
+
+  validchan <channel>
+    Description: checks if the bot has a channel record for the specified
+      channel. Note that this does not necessarily mean that the bot is ON
+      the channel.
+    Returns: 1 if the channel exists, 0 if not
+    Module: channels
+
+  isdynamic <channel>
+    Returns: 1 if the channel is a dynamic channel; 0 otherwise
+    Module: channels
+
+  setudef <flag/int/str> <name>
+    Description: initializes a user defined channel flag, string or integer
+      setting. You can use it like any other flag/setting. IMPORTANT: Don't
+      forget to reinitialize your flags/settings after a restart, or it'll be
+      lost.
+    Returns: nothing
+    Module: channels
+
+  renudef <flag/int/str> <oldname> <newname>
+    Description: renames a user defined channel flag, string, or integer
+      setting.
+    Returns: nothing
+    Module: channels
+
+  deludef <flag/int/str> <name>
+    Description: deletes a user defined channel flag, string, or integer
+      setting.
+    Returns: nothing
+    Module: channels
+
+*** DCC COMMANDS ***
+
+  putdcc <idx> <text>
+    Description: sends text to the idx specified
+    Returns: nothing
+    Module: core
+
+  dccbroadcast <message>
+    Description: sends a message to everyone on the party line across the
+      botnet, in the form of "*** <message>" for local users and
+      "*** (Bot) <message>" for users on other bots
+    Returns: nothing
+    Module: core
+
+  dccputchan <channel> <message>
+    Description: sends your message to everyone on a certain channel on the
+      botnet, in a form exactly like dccbroadcast does. Valid channels are 0
+      through 99999.
+    Returns: nothing
+    Module: core
+
+  boot <user at bot> [reason]
+     Description: boots a user from the partyline
+     Returns: nothing
+     Module: core
+
+  dccsimul <idx> <text>
+    Description: simulates text typed in by the dcc user specified. Note
+      that in v0.9, this only simulated commands; now a command must be
+      preceded by a '.' to be simulated.
+    Returns: nothing
+    Module: core
+
+  hand2idx <handle>
+    Returns: the idx (a number greater than or equal to zero) for the user
+      given if the user is on the party line in chat mode (even if she is
+      currently on a channel or in chat off), the file area, or in the control
+      of a script. -1 is returned if no idx is found. If the user is on
+      multiple times, the oldest idx is returned.
+    Module: core
+
+  idx2hand <idx>
+    Returns: handle of the user with the given idx
+    Module: core
+
+  valididx <idx>
+    Returns: 1 if the idx currently exists; 0 otherwise
+    Module: core
+
+  getchan <idx>
+    Returns: the current party line channel for a user on the party line;
+      "0" indicates he's on the group party line, "-1" means he has chat off,
+      and a value from 1 to 99999 is a private channel
+    Module: core
+
+  setchan <idx> <channel>
+    Description: sets a party line user's channel. The party line user
+      is not notified that she is now on a new channel. A channel name
+      can be used (provided it exists).
+    Returns: nothing
+    Module: core
+
+  console <idx> [channel] [console-modes]
+    Description: changes a dcc user's console mode, either to an absolute
+      mode (like "mpj") or just adding/removing flags (like "+pj" or "-moc"
+      or "+mp-c"). The user's console channel view can be changed also (as
+      long as the new channel is a valid channel).
+    Returns: a list containing the user's (new) channel view and (new)
+      console modes, or nothing if that user isn't currently on the partyline
+    Module: core
+
+  echo <idx> [status]
+    Description: turns a user's echo on or off; the status has to be a 1 or 0
+    Returns: new value of echo for that user (or the current value, if status
+      was omitted)
+    Module: core
+
+  strip <idx> [+/-strip-flags]
+    Description: modifies the strip-flags for a user. The supported
+      strip-flags are:
+        b - remove all boldface codes
+        c - remove all color codes
+        r - remove all reverse video codes
+        u - remove all underline codes
+        a - remove all ANSI codes
+        g - remove all ctrl-g (bell) codes
+    Returns: new strip-flags for the specified user (or the current
+      flags, if strip-flags was omitted)
+    Module: core
+
+  putbot <bot-nick> <message>
+    Description: sends a message across the botnet to another bot. If no
+      script intercepts the message on the other end, the message is
+      ignored.
+    Returns: nothing
+    Module: core
+
+  putallbots <message>
+    Description: sends a message across the botnet to all bots. If no
+      script intercepts the message on the other end, the message is
+      ignored.
+    Returns: nothing
+    Module: core
+
+  killdcc <idx>
+    Description: kills a partyline or file area connection
+    Returns: nothing
+    Module: core
+
+  bots
+    Returns: list of the bots currently connected to the botnet
+    Module: core
+
+  botlist
+    Returns: a list of bots currently on the botnet. Each item in the list
+      is a sublist with four elements: bot, uplink, version, sharing status:
+        bot:     the bot's botnetnick
+        uplink:  the bot the bot is connected to
+        version: its current numeric version
+        sharing: a "+" if the bot is a sharebot; "-" otherwise
+    Module: core
+
+  islinked <bot>
+    Returns: 1 if the bot is currently linked; 0 otherwise
+    Module: core
+
+  dccused
+    Returns: number of dcc connections currently in use
+    Module: core
+
+  dcclist [type]
+    Returns: a list of active connections, each item in the list is a
+      sublist containing six elements:
+        {<idx> <handle> <hostname> <type> {<other>} <timestamp>}.
+
+      The types are: chat, bot, files, file_receiving, file_sending,
+      file_send_pending, script, socket (these are connections that have
+      not yet been put under 'control'), telnet, and server. The timestamp
+      is in unixtime format.
+    Module: core
+
+  whom <chan>
+    Returns: list of people on the botnet who are on that channel. 0 is
+      the default party line. Each item in the list is a sublist with six
+      elements: nickname, bot, hostname, access flag ('-', '@', '+', or
+      '*'), minutes idle, and away message (blank if the user is not away).
+      If you specify * for channel, every user on the botnet is returned
+      with an extra argument indicating the channel the user is on.
+    Module: core
+
+  getdccidle <idx>
+    Returns: number of seconds the dcc chat/file system/script user has
+      been idle
+    Module: core
+
+  getdccaway <idx>
+    Returns: away message for a dcc chat user (or "" if the user is not
+      set away)
+    Module: core
+
+  setdccaway <idx> <message>
+    Description: sets a party line user's away message and marks them away.
+     If set to "", the user is marked as no longer away.
+    Returns: nothing
+    Module: core
+
+  connect <host> <port>
+    Description: makes an outgoing connection attempt and creates a dcc
+      entry for it. A 'control' command should be used immediately after
+      a successful 'connect' so no input is lost.
+    Returns: idx of the new connection
+    Module: core
+
+  listen <port> <type> [options] [flag]
+    Description: opens a listening port to accept incoming telnets; type
+      must be one of "bots", "all", "users", "script", or "off":
+
+        listen <port> bots [mask]
+          Description: accepts connections from bots only; the optional mask
+            is used to identify permitted bot names. If the mask begins with
+            '@', it is interpreted to be a mask of permitted hosts to accept
+            connections from.
+          Returns: port number
+
+        listen <port> users [mask]
+          Description: accepts connections from users only (no bots); the
+            optional mask is used to identify permitted nicknames. If the
+            mask begins with '@', it is interpreted to be a mask of permitted
+            hosts to accept connections from.
+          Returns: port number
+
+        listen <port> all [mask]
+          Description: accepts connections from anyone; the optional mask
+            is used to identify permitted nicknames/botnames. If the mask
+            begins with '@', it is interpreted to be a mask of permitted
+            hosts to accept connections from.
+          Returns: port number
+
+        listen <port> script <proc> [flag]
+          Description: accepts connections which are immediately routed to
+            a proc. The proc is called with one parameter: the idx of the
+            new connection. Flag may currently only be 'pub', which makes
+            the bot allow anyone to connect.
+          Returns: port number
+
+        listen <port> off
+          Description: stop listening on a port
+          Returns: nothing
+    Module: core
+
+  dccdumpfile <idx> <filename>
+    Description: dumps out a file from the text directory to a dcc chat
+      user. The flag matching that's used everywhere else works here, too.
+    Returns: nothing
+    Module: core
+
+  *** NOTES MODULE ***
+
+  notes <user> [numberlist]
+    Returns: -1 if no such user, -2 if notefile failure. If a numberlist
+      is not specified, the number of notes stored for the user is returned.
+      Otherwise, a list of sublists containing information about notes
+      stored for the user is returned. Each sublist is in the format of:
+        {<from> <timestamp> <note text>}.
+    Module: notes
+
+  erasenotes <user> <numberlist>
+    Description: erases some or all stored notes for a user. Use '-'
+      to erase all notes.
+    Returns: -1 if no such user, -2 if notefile failure, 0 if
+      no such note, or number of erased notes.
+    Module: notes
+
+  listnotes <user> <numberlist>
+    Description: lists existing notes according to the numberlist (ex:
+      "2-4;8;16-")
+    Returns: -1 if no such user, -2 if notefile failure, 0 if no
+      such note, list of existing notes.
+    Module: notes
+
+  storenote <from> <to> <msg> <idx>
+    Description: stores a note for later reading, notifies idx of any results
+      (use idx -1 for no notify).
+    Returns: 0 on success; non-0 on failure
+    Module: notes
+
+*** ASSOC MODULE ***
+
+  assoc <chan> [name]
+    Description: sets the name associated with a botnet channel, if you
+      specify one
+    Returns: current name for that channel, if any
+    Module: assoc
+
+  killassoc <chan>
+    Description: removes the name associated with a botnet channel, if any
+      exists. Use 'killassoc &' to kill all assocs.
+    Returns: nothing
+    Module: assoc
+
+*** COMPRESS MODULE ***
+
+  compressfile [-level <level>] <src-file> [target-file]
+  uncompressfile <src-file> [target-file]
+    Description: compresses or un-compresses files. The level option specifies
+      the compression mode to use when compressing. Available modes are from
+      0 (minimum CPU usage, minimum compression) all the way up to 9 (maximum
+      CPU usage, maximum compression). If you don't specify the target-file,
+      the src-file will be overwritten.
+    Returns: nothing
+    Module: compress
+
+  iscompressed <filename>
+    Description: determines whether <filename> is gzip compressed. Returns 1
+      if it is, 0 if it isn't, and 2 if some kind of error prevented the
+      checks from succeeding.
+    Returns: nothing
+    Module: compress
+
+*** FILESYS MODULE ***
+
+  setpwd <idx> <dir>
+    Description: changes the directory of a file system user, in exactly
+      the same way as a 'cd' command would. The directory can be specified
+      relative or absolute.
+    Returns: nothing
+    Module: filesys
+
+  getpwd <idx>
+    Returns: the current directory of a file system user
+    Module: filesys
+
+  getfiles <dir>
+    Returns: a list of files in the directory given; the directory is
+      relative to dcc-path
+    Module: filesys
+
+  getdirs <dir>
+    Returns: a list of subdirectories in the directory given; the directory
+      is relative to dcc-path
+    Module: filesys
+
+  dccsend <filename> <ircnick>
+    Description: attempts to start a dcc file transfer to the given nick;
+      the filename must be specified either by full pathname or in relation
+      to the bot's startup directory
+    Returns:
+      0 success
+      1 the dcc table is full (too many connections)
+      2 can't open a socket for the transfer
+      3 the file doesn't exist
+      4 the file was queued for later transfer, which means that person has
+        too many file transfers going right now
+      5 copy-to-tmp is enabled and the file already exists in the temp
+        directory
+    Module: transfer
+
+  filesend <idx> <filename> [ircnick]
+    Description: like dccsend, except it operates for a current filesystem
+      user, and the filename is assumed to be a relative path from that
+      user's current directory
+    Returns: 0 on failure; 1 on success (either an immediate send or a queued
+      send)
+    Module: filesys
+
+ fileresend <idx> <filename> [ircnick]
+    Description: functions like filesend, only that it sends a DCC RESEND
+      instead of a DCC SEND, which allows people to resume aborted file
+      transfers if their client supports that protocol. ircII/BitchX/etc.
+      support it; mIRC does not.
+    Returns: 0 on failure; 1 on success (either an immediate send or a queued
+      send)
+    Module: filesys
+
+  setdesc <dir> <file> <desc>
+    Description: sets the description for a file in a file system directory;
+      the directory is relative to dcc-path
+    Returns: nothing
+    Module: filesys
+
+  getdesc <dir> <file>
+    Returns: the description for a file in the file system, if one
+      exists
+    Module: filesys
+
+  setowner <dir> <file> <handle>
+    Description: changes the owner for a file in the file system; the
+      directory is relative to dcc-path
+    Returns: nothing
+    Module: filesys
+
+  getowner <dir> <file>
+    Returns: the owner of a file in the file system
+    Module: filesys
+
+  setlink <dir> <file> <link>
+    Description: creates or changes a linked file (a file that actually
+      exists on another bot); the directory is relative to dcc-path
+    Returns: nothing
+    Module: filesys
+
+  getlink <dir> <file>
+    Returns: the link for a linked file, if it exists
+    Module: filesys
+
+  getfileq <handle>
+    Returns: list of files queued by someone; each item in the list will be
+      a sublist with two elements: nickname the file is being sent to and
+      the filename
+    Module: transfer
+
+  getfilesendtime <idx>
+    Returns: the unixtime value from when a file transfer started, or a
+      negative number:
+        -1 no matching transfer with the specified idx was found
+        -2 the idx matches an entry which is not a file transfer
+    Module: transfer
+
+  mkdir <directory> [<required-flags> [channel]]
+    Description: creates a directory in the file system. Only users with the
+      required flags may access it.
+    Returns:
+      0 success
+      1 can't create directory
+      2 directory exists but is not a directory
+     -3 could not open filedb
+    Module: filesys
+
+  rmdir <directory>
+    Description: removes a directory from the file system.
+    Returns: 0 on success; 1 on failure
+    Module: filesys
+
+  mv <file> <destination>
+    Description: moves a file from its source to the given destination.
+      The file can also be a mask, such as /incoming/*, provided the
+      destination is a directory.
+    Returns: If the command was successful, the number of files moved will
+      be returned. Otherwise, a negative number will be returned:
+        -1 invalid source file
+        -2 invalid destination
+        -3 destination file exists
+        -4 no matches found
+    Module: filesys
+
+  cp <file> <destination>
+    Description: copies a file from its source to the given destination.
+      The file can also be a mask, such as /incoming/*, provided the
+      destination is a directory.
+    Returns: If the command was successful, the number of files copied will
+      be returned. Otherwise, a negative number will be returned:
+        -1 invalid source file
+        -2 invalid destination
+        -3 destination file exists
+        -4 no matches found
+    Module: filesys
+
+  getflags <dir>
+    Returns: the flags required to access a directory
+    Module: filesys
+
+  setflags <dir> [<flags> [channel]]
+    Description: sets the flags required to access a directory
+    Returns: 0 on success; -1 or -3 on failure
+    Module: filesys
+
+
+*** MISCELLANEOUS COMMANDS ***
+
+  bind <type> <flags> <keyword/mask> [proc-name]
+    Description: You can use the 'bind' command to attach Tcl procedures
+      to certain events. flags are the flags the user must have to trigger
+      the event (if applicable). proc-name is the name of the Tcl procedure
+      to call for this command (see below for the format of the procedure
+      call). If the proc-name is omitted, no binding is added. Instead, the
+      current binding is returned (if it's stackable, a list of the current
+      bindings is returned).
+    Returns: name of the command that was added, or (if proc-name was
+      omitted), a list of the current bindings for this command
+    Module: core
+
+  unbind <type> <flags> <keyword/mask> <proc-name>
+    Description: removes a previously created bind
+    Returns: name of the command that was removed
+    Module: core
+
+  binds [type/mask]
+    Returns: a list of Tcl binds, each item in the list is a sublist of
+      five elements:
+        {<type> <flags> <name> <hits> <proc>}
+    Module: core
+
+  logfile [<modes> <channel> <filename>]
+    Description: creates a new logfile, which will log the modes given for
+      the channel listed. If no logfile is specified, a list of existing
+      logfiles will be returned. "*" indicates all channels. You can also
+      change the modes and channel of an existing logfile with this command.
+      Entering a blank mode and channel ("") makes the bot stop logging there.
+
+      Logfile flags:
+        b - information about bot linking and userfile sharing
+        c - commands
+        d - misc debug information
+        e - Tcl errors
+        h - raw share traffic
+        j - joins, parts, quits, and netsplits on the channel
+        k - kicks, bans, and mode changes on the channel
+        m - private msgs, notices and ctcps to the bot
+        o - misc info, errors, etc (IMPORTANT STUFF)
+        p - public text on the channel
+        r - raw incoming server traffic
+        s - server connects, disconnects, and notices
+        t - raw botnet traffic
+        v - raw outgoing server traffic
+        w - wallops (make sure the bot sets +w in init-server)
+        x - file transfers and file-area commands
+    Returns: filename of logfile created, or, if no logfile is specified, a
+      list of logfiles such as: {mco * eggdrop.log} {jp #lame lame.log}
+    Module: core
+
+  maskhost <nick!user at host>
+    Returns: masked hostmask for the string given ("n!u at 1.2.3.4" -> "*!u at 1.2.3.*",
+      "n!u at lame.com" -> "*!u at lame.com", "n!u at a.b.edu" -> "*!u@*.b.edu")
+    Module: core
+
+  timer <minutes> <tcl-command>
+    Description: executes the given Tcl command after a certain number of
+      minutes have passed
+    Returns: a timerID
+    Module: core
+
+  utimer <seconds> <tcl-command>
+    Description: executes the given Tcl command after a certain number of
+      seconds have passed
+    Returns: a timerID
+    Module: core
+
+  timers
+    Returns: a list of active minutely timers. Each entry in the list contains
+      the number of minutes left till activation, the command that will be
+      executed, and the timerID.
+    Module: core
+
+  utimers
+    Returns: a list of active secondly timers. Each entry in the list contains
+      the number of minutes left till activation, the command that will be
+      executed, and the timerID.
+    Module: core
+
+  killtimer <timerID>
+    Description: removes a minutely timer from the list
+    Returns: nothing
+    Module: core
+
+  killutimer <timerID>
+    Description: removes a secondly timer from the list
+    Returns: nothing
+    Module: core
+
+  unixtime
+    Returns: a long integer which represents the number of seconds that have
+      passed since 00:00 Jan 1, 1970 (GMT).
+    Module: core
+
+  duration <seconds>
+    Returns: the number of seconds converted into years, weeks, days, hours,
+      minutes, and seconds. 804600 seconds is turned into 1 week 2 days
+      7 hours 30 minutes.
+    Module: core
+
+  strftime <formatstring> [time]
+    Returns: a formatted string of time using standard strftime format.
+      If time is specified, the value of the specified time is used.
+      Otherwise, the current time is used.
+    Module: core
+
+  ctime <unixtime>
+    Returns: a formatted date/time string based on the current locale
+      settings from the unixtime string given; for example "Fri Aug 3
+      11:34:55 1973"
+    Module: core
+
+  myip
+    Returns: a long number representing the bot's IP address, as it might
+      appear in (for example) a DCC request
+    Module: core
+
+  rand <limit>
+    Returns: a random integer between 0 and limit-1
+    Module: core
+
+  control <idx> <command>
+    Description: removes an idx from the party line and sends all future
+      input to the Tcl command given. The command will be called with two
+      parameters: the idx and the input text. The command should return 0
+      to indicate success and 1 to indicate that it relinquishes control of
+      the user back to the bot. If the input text is blank (""), it
+      indicates that the connection has been dropped. Also, if the input
+      text is blank, never call killdcc on it, as it will fail with "invalid
+      idx".
+    Returns: nothing
+    Module: core
+
+  sendnote <from> <to[@bot]> <message>
+    Description: simulates what happens when one user sends a note to another
+    Returns:
+      0 - the send failed
+      1 - the note was delivered locally or sent to another bot
+      2 - the note was stored locally
+      3 - the user's notebox is too full to store a note
+      4 - a Tcl binding caught the note
+      5 - the note was stored because the user is away
+    Module: core
+
+  link [via-bot] <bot>
+    Description: attempts to link to another bot directly. If you specify
+      a via-bot, it tells the via-bot to attempt the link.
+    Returns: 1 if the link will be attempted; 0 otherwise
+    Module: core
+
+  unlink <bot>
+    Description: attempts to unlink a bot from the botnet
+    Returns: 1 on success; 0 otherwise
+    Module: core
+
+  encrypt <key> <string>
+    Returns: encrypted string (using the currently loaded encryption module),
+      encoded into ASCII using base-64
+    Module: encryption
+
+  decrypt <key> <encrypted-base64-string>
+    Returns: decrypted string (using the currently loaded encryption module)
+    Module: encryption
+
+  encpass <password>
+    Returns: encrypted string (using the currently loaded encryption module)
+    Module: encryption
+
+  die [reason]
+    Description: causes the bot to log a fatal error and exit completely.
+      If no reason is given, "EXIT" is used.
+    Returns: none
+    Module: core
+
+  unames
+   Returns: the current operating system the bot is using
+   Module: core
+
+  dnslookup <ip-address/hostname> <proc> [[arg1] [arg2] ... [argN]]
+    Description: This issues an asynchronous dns lookup request. The
+      command will block if dns module is not loaded; otherwise it will
+      either return immediately or immediately call the specified proc
+      (e.g. if the lookup is already cached).
+
+      As soon as the request completes, the specified proc will be called
+      as follows:
+
+       <proc> <ipaddress> <hostname> <status> [[arg1] [arg2] ... [argN]]
+
+      status is 1 if the lookup was successful and 0 if it wasn't. All
+      additional parameters (called arg1, arg2 and argN above) get
+      appended to the proc's other parameters.
+    Returns: nothing
+    Module: core
+
+  md5 <string>
+    Returns: the 128 bit MD5 message-digest of the specified string
+    Module: core
+
+  callevent <event>
+    Description: triggers the evnt bind manually for a certain event.
+      For example: callevent rehash.
+    Returns: nothing
+    Module: core
+
+ traffic
+    Returns: a list of sublists containing information about the bot's
+      traffic usage in bytes. Each sublist contains five elements: type,
+      in-traffic today, in-traffic total, out-traffic today, out-traffic
+      total (in that order).
+    Module: core
+
+  modules
+    Returns: a list of sublists containing information about the bot's
+      currently loaded modules. Each sublist contains three elements: module,
+      version, and dependencies. Each dependency is also a sublist containing
+      the module name and version.
+    Module: core
+
+  loadmodule <module>
+    Description: attempts to load the specified module.
+    Returns: "Already loaded." if the module is already loaded, "" if
+      successful, or the reason the module couldn't be loaded.
+    Module: core
+
+  unloadmodule <module>
+    Description: attempts to unload the specified module.
+    Returns: "No such module" if the module is not loaded, "" otherwise.
+    Module: core
+
+  loadhelp <helpfile-name>
+    Description: attempts to load the specified help file from the help/
+      directory.
+    Returns: nothing
+    Module: core
+
+  unloadhelp <helpfile-name>
+    Description: attempts to unload the specified help file.
+    Returns: nothing
+    Module: core
+
+  reloadhelp
+    Description: reloads the bot's help files.
+    Returns: nothing
+    Module: core
+
+  restart
+    Description: rehashes the bot, kills all timers, reloads all modules,
+      and reconnects the bot to the next server in its list.
+    Returns: nothing
+    Module: core
+
+  rehash
+    Description: rehashes the bot
+    Returns: nothing
+    Module: core
+
+  stripcodes <strip-flags> <string>
+    Description: strips specified control characters from the string given.
+      strip-flags can be any combination of the following:
+        b - remove all boldface codes
+        c - remove all color codes
+        r - remove all reverse video codes
+        u - remove all underline codes
+        a - remove all ANSI codes
+        g - remove all ctrl-g (bell) codes
+    Returns: the stripped string.
+    Module: core
+
+
+*** GLOBAL VARIABLES ***
+
+  NOTE: All config file variables are also global.
+
+  botnick
+    Value: the current nickname the bot is using (for example: "Valis",
+      "Valis0", etc.)
+    Module: server
+
+  botname
+    Value: the current nick!user at host that the server sees (for example:
+      "Valis!valis at crappy.com")
+    Module: server
+
+ server
+   Value: the current server's real name (what server calls itself)
+     and port bot is connected to (for example: "irc.math.ufl.edu:6667")
+     Note that this does not nececerilly match the servers internet address.
+   Module: server
+
+ serveraddress
+   Value: the current server's internet address (hostname or IP) and port bot
+     is connected to. This will correspond to the entry in server list (for
+     example: "eu.undernet.org:6667"). Note that this does not necessarily
+     match the name server calls itself.
+   Module: server
+
+  version
+    Value: current bot version "1.1.2+pl1 1010201 pl1";
+      first item is the text version, second item is a numerical version,
+      and any following items are the names of patches that have been added
+    Module: core
+
+  numversion
+    Value: the current numeric bot version (for example: "1010201").
+      Numerical version is in the format of "MNNRRPP", where:
+        M   major release number
+        NN  minor release number
+        RR  sub-release number
+        PP  patch level for that sub-release
+    Module: core
+
+  uptime
+    Value: the unixtime value for when the bot was started
+    Module: core
+
+  server-online
+     Value: the unixtime value for when the bot connected to its current
+       server
+     Module: server
+
+  lastbind
+    Value: the last command binding which was triggered. This allows you to
+      identify which command triggered a Tcl proc.
+    Module: core
+
+  isjuped
+    Value: 1 if bot's nick is juped(437); 0 otherwise
+    Module: server
+
+  handlen
+    Value: the value of the HANDLEN define in src/eggdrop.h
+    Module: core
+
+  config
+    Value: the filename of the config file Eggdrop is currently using
+    Module: core
+
+*** BIND ***
+
+  You can use the 'bind' command to attach Tcl procedures to certain events.
+  For example, you can write a Tcl procedure that gets called every time a
+  user says "danger" on the channel.
+
+  Some bind types are marked as "stackable". That means that you can bind
+  multiple commands to the same trigger. Normally, for example, a bind such
+  as 'bind msg - stop msg:stop' (which makes a msg-command "stop" call the
+  Tcl proc "msg:stop") will overwrite any previous binding you had for the
+  msg command "stop". With stackable bindings, like 'msgm' for example,
+  you can bind the same command to multiple procs. When the bind is triggered,
+  ALL of the Tcl procs that are bound to it will be called.
+
+  To remove a bind, use the 'unbind' command. For example, to remove the
+  bind for the "stop" msg command, use 'unbind msg - stop msg:stop'.
+
+  (A) BIND TYPES
+
+    The following is a list of bind types and how they work. Below each bind
+    type is the format of the bind command, the list of arguments sent to
+    the Tcl proc, and an explanation.
+
+    (1)  MSG
+         bind msg <flags> <command> <proc>
+         procname <nick> <user at host> <handle> <text>
+
+         Description: used for /msg commands. The first word of the user's
+           msg is the command, and everything else becomes the text argument.
+         Module: server
+
+    (2)  DCC
+         bind dcc <flags> <command> <proc>
+         procname <handle> <idx> <text>
+
+         Description: used for partyline commands; the command is the first
+           word and everything else becomes the text argument. The idx is
+           valid until the user disconnects. After that, it may be reused,
+           so be careful about storing an idx for long periods of time.
+         Module: core
+
+    (3)  FIL
+         bind fil <flags> <command> <proc>
+         procname <handle> <idx> <text>
+
+         Description: the same as DCC, except this is triggered if the user
+           is in the file area instead of the party line
+         Module: filesys
+
+    (4)  PUB
+         bind pub <flags> <command> <proc>
+         procname <nick> <user at host> <handle> <channel> <text>
+
+         Description: used for commands given on a channel. The first word
+           becomes the command and everything else is the text argument.
+         Module: irc
+
+    (5)  MSGM (stackable)
+         bind msgm <flags> <mask> <proc>
+         procname <nick> <user at host> <handle> <text>
+
+         Description: matches the entire line of text from a /msg with the
+           mask. This is useful for binding Tcl procs to words or phrases
+           spoken anywhere within a line of text.
+         Module: server
+
+    (6)  PUBM (stackable)
+         bind pubm <flags> <mask> <proc>
+         procname <nick> <user at host> <handle> <channel> <text>
+
+         Description: just like MSGM, except it's triggered by things said
+           on a channel instead of things /msg'd to the bot. The mask is
+           matched against the channel name followed by the text and can
+           contain wildcards. Also, if a line triggers a PUB bind, it will not
+           trigger a PUBM bind.
+         Module: irc
+
+    (7)  NOTC (stackable)
+         bind notc <flags> <mask> <proc>
+         procname <nick> <user at host> <handle> <text> <dest>
+
+         Description: dest will be a nickname (the bot's nickname,
+           obviously) or a channel name. mask is matched against the entire
+           notice and can contain wildcards. It is considered a breach of
+           protocol to respond to a /notice on IRC, so this is intended for
+           internal use (logging, etc.) only. Note that server notices do not
+           trigger the NOTC bind.
+
+           New Tcl procs should be declared as
+             proc notcproc {nick uhost hand text {dest ""}} {
+               global botnick; if {$dest == ""} {set dest $botnick}
+               ...
+             }
+           for compatibility.
+         Module: server
+
+    (8)  JOIN (stackable)
+         bind join <flags> <mask> <proc>
+         procname <nick> <user at host> <handle> <channel>
+
+         Description: triggered by someone joining the channel. The mask in
+           the bind is matched against "#channel nick!user at host" and can
+           contain wildcards.
+         Module: irc
+
+    (9)  PART (stackable)
+         bind part <flags> <mask> <proc>
+         procname <nick> <user at host> <handle> <channel> <msg>
+
+         Description: triggered by someone leaving the channel. The mask is
+           matched against "#channel nick!user at host" and can contain
+           wildcards. If no part message is specified, msg will be set
+           to "".
+
+           New Tcl procs should be declared as
+             proc partproc {nick uhost hand chan {msg ""}} { ... }
+           for compatibility.
+         Module: irc
+
+    (10) SIGN (stackable)
+         bind sign <flags> <mask> <proc>
+         procname <nick> <user at host> <handle> <channel> <reason>
+
+         Description: triggered by a signoff, or possibly by someone who got
+           netsplit and never returned. The signoff message is the last
+           argument to the proc. Wildcards can be used in the mask, which is
+           matched against '#channel nick!user at host'.
+         Module: irc
+
+    (11) TOPC (stackable)
+         bind topc <flags> <mask> <proc>
+         procname <nick> <user at host> <handle> <channel> <topic>
+
+         Description: triggered by a topic change. mask can contain wildcards
+           and is matched against '#channel <new topic>'.
+         Module: irc
+
+    (12) KICK (stackable)
+         bind kick <flags> <mask> <proc>
+         procname <nick> <user at host> <handle> <channel> <target> <reason>
+
+         Description: triggered when someone is kicked off the channel. The
+           mask is matched against '#channel target reason' where the target is
+           the nickname of the person who got kicked (can contain wildcards).
+           The proc is called with the nick, user at host, and handle of the
+           kicker, plus the channel, the nickname of the person who was
+           kicked, and the reason; flags are ignored.
+         Module: irc
+
+    (13) NICK (stackable)
+         bind nick <flags> <mask> <proc>
+         procname <nick> <user at host> <handle> <channel> <newnick>
+
+         Description: triggered when someone changes nicknames. The mask
+           is matched against '#channel newnick' and can contain wildcards.
+           Channel is "*" if the user isn't on a channel (usually the bot not
+           yet in a channel).
+         Module: irc
+
+    (14) MODE   (stackable)
+         bind mode <flags> <mask> <proc>
+         proc-name <nick> <user at host> <handle> <channel> <mode-change> <victim>
+
+         Description: mode changes are broken down into their component
+           parts before being sent here, so the <mode-change> will always
+           be a single mode, such as "+m" or "-o". victim will show the
+           argument of the mode change (for o/v/b/e/I) or "" if the set
+           mode does not take an argument. Flags are ignored. The bot's
+           automatic response to a mode change will happen AFTER all
+           matching Tcl procs are called. The mask will be matched against
+           '#channel +/-modes' and can contain wildcards.
+
+           If it is a server mode, nick will be "", user at host is the server
+           name, and handle is *.
+
+           Note that "victim" was added in 1.3.23 and that this will break
+           Tcl scripts that were written for pre-1.3.23 versions and use this
+           binding. An easy fix (by guppy) is as follows (example):
+
+           Old script looks as follows:
+             bind mode - * mode_proc
+             proc mode_proc {nick uhost hand chan mc} { ... }
+
+           To make it work with 1.3.23+ and stay compatible with older bots, do:
+             bind mode - * mode_proc_fix
+             proc mode_proc_fix {nick uhost hand chan mc {victim ""}} {
+               if {$victim != ""} {append mc " $victim"}
+               mode_proc $nick $uhost $hand $chan $mc
+             }
+             proc mode_proc {nick uhost hand chan mc} { ... }
+         Module: irc
+
+
+    (15) CTCP (stackable)
+         bind ctcp <flags> <keyword> <proc>
+         proc-name <nick> <user at host> <handle> <dest> <keyword> <text>
+
+         Description: dest will be a nickname (the bot's nickname, obviously)
+           or channel name. keyword is the ctcp command (which can contain
+           wildcards), and text may be empty. If the proc returns 0, the bot
+           will attempt its own processing of the ctcp command.
+         Module: server
+
+    (16) CTCR (stackable)
+         bind ctcr <flags> <keyword> <proc>
+         proc-name <nick> <user at host> <handle> <dest> <keyword> <text>
+
+         Description: just like ctcp, but this is triggered for a ctcp-reply
+           (ctcp embedded in a notice instead of a privmsg)
+         Module: server
+
+    (17) RAW (stackable)
+         bind raw <flags> <keyword> <proc>
+         procname <from> <keyword> <text>
+
+         Description: previous versions of Eggdrop required a special compile
+           option to enable this binding, but it's now standard. The keyword
+           is either a numeric, like "368", or a keyword, such as "PRIVMSG".
+           from will be the server name or the source user (depending on
+           the keyword); flags are ignored. The order of the arguments is
+           identical to the order that the IRC server sends to the bot. The
+           pre-processing  only splits it apart enough to determine the
+           keyword. If the proc returns 1, Eggdrop will not process the line
+           any further (this could cause unexpected behavior in some cases).
+         Module: server
+
+    (18) BOT
+         bind bot <flags> <command> <proc>
+         proc-name <from-bot> <command> <text>
+
+         Description: triggered by a message coming from another bot in
+           the botnet. The first word is the command and the rest becomes
+           the text argument; flags are ignored.
+         Module: core
+
+    (19) CHON (stackable)
+         bind chon <flags> <mask> <proc>
+         proc-name <handle> <idx>
+
+         Description: when someone first enters the party-line area of the
+           bot via dcc chat or telnet, this is triggered before they are
+           connected to a chat channel (so, yes, you can change the channel
+           in a 'chon' proc). mask is matched against the handle and supports
+           wildcards. This is NOT triggered when someone returns from the
+           file area, etc.
+         Module: core
+
+    (20) CHOF (stackable)
+         bind chof <flags> <mask> <proc>
+         proc-name <handle> <idx>
+
+         Description: triggered when someone leaves the party line to
+           disconnect from the bot. mask is matched against the handle and
+           can contain wildcards. Note that the connection may have already
+           been dropped by the user, so don't send output to the idx.
+         Module: core
+
+    (21) SENT (stackable)
+         bind sent <flags> <mask> <proc>
+         proc-name <handle> <nick> <path/to/file>
+
+         Description: after a user has successfully downloaded a file from
+           the bot, this binding is triggered. mask is matched against the
+           handle of the user that initiated the transfer and supports
+           wildcards. nick is the actual recipient (on IRC) of the file. The
+           path is relative to the dcc directory (unless the file transfer
+           was started by a script call to 'dccsend', in which case the path
+           is the exact path given in the call to 'dccsend').
+         Module: transfer
+
+    (22) RCVD (stackable)
+         bind rcvd <flags> <mask> <proc>
+         proc-name <handle> <nick> <path/to/file>
+
+         Description: triggered after a user uploads a file successfully.
+           mask is matched against the user's handle. nick is the IRC
+           nickname that the file transfer originated from. The path is
+           where the file ended up, relative to the dcc directory (usually
+           this is your incoming dir).
+         Module: transfer
+
+    (23) CHAT (stackable)
+         bind chat <flags> <mask> <proc>
+         proc-name <handle> <channel#> <text>
+
+         Description: when a user says something on the botnet, it invokes
+           this binding. Flags are ignored; handle could be a user on this
+           bot ("DronePup") or on another bot ("Eden at Wilde") and therefore
+           you can't rely on a local user record. The mask is checked against
+           the entire line of text and supports wildcards.
+
+           NOTE: If a BOT says something on the botnet, the BCST bind is
+           invoked instead.
+         Module: core
+
+    (24) LINK (stackable)
+         bind link <flags> <mask> <proc>
+         proc-name <botname> <via>
+
+         Description: triggered when a bot links into the botnet. botname
+           is the botnetnick of the bot that just linked in; via is the bot
+           it linked through. The mask is checked against the botnetnick of
+           the bot that linked and supports wildcards. flags are ignored.
+         Module: core
+
+    (25) DISC (stackable)
+         bind disc <flags> <mask> <proc>
+         proc-name <botname>
+
+         Description: triggered when a bot disconnects from the botnet for
+           whatever reason. Just like the link bind, flags are ignored; mask
+           is matched against the botnetnick of the bot that unlinked.
+           Wildcards are supported in mask.
+         Module: core
+
+    (26) SPLT (stackable)
+         bind splt <flags> <mask> <proc>
+         procname <nick> <user at host> <handle> <channel>
+
+         Description: triggered when someone gets netsplit on the channel.
+           Be aware that this may be a false alarm (it's easy to fake a
+           netsplit signoff message on some networks); mask may contain
+           wildcards and is matched against '#channel nick!user at host'.
+           Anyone who is SPLT will trigger a REJN or SIGN within the next
+           wait-split (defined in the config file) minutes.
+         Module: irc
+
+    (27) REJN (stackable)
+         bind rejn <flags> <mask> <proc>
+         procname <nick> <user at host> <handle> <channel>
+
+         Description: someone who was split has rejoined. mask can contain
+           wildcards, and is matched against '#channel nick!user at host'.
+         Module: irc
+
+    (28) FILT (stackable)
+         bind filt <flags> <mask> <proc>
+         procname <idx> <text>
+
+         Description: party line and file system users have their text sent
+           through filt before being processed. If the proc returns a blank
+           string, the text is considered parsed. Otherwise, the bot will use
+           the text returned from the proc and continue parsing that
+         Module: core
+
+    (29) NEED (stackable)
+         bind need <flags> <mask> <proc>
+         procname <channel> <type>
+
+         Description: this bind is triggered on certain events, like when
+           the bot needs operator status or the key for a channel. The
+           types are: op, unban, invite, limit, and key; the mask is
+           matched against '#channel type' and can contain wildcards. flags
+           are ignored.
+
+           Example:
+             bind need - "% op" needop < handles only need op
+             bind need - "*" needall   < handles all needs
+         Module: irc
+
+    (30) FLUD (stackable)
+         bind flud <flags> <type> <proc>
+         procname <nick> <user at host> <handle> <type> <channel>
+
+         Description: any floods detected through the flood control settings
+           (like 'flood-ctcp') are sent here before processing. If the proc
+           returns 1, no further action is taken on the flood; if the proc
+           returns 0, the bot will do its normal "punishment" for the flood.
+           The flood types are: pub, msg, join, or ctcp (and can be masked to
+           "*" for the bind); flags are ignored.
+         Module: server
+
+    (31) NOTE
+         bind note <flags> <handle> <proc>
+         procname <from> <to> <text>
+
+         Description: incoming notes (either from the party line, someone on
+           IRC, or someone on another bot on the botnet) are checked against
+           these binds before being processed. If a bind exists, the bot will
+           not deliver the note. The handle must be an exact match (no wildcards),
+           but it is not case sensitive; flags are ignored.
+         Module: core
+
+    (32) ACT (stackable)
+         bind act <flags> <mask> <proc>
+         proc-name <handle> <channel#> <action>
+
+         Description: when someone does an action on the botnet, it invokes
+           this binding. flags are ignored; the mask is matched against the
+           text of the action and can support wildcards.
+         Module: core
+
+   (33) WALL (stackable)
+        bind wall <flags> <mask> <proc>
+        proc-name <from> <msg>
+
+        Description: when the bot receives a wallops, it invokes this
+          binding. flags are ignored; the mask is matched against the text
+          of the wallops msg. Note that RFC shows the server name as a source
+          of the message, whereas many IRCds send the nick!user at host of the
+          actual sender, thus, Eggdrop will not parse it at all, but simply
+          pass it to bind in its original form.
+        Module: server
+
+    (34) BCST (stackable)
+         bind bcst <flags> <mask> <proc>
+         proc-name <botname> <channel#> <text>
+
+         Description: when a bot broadcasts something on the botnet (see
+           'dccbroadcast' above), it invokes this binding. flags are ignored;
+           the mask is matched against the message text and can contain
+           wildcards. 'channel' argument will always be '-1' since broadcasts
+           are not directed to any partyline channel.
+
+           It is also invoked when a BOT (not a person, as with the CHAT bind)
+           'says' something on a channel. In this case, the 'channel' argument
+           will be a valid channel, and not '-1'.
+         Module: core
+
+    (35) CHJN (stackable)
+         bind chjn <flags> <mask> <proc>
+         proc-name <botname> <handle> <channel#> <flag> <idx> <user at host>
+
+         Description: when someone joins a botnet channel, it invokes this
+           binding. The mask is matched against the channel and can contain
+           wildcards. flag is one of: * (owner), + (master), @ (op), or %
+           (botnet master).
+         Module: core
+
+    (36) CHPT (stackable)
+         bind chpt <flags> <mask> <proc>
+         proc-name <botname> <handle> <idx> <channel#>
+
+         Description: when someone parts a botnet channel, it invokes this
+           binding. flags are ignored; the mask is matched against the
+           channel and can contain wildcards.
+         Module: core
+
+    (37) TIME (stackable)
+         bind time <flags> <mask> <proc>
+         proc-name <minute> <hour> <day> <month> <year>
+
+         Description: allows you to schedule procedure calls at certain
+           times. mask matches 5 space separated integers of the form:
+           "minute hour day month year". minute, hour, day, month have a
+           zero padding so they are exactly two characters long; year is
+           extended to four characters in the same way.
+         Module: core
+
+    (38) AWAY (stackable)
+         bind away <flags> <mask> <proc>
+         proc-name <botname> <idx> <text>
+
+         Description: triggers when a user goes away or comes back on the
+           botnet. text is the reason than has been specified (text is ""
+           when returning). mask is matched against the botnet-nick of the
+           bot the user is connected to and supports wildcards. flags are
+           ignored.
+         Module: core
+
+    (39) LOAD (stackable)
+         bind load <flags> <mask> <proc>
+         proc-name <module>
+
+         Description: triggers when a module is loaded. mask is matched
+           against the name of the loaded module and supports wildcards;
+           flags are ignored.
+         Module: core
+
+    (40) UNLD (stackable)
+         bind unld <flags> <mask> <proc>
+         proc-name <module>
+
+         Description: triggers when a module is unloaded. mask is matched
+           against the name of the unloaded module and supports wildcards;
+           flags are ignored.
+         Module: core
+
+    (41) NKCH (stackable)
+         bind nkch <flags> <mask> <proc>
+         proc-name <oldhandle> <newhandle>
+
+         Description: triggered whenever a local user's handle is changed
+           (in the userfile). mask is matched against the user's old handle
+           and can contain wildcards; flags are ignored.
+         Module: core
+
+    (42) EVNT (stackable)
+         bind evnt <flags> <type> <proc>
+         proc-name <type>
+
+         Description: triggered whenever one of these events happen. flags
+           are ignored; valid events are:
+             sighup          - called on a kill -HUP <pid>
+             sigterm         - called on a kill -TERM <pid>
+             sigill          - called on a kill -ILL <pid>
+             sigquit         - called on a kill -QUIT <pid>
+             save            - called when the userfile is saved
+             rehash          - called just after a rehash
+             prerehash       - called just before a rehash
+             prerestart      - called just before a restart
+             logfile         - called when the logs are switched daily
+             loaded          - called when the bot is done loading
+             userfile-loaded - called after userfile has been loaded
+
+             connect-server    - called just before we connect to an IRC server
+             init-server       - called when we actually get on our IRC server
+             disconnect-server - called when we disconnect from our IRC server
+         Module: core
+
+    (43) LOST (stackable)
+         bind lost <flags> <mask> <proc>
+         proc-name <handle> <nick> <path> <bytes-transferred> <length-of-file>
+
+         Description: triggered when a DCC SEND transfer gets lost, such as
+           when the connection is terminated before all data was successfully
+           sent/received. This is typically caused by a user abort.
+         Module: transfer
+
+    (44) TOUT (stackable)
+         bind tout <flags> <mask> <proc>
+         proc-name <handle> <nick> <path> <bytes-transferred> <length-of-file>
+
+         Description: triggered when a DCC SEND transfer times out. This may
+           either happen because the dcc connection was not accepted or
+           because the data transfer stalled for some reason.
+         Module: transfer
+
+
+  (B) RETURN VALUES
+
+    Several bindings pay attention to the value you return from the proc
+    (using 'return <value>'). Usually, they expect a 0 or 1, and returning
+    an empty return is interpreted as a 0. Be aware if you omit the return
+    statement, the result of the last Tcl command executed will be returned
+    by the proc. This will not likely produce the results you intended (this
+    is a "feature" of Tcl).
+
+    Here's a list of the bindings that use the return value from procs
+    they trigger:
+
+    (1) MSG   Return 1 to make the command get logged like so:
+                (nick!user at host) !handle! command
+
+    (2) DCC   Return 1 to make the command get logged like so:
+                #handle# command
+
+    (3) FIL   Return 1 to make the command get logged like so:
+                #handle# files: command
+
+    (4) PUB   Return 1 to make the command get logged like so:
+                <<nick>> !handle! command
+
+    (5) CTCP  Return 1 to ask the bot not to process the CTCP command on its
+              own. Otherwise, it would send its own response to the CTCP
+              (possibly an error message if it doesn't know how to deal with
+              it).
+
+    (6) FILT  Return "" to indicate the text has been processed, and the bot
+              should just ignore it. Otherwise, it will treat the text like
+              any other.
+
+    (7) FLUD  Return 1 to ask the bot not to take action on the flood.
+              Otherwise it will do its normal punishment.
+
+    (8) RAW   Return 1 to ask the bot not to process the server text. This
+              can affect the bot's performance by causing it to miss things
+              that it would normally act on -- you have been warned.
+
+    (9) CHON  Return 1 to ask the bot not to process the partyline join event.
+
+    (10) CHOF  Return 1 to ask the bot not to process the partyline part event.
+
+    (11) WALL  Return 1 to make the command get logged like so:
+           !nick! msg
+
+*** CONTROL PROCEDURES ***
+
+  Using the 'control' command, you can put a DCC connection (or outgoing
+  TCP connection) in control of a script. All text received from the
+  connection is sent to the proc you specify. All outgoing text should
+  be sent with 'putdcc'.
+
+  The control procedure is called with these parameters:
+    procname <idx> <input-text>
+
+  This allows you to use the same proc for several connections. The
+  idx will stay the same until the connection is dropped. After that,
+  it will probably get reused for a later connection.
+
+  To indicate that the connection has closed, your control procedure
+  will be called with blank text (the input-text will be ""). This
+  is the only time it will ever be called with "" as the text, and it
+  is the last time your proc will be called for that connection. Don't
+  call killdcc on the idx when text is blank, it will always fail with
+  "invalid idx".
+
+  If you want to hand control of your connection back to Eggdrop, your
+  proc should return 1. Otherwise, return 0 to retain control.
+
+
+*** TCP CONNECTIONS ***
+
+  Eggdrop allows you to make two types of TCP ("telnet") connections:
+  outgoing and incoming. For an outgoing connection, you specify the
+  remote host and port to connect to. For an incoming connection, you
+  specify a port to listen on.
+
+  All of the connections are *event driven*. This means that the bot will
+  trigger your procs when something happens on the connection, and your
+  proc is expected to return as soon as possible. Waiting in a proc for
+  more input is a no-no.
+
+  To initiate an outgoing connection, use:
+    set idx [connect <hostname> <port>]
+
+  $idx now contains a new DCC entry for the outgoing connection.
+
+  All connections use non-blocking (commonly called "asynchronous",
+  which is a misnomer) I/O. Without going into a big song and dance
+  about asynchronous I/O, what this means to you is:
+
+    * assume the connection succeeded immediately
+    * if the connection failed, an EOF will arrive for that idx
+
+  The only time a 'connect' will return an error is if you give it a
+  hostname that can't be resolved (this is considered a "DNS error").
+  Otherwise, it will appear to have succeeded. If the connection failed,
+  you will immediately get an EOF.
+
+  Right after doing a 'connect' call, you should set up a 'control' for
+  the new idx (see the section above). From then on, the connection will
+  act just like a normal DCC connection that has been put under the control
+  of a script. If you ever return "1" from the control proc (indicating
+  that you want control to return to Eggdrop), the bot will just close the
+  connection and dispose of it. Other commands that work on normal DCC
+  connections, like 'killdcc' and 'putdcc', will work on this idx, too.
+  The 'killdcc' command will fail with "invalid idx" if you attempt to use
+  it on a closed socket.
+
+  To create a listen port, use:
+    listen <port> script <proc>
+
+  Procs should be declared as:
+    <procname> <newidx>
+
+  For example:
+    listen 6687 script listen:grab
+
+    proc listen:grab {newidx} {
+      control $newidx listen:control
+    }
+
+    When a new connection arrives in port 6687, Eggdrop will create a new
+    idx for the connection. That idx is sent to 'listen:grab'. The proc
+    immediately puts this idx under control. Once 'listen:grab' has been
+    called, the idx behaves exactly like an outgoing connection would.
+
+  The best way to learn how to use these commands is to find a script that
+  uses them and follow it carefully. However, hopefully this has given you
+  a good start.
+
+
+*** MATCH CHARACTERS ***
+
+  Many of the bindings allow match characters in the arguments. Here
+  are the four special characters:
+
+  ?  matches any single character
+  *  matches 0 or more characters of any type
+  %  matches 0 or more non-space characters (can be used to match a single
+     word)
+  ~  matches 1 or more space characters (can be used for whitespace between
+     words)
+    _____________________________________________________________________
+
+  Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Eggheads Development Team
Index: eggdrop1.7/doc/TCL-SCRIPTS
diff -u eggdrop1.7/doc/TCL-SCRIPTS:1.1 eggdrop1.7/doc/TCL-SCRIPTS:removed
--- eggdrop1.7/doc/TCL-SCRIPTS:1.1	Thu Sep  2 15:27:00 2004
+++ eggdrop1.7/doc/TCL-SCRIPTS	Thu Sep  2 15:44:19 2004
@@ -1,2279 +0,0 @@
-$Id: TCL-SCRIPTS,v 1.1 2004/09/02 20:27:00 wcc Exp $
-
-Eggdrop Tcl Commands
-Last revised: August 24, 2004
-    _____________________________________________________________________
-
-                           Eggdrop Tcl Commands
-
-
-This is an exhaustive list of all the Tcl commands added to Eggdrop. All
-of the normal Tcl built-in commands are still there, of course, but you
-can also use these to manipulate features of the bot. They are listed
-according to category.
-
-This list is accurate for Eggdrop v1.7.0. Scripts written for v1.3/v1.4
-series of Eggdrop should probably work with a few minor modifications
-depending on the script. 1.6 scripts should work without modification.
-Scripts which were written for  v0.9, v1.0, v1.1 or v1.2 will probably
-not work without modification. Commands which have been changed in this
-version of Eggdrop (or are just new commands) are marked with vertical
-bars (|) on the left.
-
-
-*** OUTPUT COMMANDS ***
-
-  putserv <text> [options]
-    Description: sends text to the server, like '.dump' (intended for direct
-      server commands); output is queued so that the bot won't flood itself
-      off the server.
-    Options:
-      -next:   push messages to the front of the queue
-      -normal: no effect
-    Returns: nothing
-    Module: server
-
-  puthelp <text> [options]
-    Description: sends text to the server, like 'putserv', but it uses a
-      different queue intended for sending messages to channels or people.
-    Options:
-      -next:   push messages to the front of the queue
-      -normal: no effect
-    Returns: nothing
-    Module: server
-
-  putquick <text> [options]
-    Description: sends text to the server, like 'putserv', but it uses a
-      different (and faster) queue.
-    Options:
-      -next:   push messages to the front of the queue
-      -normal: no effect
-    Returns: nothing
-    Module: server
-
-  putkick <channel> <nick,nick,...> [reason]
-    Description: sends kicks to the server and tries to put as many nicks
-      into one kick command as possible.
-    Returns: nothing
-    Module: irc
-
-  putlog <text>
-    Description: sends text to the bot's logfile, marked as 'misc' (o)
-    Returns: nothing
-    Module: core
-
-  putcmdlog <text>
-    Description: sends text to the bot's logfile, marked as 'command' (c)
-    Returns: nothing
-    Module: core
-
-  putxferlog <text>
-    Description: sends text to the bot's logfile, marked as 'file-area' (x)
-    Returns: nothing
-    Module: core
-
-  putloglev <level(s)> <channel> <text>
-    Description: sends text to the bot's logfile, tagged with all of the
-      valid levels given. Use "*" to indicate all log levels.
-    Returns: nothing
-    Module: core
-
-  dumpfile <nick> <filename>
-    Description: dumps file from the help/text directory to a user on IRC via
-      msg (one line per msg). The user has no flags, so the flag bindings
-      won't work within the file.
-    Returns: nothing
-    Module: core
-
-  queuesize [queue]
-    Returns: the number of messages in all queues. If a queue is specified,
-      only the size of this queue is returned. Valid queues are: mode,
-      server, help.
-    Module: server
-
-  clearqueue <queue>
-    Description: removes all messages from a queue. Valid arguments are:
-      mode, server, help, or all.
-    Returns: the number of deleted lines from the specified queue.
-    Module: server
-
-
-*** USER RECORD MANIPULATION COMMANDS ***
-
-  countusers
-    Returns: number of users in the bot's database
-    Module: core
-
-  validuser <handle>
-    Returns: 1 if a user by that name exists; 0 otherwise
-    Module: core
-
-  finduser <nick!user at host>
-    Description: finds the user record which most closely matches the given
-      nick!user at host
-    Returns: the handle found, or "*" if none
-    Module: core
-
-  userlist [flags]
-    Returns: a list of users on the bot. You can use the flag matching
-      system here ([global]{&/|}[chan]{&/|}[bot]). '&' specifies "and";
-      '|' specifies "or".
-    Module: core
-
-  passwdok <handle> <pass>
-    Description: checks the password given against the user's password.
-      Check against the password "" (a blank string) or "-" to find out
-      if a user has no password set.
-    Returns: 1 if the password matches for that user; 0 otherwise
-    Module: core
-
-  getuser <handle> <entry-type> [extra info]
-    Description: an interface to the new generic userfile support. Valid
-      entry types are:
-        BOTFL   - returns the current bot-specific flags for the user
-                  (bot-only)
-        BOTADDR - returns a list containing the bot's address, telnet port,
-                  and relay port (bot-only)
-        HOSTS   - returns a list of hosts for the user
-        LASTON  - returns a list containing the unixtime last seen and the
-                  last seen place. LASTON #channel returns the time last
-                  seen time for the channel or 0 if no info exists.
-        INFO    - returns the user's global info line
-        XTRA    - returns the user's XTRA info
-        COMMENT - returns the master-visible only comment for the user
-        EMAIL   - returns the user's e-mail address
-        URL     - returns the user's url
-        HANDLE  - returns the user's handle as it is saved in the userfile
-        PASS    - returns the user's encrypted password
-    Returns: info specific to each entry-type
-    Module: core
-
-  setuser <handle> <entry-type> [extra info]
-    Description: this is the counterpart of getuser. It lets you set the
-      various values. Other then the ones listed below, the entry-types are
-      the same as getuser's.
-        PASS    - sets a users password (no third arg will clear it)
-        HOSTS   - if used with no third arg, all hosts for the user will be
-                  be cleared. Otherwise, *1* hostmask is added :P
-        LASTON  - This setting has 3 forms. "setuser <handle> LASTON
-                  <unixtime> <place>" sets global LASTON time, "setuser
-                  <handle> LASTON <unixtime>" sets global LASTON time
-                  (leaving the place field empty), and "setuser <handle>
-                  LASTON <unixtime> <channel>" sets a users LASTON time for
-                  a channel (if it is a  valid channel).
-    Returns: nothing
-    Module: core
-
-  chhandle <old-handle> <new-handle>
-    Description: changes a user's handle
-    Returns: 1 on success; 0 if the new handle is invalid or already used,
-      or if the user can't be found
-    Module: core
-
-  chattr <handle> [changes [channel]]
-    Description: changes the attributes for a user record, if you include any.
-      Changes are of the form '+f', '-o', '+dk', '-o+d', etc. If changes are
-      specified in the format of |<changes> <channel>, the channel-specific
-      flags for that channel are altered. You can now use the +o|-o #channel
-      format here too.
-    Returns: new flags for the user (if you made no changes, the current
-      flags are returned). If a channel was specified, the global AND the
-      channel-specific flags for that channel are returned in the format of
-      globalflags|channelflags. "*" is returned if the specified user does
-      not exist.
-    Module: core
-
-  botattr <handle> [changes [channel]]
-    Description: similar to chattr except this modifies bot flags rather
-      than normal user attributes.
-    Returns: new flags for the bot (if you made no changes, the current
-      flags are returned). If a channel was specified, the global AND the
-      channel-specific flags for that channel are returned in the format of
-      globalflags|channelflags. "*" is returned if the specified bot does
-      not exist.
-    Module: core
-
-  matchattr <handle> <flags> [channel]
-    Returns: 1 if the specified user has the specified flags; 0 otherwise
-    Module: core
-
-  adduser <handle> [hostmask]
-    Description: creates a new user entry with the handle and hostmask given
-      (with no password and the default flags)
-    Returns: 1 if successful; 0 if the handle already exists
-    Module: core
-
-  addbot <handle> <address>
-    Description: adds a new bot to the userlist with the handle and bot
-      address given (with no password and no flags)
-    Returns: 1 if successful; 0 if the bot already exists
-    Module: core
-
-  deluser <handle>
-    Description: attempts to erase the user record for a handle
-    Returns: 1 if successful, 0 if no such user exists
-    Module: core
-
-  delhost <handle> <hostmask>
-    Description: deletes a hostmask from a user's host list
-    Returns: 1 on success; 0 if the hostmask (or user) doesn't exist
-    Module: core
-
-  addchanrec <handle> <channel>
-    Description: adds a channel record for a user
-    Returns: 1 on success; 0 if the user or channel does not exist
-    Module: channels
-
-  delchanrec <handle> <channel>
-    Description: removes a channel record for a user. This includes all
-      associated channel flags.
-    Returns: 1 on success; 0 if the user or channel does not exist
-    Module: channels
-
- haschanrec <handle> <channel>
-    Returns: 1 if the given handle has a chanrec for the specified channel;
-      0 otherwise
-    Module: channels
-
-  getchaninfo <handle> <channel>
-    Returns: info line for a specific channel (behaves just like 'getinfo')
-    Module: channels
-
-  setchaninfo <handle> <channel> <info>
-   Description: sets the info line on a specific channel for a user. If
-     info is "none", it will be removed.
-   Returns: nothing
-   Module: channels
-
-  newchanban <channel> <ban> <creator> <comment> [lifetime] [options]
-    Description: adds a ban to the ban list of a channel; creator is given
-      credit for the ban in the ban list. lifetime is specified in
-      minutes. If lifetime is not specified, ban-time (usually 60) is
-      used. Setting the lifetime to 0 makes it a permanent ban.
-    Options:
-      sticky: forces the ban to be always active on a channel, even
-              with dynamicbans on
-      none:   no effect
-    Returns: nothing
-    Module: channels
-
-  newban <ban> <creator> <comment> [lifetime] [options]
-    Description: adds a ban to the global ban list (which takes effect on
-      all channels); creator is given credit for the ban in the ban list.
-      lifetime is specified in minutes. If lifetime is not specified,
-      global-ban-time (usually 60) is used. Setting the lifetime to 0 makes
-      it a permanent ban.
-    Options:
-      sticky: forces the ban to be always active on a channel, even
-              with dynamicbans on
-      none:   no effect
-    Returns: nothing
-    Module: channels
-
-  newchanexempt <channel> <exempt> <creator> <comment> [lifetime] [options]
-    Description: adds a exempt to the exempt list of a channel; creator is
-      given credit for the exempt in the exempt list. lifetime is specified
-      in minutes. If lifetime is not specified, exempt-time (usually 60) is
-      used. Setting the lifetime to 0 makes it a permanent exempt. The exempt
-      will not be removed until the corresponding ban has been removed. For
-      timed bans, once the time period has expired, the exempt will not be
-      removed until the corresponding ban has either expired or been removed.
-    Options:
-      sticky: forces the exempt to be always active on a channel, even
-              with dynamicexempts on
-      none:   no effect
-    Returns: nothing
-    Module: channels
-
-  newexempt <exempt> <creator> <comment> [lifetime] [options]
-    Description: adds a exempt to the global exempt list (which takes effect
-      on all channels); creator is given credit for the exempt in the exempt
-      list. lifetime is specified in minutes. If lifetime is not specified,
-      exempt-time (usually 60) is used. Setting the lifetime to 0 makes it a
-      permanent exempt. The exempt will not be removed until the
-      corresponding ban has been removed.
-    Options:
-      sticky: forces the exempt to be always active on a channel, even
-              with dynamicexempts on
-      none:   no effect
-    Returns: nothing
-    Module: channels
-
-  newchaninvite <channel> <invite> <creator> <comment> [lifetime] [options]
-    Description: adds a invite to the invite list of a channel; creator is
-      given credit for the invite in the invite list. lifetime is specified
-      in minutes. If lifetime is not specified, invite-time (usually 60) is
-      used. Setting the lifetime to 0 makes it a permanent invite. The invite
-      will not be removed until the channel has gone -i.
-    Options:
-      sticky: forces the invite to be always active on a channel, even
-              with dynamicinvites on
-      none:   no effect
-    Returns: nothing
-    Module: channels
-
-  newinvite <invite> <creator> <comment> [lifetime] [options]
-    Description: adds a invite to the global invite list (which takes effect
-      on all channels); creator is given credit for the invite in the invite
-      list. lifetime is specified in minutes. If lifetime is not specified,
-      invite-time (usually 60) is used. Setting the lifetime to 0 makes it
-      a permanent invite. The invite will not be removed until the channel
-      has gone -i.
-    Options:
-      sticky: forces the invite to be always active on a channel, even
-              with dynamicinvites on
-      none:   no effect
-    Returns: nothing
-    Module: channels
-
-  stick <banmask> [channel]
-    Description: makes a ban sticky, or, if a channel is specified, then it
-      is set sticky on that channel only.
-    Returns: 1 on success; 0 otherwise
-    Module: channels
-
-  unstick <banmask> [channel]
-    Description: makes a ban no longer sticky, or, if a channel is
-      specified, then it is unstuck on that channel only.
-    Returns: 1 on success; 0 otherwise
-    Module: channels
-
-  stickexempt <exemptmask> [channel]
-    Description: makes an exempt sticky, or, if a channel is specified,
-      then it is set sticky on that channel only.
-    Returns: 1 on success; 0 otherwise
-    Module: channels
-
-  unstickexempt <exemptmask> [channel]
-    Description: makes an exempt no longer sticky, or, if a channel is
-      specified, then it is unstuck on that channel only.
-    Returns: 1 on success; 0 otherwise
-    Module: channels
-
-  stickinvite <invitemask> [channel]
-    Description: makes an invite sticky, or, if a channel is specified,
-      then it is set sticky on that channel only.
-    Returns: 1 on success; 0 otherwise
-    Module: channels
-
-  unstickinvite <invitemask> [channel]
-    Description: makes an invite no longer sticky, or, if a channel is
-      specified, then it is unstuck on that channel only.
-    Returns: 1 on success; 0 otherwise
-    Module: channels
-
-  killchanban <channel> <ban>
-    Description: removes a ban from the ban list for a channel
-    Returns: 1 on success; 0 otherwise
-    Module: channels
-
-  killban <ban>
-    Description: removes a ban from the global ban list
-    Returns: 1 on success; 0 otherwise
-    Module: channels
-
-  killchanexempt <channel> <exempt>
-    Description: removes an exempt from the exempt list for a channel
-    Returns: 1 on success; 0 otherwise
-    Module: channels
-
-  killexempt <exempt>
-    Description: removes an exempt from the global exempt list
-    Returns: 1 on success; 0 otherwise
-    Module: channels
-
-  killchaninvite <channel> <invite>
-    Description: removes an invite from the invite list for a channel
-    Returns: 1 on success; 0 otherwise
-    Module: channels
-
-  killinvite <invite>
-    Description: removes an invite from the global invite list
-    Returns: 1 on success; 0 otherwise
-    Module: channels
-
-  ischanjuped <channel>
-    Returns: 1 if the channel is juped, and the bot is unable to join; 0
-      otherwise
-    Module: channels
-
-  isban <ban> [channel]
-    Returns: 1 if the specified ban is in the global ban list; 0 otherwise.
-      If a channel is specified, that channel's ban list is checked as well.
-    Module: channels
-
-  ispermban <ban> [channel]
-    Returns: 1 if the specified ban is in the global ban list AND is marked
-      as permanent; 0 otherwise. If a channel is specified, that channel's
-      ban list is checked as well.
-    Module: channels
-
-  isexempt <exempt> [channel]
-    Returns: 1 if the specified exempt is in the global exempt list; 0
-      otherwise. If a channel is specified, that channel's exempt list is
-      checked as well.
-    Module: channels
-
-  ispermexempt <exempt> [channel]
-    Returns: 1 if the specified exempt is in the global exempt list AND is
-      marked as permanent; 0 otherwise. If a channel is specified, that
-      channel's exempt list is checked as well.
-    Module: channels
-
-  isinvite <invite> [channel]
-    Returns: 1 if the specified invite is in the global invite list; 0
-      otherwise. If a channel is specified, that channel's invite list is
-      checked as well.
-    Module: channels
-
-  isperminvite <invite> [channel]
-    Returns: 1 if the specified invite is in the global invite list AND is
-      marked as permanent; 0 otherwise. If a channel is specified, that
-      channel's invite list is checked as well.
-    Module: channels
-
-  isbansticky <ban> [channel]
-    Returns: 1 if the specified ban is marked as sticky in the global ban
-      list; 0 otherwise. If a channel is specified, that channel's ban list
-      is checked as well.
-    Module: channels
-
-  isexemptsticky <exempt> [channel]
-    Returns: 1 if the specified exempt is marked as sticky in the global
-      exempt list; 0 otherwise. If a channel is specified, that channel's
-      exempt list is checked as well.
-    Module: channels
-
-  isinvitesticky <invite> [channel]
-    Returns: 1 if the specified invite is marked as sticky in the global
-      invite list; 0 otherwise. If a channel is specified, that channel's
-      invite list is checked as well.
-    Module: channels
-
-  matchban <nick!user at host> [channel]
-    Returns: 1 if the specified nick!user at host matches a ban in the global
-      ban list; 0 otherwise. If a channel is specified, that channel's ban
-      list is checked as well.
-    Module: channels
-
-  matchexempt <nick!user at host> [channel]
-    Returns: 1 if the specified nick!user at host matches an exempt in the
-      global exempt list; 0 otherwise. If a channel is specified, that
-      channel's exempt list is checked as well.
-    Module: channels
-
-  matchinvite <nick!user at host> [channel]
-    Returns: 1 if the specified nick!user at host matches an invite in the
-      global invite list; 0 otherwise. If a channel is specified, that
-      channel's invite list is checked as well.
-    Module: channels
-
-  banlist [channel]
-    Returns: a list of global bans, or, if a channel is specified, a
-      list of channel-specific bans. Each entry is a sublist containing:
-      hostmask, comment, expiration timestamp, time added, last time
-      active, and creator. The three timestamps are in unixtime format.
-    Module: channels
-
-  exemptlist [channel]
-    Returns: a list of global exempts, or, if a channel is specified, a
-      list of channel-specific exempts. Each entry is a sublist containing:
-      hostmask, comment, expiration timestamp, time added, last time
-      active, and creator. The three timestamps are in unixtime format.
-    Module: channels
-
-  invitelist [channel]
-    Returns: a list of global invites, or, if a channel is specified, a
-      list of channel-specific invites. Each entry is a sublist containing:
-      hostmask, comment, expiration timestamp, time added, last time
-      active, and creator. The three timestamps are in unixtime format.
-    Module: channels
-
-  newignore <hostmask> <creator> <comment> [lifetime]
-    Description: adds an entry to the ignore list; creator is given credit
-      for the ignore. lifetime is how many minutes until the ignore expires
-      and is removed. If lifetime is not specified, ignore-time (usually 60)
-      is used. Setting the lifetime to 0 makes it a permanent ignore.
-    Returns: nothing
-    Module: core
-
-  killignore <hostmask>
-    Description: removes an entry from the ignore list
-    Returns: 1 if successful; 0 otherwise
-    Module: core
-
-  ignorelist
-    Returns: a list of ignores. Each entry is a sublist containing:
-      hostmask, comment, expiration timestamp, time added, and creator.
-      The timestamps are in unixtime format.
-    Module: core
-
-  isignore <hostmask>
-    Returns: 1 if the ignore is in the list; 0 otherwise
-    Module: core
-
-  save
-    Description: writes the user and channel files to disk
-    Returns: nothing
-    Module: core
-
-  reload
-    Description: loads the userfile from disk, replacing whatever is in
-      memory
-    Returns: nothing
-    Module: core
-
-  backup
-    Description: makes a simple backup of the userfile that's on disk.
-      If the channels module is loaded, this also makes a simple backup
-      of the channel file.
-    Returns: nothing
-    Module: core
-
-  getting-users
-    Returns: 1 if the bot is currently downloading a userfile from
-      a sharebot (and hence, user records are about to drastically
-      change); 0 if not
-    Module: core
-
-*** CHANNEL COMMANDS ***
-
-  channel add <name> [option-list]
-    Description: adds a channel record for the bot to monitor. The full
-      list of possible options are given in doc/settings/mod.channels. Note
-      that the channel options must be in a list (enclosed in {}).
-    Returns: nothing
-    Module: channels
-
-  channel set <name> <options...>
-    Description: sets options for the channel specified. The full list of
-      possible options are given in doc/settings/mod.channels.
-    Returns: nothing
-    Module: channels
-
-  channel info <name>
-    Returns: a list of info about the specified channel's settings.
-    Module: channels
-
-  channel get <name> <setting>
-    Returns: The value of the setting you specify. For flags, a value of 0
-      means it is disabled (-), and non-zero means enabled (+).
-    Module: channels
-
-  channel remove <name>
-    Description: removes a channel record from the bot and makes the bot no
-      longer monitor the channel
-    Returns: nothing
-    Module: channels
-
-  savechannels
-    Description: saves the channel settings to the channel-file if one is
-      defined.
-    Returns: nothing
-    Module: channels
-
-  loadchannels
-    Description: reloads the channel settings from the channel-file if one
-      is defined.
-    Returns: nothing
-    Module: channels
-
-  channels
-    Returns: a list of the channels the bot has a channel record for
-    Module: channels
-
- channame2dname <channel-name>
- chandname2name <channel-dname>
-   Description: these two functions are important to correctly support
-     !channels. The bot differentiates between channel description names
-     (chan dnames) and real channel names (chan names). The chan dnames
-     are what you would normally call the channel, such as "!channel". The
-     chan names are what the IRC server uses to identify the channel. They
-     consist of the chan dname prefixed with an ID; such as "!ABCDEchannel".
-
-     For bot functions like isop, isvoice, etc. you need to know the chan
-     dnames. If you communicate with the server, you usually get the chan
-     name, though. That's what you need the channame2dname function for.
-
-     If you only have the chan dname and want to directly send raw server
-     commands, use the chandname2name command.
-
-     NOTE: For non-!channels, chan dname and chan name are the same.
-   Module: irc
-
-  isbotnick <nick>
-    Returns: 1 if the nick matches the botnick; 0 otherwise
-    Module: server
-
-  botisop [channel]
-    Returns: 1 if the bot has ops on the specified channel (or any channel
-      if no channel is specified); 0 otherwise
-    Module: irc
-
-  botishalfop [channel]
-    Returns: 1 if the bot has halfops on the specified channel (or any channel
-      if no channel is specified); 0 otherwise
-    Module: irc
-
-  botisvoice [channel]
-    Returns: 1 if the bot has a voice on the specified channel (or any
-      channel if no channel is specified); 0 otherwise
-    Module: irc
-
-  botonchan [channel]
-   Returns: 1 if the bot is on the specified channel (or any channel if
-     no channel is specified); 0 otherwise
-   Module: irc
-
-  isop <nickname> [channel]
-    Returns: 1 if someone by the specified nickname is on the channel (or
-      any channel if no channel name is specified) and has ops; 0 otherwise
-    Module: irc
-
-  ishalfop <nickname> [channel]
-    Returns: 1 if someone by the specified nickname is on the channel (or
-      any channel if no channel name is specified) and has halfops; 0 otherwise
-    Module: irc
-
-  wasop <nickname> <channel>
-    Returns: 1 if someone that just got opped/deopped in the chan had op
-      before the modechange; 0 otherwise
-    Module: irc
-
-  washalfop <nickname> <channel>
-    Returns: 1 if someone that just got halfopped/dehalfopped in the chan
-      had halfop before the modechange; 0 otherwise
-    Module: irc
-
-  isvoice <nickname> [channel]
-    Returns: 1 if someone by that nickname is on the channel (or any
-      channel if no channel is specified) and has voice (+v); 0 otherwise
-    Module: irc
-
-  onchan <nickname> [channel]
-    Returns: 1 if someone by that nickname is on the specified channel (or
-      any channel if none is specified); 0 otherwise
-    Module: irc
-
-  nick2hand <nickname> [channel]
-    Returns: the handle of a nickname on a channel. If a channel is not
-      specified, the bot will check all of its channels. If the nick is
-      not found, "" is returned. If the nick is found but does not have
-      a handle, "*" is returned.
-    Module: irc
-
-  hand2nick <handle> [channel]
-    Returns: nickname of the first person on the specified channel (if one
-      is specified) whose nick!user at host matches the given handle; "" is
-      returned if no match is found. If no channel is specified, all channels
-      are checked.
-    Module: irc
-
-  handonchan <handle> [channel]
-    Returns: 1 if the the nick!user at host for someone on the channel (or any
-      channel if no channel name is specified) matches for the handle given;
-      0 otherwise
-    Module: irc
-
-  ischanban <ban> <channel>
-    Returns: 1 if the specified ban is on the given channel's ban list
-      (not the bot's banlist for the channel)
-    Module: irc
-
-  ischanexempt <exempt> <channel>
-    Returns: 1 if the specified exempt is on the given channel's exempt
-      list (not the bot's exemptlist for the channel)
-    Module: irc
-
-  ischaninvite <invite> <channel>
-    Returns: 1 if the specified invite is on the given channel's invite
-      list (not the bot's invitelist for the channel)
-    Module: irc
-
-  chanbans <channel>
-    Returns: a list of the current bans on the channel. Each element is
-      a sublist of the form {<ban> <bywho> <age>}. age is seconds from the
-      bot's point of view
-    Module: irc
-
-  chanexempts <channel>
-    Returns: a list of the current exempts on the channel. Each element is
-      a sublist of the form {<exempts> <bywho> <age>}. age is seconds from the
-      bot's point of view
-    Module: irc
-
-  chaninvites <channel>
-    Returns: a list of the current invites on the channel. Each element is
-      a sublist of the form {<invites> <bywho> <age>}. age is seconds from the
-      bot's point of view
-    Module: irc
-
-  resetbans <channel>
-    Description: removes all bans on the channel that aren't in the bot's
-      ban list and refreshes any bans that should be on the channel but
-      aren't
-    Returns: nothing
-    Module: irc
-
-  resetexempts <channel>
-    Description: removes all exempt on the channel that aren't in the bot's
-      exempt list and refreshes any exempts that should be on the channel
-      but aren't
-    Returns: nothing
-    Module: irc
-
-  resetinvites <channel>
-    Description: removes all invites on the channel that aren't in the bot's
-      invite list and refreshes any invites that should be on the channel
-      but aren't
-    Returns: nothing
-    Module: irc
-
-  resetchan <channel>
-    Description: rereads in the channel info from the server
-    Returns: nothing
-    Module: irc
-
-  getchanhost <nickname> [channel]
-    Returns: user at host of the specified nickname (the nickname is not included
-      in the returned host). If a channel is not specified, bot will check
-      all of its channels. If the nickname is not on the channel(s), "" is
-      returned.
-    Module: irc
-
-  getchanjoin <nickname> <channel>
-    Returns: timestamp (unixtime format) of when the specified nickname
-      joined the channel
-    Module: irc
-
-  onchansplit <nick> [channel]
-    Returns: 1 if that nick is split from the channel (or any channel if no
-      channel is specified); 0 otherwise
-    Module: irc
-
-  chanlist <channel> [flags[&chanflags]]
-    Description: flags are any global flags; the '&' denotes to look for
-      channel specific flags. Examples:
-        n         (Global Owner)
-        &n        (Channel Owner)
-        o&m       (Global Op, Channel Master)
-      Now you can use even more complex matching of flags, including +&- flags
-      and & or | (and or or) matching.
-    Returns: list of nicknames currently on the bot's channel that have all
-      of the flags specified;. If no flags are given, all of the nicknames
-      are returned. Please note that if you're executing chanlist after a
-      part or sign bind, the gone user will still be listed, so you can
-      check for wasop, isop, etc.
-    Module: irc
-
-
-  getchanidle <nickname> <channel>
-    Returns: number of minutes that person has been idle; 0 if the
-      specified user isn't on the channel
-    Module: irc
-
-  getchanmode <channel>
-    Returns: string of the type "+ntik key" for the channel specified
-    Module: irc
-
-  jump [server [port [password]]]
-    Description: jumps to the server specified, or (if none is specified)
-      the next server in the bot's serverlist
-    Returns: nothing
-    Module: server
-
-  pushmode <channel> <mode> [arg]
-    Description: sends out a channel mode change (ex: pushmode #lame +o
-      goober) through the bot's queuing system. All the mode changes will
-      be sent out at once (combined into one line as much as possible) after
-      the script finishes, or when 'flushmode' is called.
-    Returns: nothing
-    Module: irc
-
-  flushmode <channel>
-    Description: forces all previously pushed channel mode changes to be
-      sent to the server, instead of when the script is finished (just for
-      the channel specified)
-    Returns: nothing
-    Module: irc
-
-  topic <channel>
-    Returns: string containing the current topic of the specified channel
-    Module: irc
-
-  validchan <channel>
-    Description: checks if the bot has a channel record for the specified
-      channel. Note that this does not necessarily mean that the bot is ON
-      the channel.
-    Returns: 1 if the channel exists, 0 if not
-    Module: channels
-
-  isdynamic <channel>
-    Returns: 1 if the channel is a dynamic channel; 0 otherwise
-    Module: channels
-
-  setudef <flag/int/str> <name>
-    Description: initializes a user defined channel flag, string or integer
-      setting. You can use it like any other flag/setting. IMPORTANT: Don't
-      forget to reinitialize your flags/settings after a restart, or it'll be
-      lost.
-    Returns: nothing
-    Module: channels
-
-  renudef <flag/int/str> <oldname> <newname>
-    Description: renames a user defined channel flag, string, or integer
-      setting.
-    Returns: nothing
-    Module: channels
-
-  deludef <flag/int/str> <name>
-    Description: deletes a user defined channel flag, string, or integer
-      setting.
-    Returns: nothing
-    Module: channels
-
-*** DCC COMMANDS ***
-
-  putdcc <idx> <text>
-    Description: sends text to the idx specified
-    Returns: nothing
-    Module: core
-
-  dccbroadcast <message>
-    Description: sends a message to everyone on the party line across the
-      botnet, in the form of "*** <message>" for local users and
-      "*** (Bot) <message>" for users on other bots
-    Returns: nothing
-    Module: core
-
-  dccputchan <channel> <message>
-    Description: sends your message to everyone on a certain channel on the
-      botnet, in a form exactly like dccbroadcast does. Valid channels are 0
-      through 99999.
-    Returns: nothing
-    Module: core
-
-  boot <user at bot> [reason]
-     Description: boots a user from the partyline
-     Returns: nothing
-     Module: core
-
-  dccsimul <idx> <text>
-    Description: simulates text typed in by the dcc user specified. Note
-      that in v0.9, this only simulated commands; now a command must be
-      preceded by a '.' to be simulated.
-    Returns: nothing
-    Module: core
-
-  hand2idx <handle>
-    Returns: the idx (a number greater than or equal to zero) for the user
-      given if the user is on the party line in chat mode (even if she is
-      currently on a channel or in chat off), the file area, or in the control
-      of a script. -1 is returned if no idx is found. If the user is on
-      multiple times, the oldest idx is returned.
-    Module: core
-
-  idx2hand <idx>
-    Returns: handle of the user with the given idx
-    Module: core
-
-  valididx <idx>
-    Returns: 1 if the idx currently exists; 0 otherwise
-    Module: core
-
-  getchan <idx>
-    Returns: the current party line channel for a user on the party line;
-      "0" indicates he's on the group party line, "-1" means he has chat off,
-      and a value from 1 to 99999 is a private channel
-    Module: core
-
-  setchan <idx> <channel>
-    Description: sets a party line user's channel. The party line user
-      is not notified that she is now on a new channel. A channel name
-      can be used (provided it exists).
-    Returns: nothing
-    Module: core
-
-  console <idx> [channel] [console-modes]
-    Description: changes a dcc user's console mode, either to an absolute
-      mode (like "mpj") or just adding/removing flags (like "+pj" or "-moc"
-      or "+mp-c"). The user's console channel view can be changed also (as
-      long as the new channel is a valid channel).
-    Returns: a list containing the user's (new) channel view and (new)
-      console modes, or nothing if that user isn't currently on the partyline
-    Module: core
-
-  echo <idx> [status]
-    Description: turns a user's echo on or off; the status has to be a 1 or 0
-    Returns: new value of echo for that user (or the current value, if status
-      was omitted)
-    Module: core
-
-  strip <idx> [+/-strip-flags]
-    Description: modifies the strip-flags for a user. The supported
-      strip-flags are:
-        b - remove all boldface codes
-        c - remove all color codes
-        r - remove all reverse video codes
-        u - remove all underline codes
-        a - remove all ANSI codes
-        g - remove all ctrl-g (bell) codes
-    Returns: new strip-flags for the specified user (or the current
-      flags, if strip-flags was omitted)
-    Module: core
-
-  putbot <bot-nick> <message>
-    Description: sends a message across the botnet to another bot. If no
-      script intercepts the message on the other end, the message is
-      ignored.
-    Returns: nothing
-    Module: core
-
-  putallbots <message>
-    Description: sends a message across the botnet to all bots. If no
-      script intercepts the message on the other end, the message is
-      ignored.
-    Returns: nothing
-    Module: core
-
-  killdcc <idx>
-    Description: kills a partyline or file area connection
-    Returns: nothing
-    Module: core
-
-  bots
-    Returns: list of the bots currently connected to the botnet
-    Module: core
-
-  botlist
-    Returns: a list of bots currently on the botnet. Each item in the list
-      is a sublist with four elements: bot, uplink, version, sharing status:
-        bot:     the bot's botnetnick
-        uplink:  the bot the bot is connected to
-        version: its current numeric version
-        sharing: a "+" if the bot is a sharebot; "-" otherwise
-    Module: core
-
-  islinked <bot>
-    Returns: 1 if the bot is currently linked; 0 otherwise
-    Module: core
-
-  dccused
-    Returns: number of dcc connections currently in use
-    Module: core
-
-  dcclist [type]
-    Returns: a list of active connections, each item in the list is a
-      sublist containing six elements:
-        {<idx> <handle> <hostname> <type> {<other>} <timestamp>}.
-
-      The types are: chat, bot, files, file_receiving, file_sending,
-      file_send_pending, script, socket (these are connections that have
-      not yet been put under 'control'), telnet, and server. The timestamp
-      is in unixtime format.
-    Module: core
-
-  whom <chan>
-    Returns: list of people on the botnet who are on that channel. 0 is
-      the default party line. Each item in the list is a sublist with six
-      elements: nickname, bot, hostname, access flag ('-', '@', '+', or
-      '*'), minutes idle, and away message (blank if the user is not away).
-      If you specify * for channel, every user on the botnet is returned
-      with an extra argument indicating the channel the user is on.
-    Module: core
-
-  getdccidle <idx>
-    Returns: number of seconds the dcc chat/file system/script user has
-      been idle
-    Module: core
-
-  getdccaway <idx>
-    Returns: away message for a dcc chat user (or "" if the user is not
-      set away)
-    Module: core
-
-  setdccaway <idx> <message>
-    Description: sets a party line user's away message and marks them away.
-     If set to "", the user is marked as no longer away.
-    Returns: nothing
-    Module: core
-
-  connect <host> <port>
-    Description: makes an outgoing connection attempt and creates a dcc
-      entry for it. A 'control' command should be used immediately after
-      a successful 'connect' so no input is lost.
-    Returns: idx of the new connection
-    Module: core
-
-  listen <port> <type> [options] [flag]
-    Description: opens a listening port to accept incoming telnets; type
-      must be one of "bots", "all", "users", "script", or "off":
-
-        listen <port> bots [mask]
-          Description: accepts connections from bots only; the optional mask
-            is used to identify permitted bot names. If the mask begins with
-            '@', it is interpreted to be a mask of permitted hosts to accept
-            connections from.
-          Returns: port number
-
-        listen <port> users [mask]
-          Description: accepts connections from users only (no bots); the
-            optional mask is used to identify permitted nicknames. If the
-            mask begins with '@', it is interpreted to be a mask of permitted
-            hosts to accept connections from.
-          Returns: port number
-
-        listen <port> all [mask]
-          Description: accepts connections from anyone; the optional mask
-            is used to identify permitted nicknames/botnames. If the mask
-            begins with '@', it is interpreted to be a mask of permitted
-            hosts to accept connections from.
-          Returns: port number
-
-        listen <port> script <proc> [flag]
-          Description: accepts connections which are immediately routed to
-            a proc. The proc is called with one parameter: the idx of the
-            new connection. Flag may currently only be 'pub', which makes
-            the bot allow anyone to connect.
-          Returns: port number
-
-        listen <port> off
-          Description: stop listening on a port
-          Returns: nothing
-    Module: core
-
-  dccdumpfile <idx> <filename>
-    Description: dumps out a file from the text directory to a dcc chat
-      user. The flag matching that's used everywhere else works here, too.
-    Returns: nothing
-    Module: core
-
-  *** NOTES MODULE ***
-
-  notes <user> [numberlist]
-    Returns: -1 if no such user, -2 if notefile failure. If a numberlist
-      is not specified, the number of notes stored for the user is returned.
-      Otherwise, a list of sublists containing information about notes
-      stored for the user is returned. Each sublist is in the format of:
-        {<from> <timestamp> <note text>}.
-    Module: notes
-
-  erasenotes <user> <numberlist>
-    Description: erases some or all stored notes for a user. Use '-'
-      to erase all notes.
-    Returns: -1 if no such user, -2 if notefile failure, 0 if
-      no such note, or number of erased notes.
-    Module: notes
-
-  listnotes <user> <numberlist>
-    Description: lists existing notes according to the numberlist (ex:
-      "2-4;8;16-")
-    Returns: -1 if no such user, -2 if notefile failure, 0 if no
-      such note, list of existing notes.
-    Module: notes
-
-  storenote <from> <to> <msg> <idx>
-    Description: stores a note for later reading, notifies idx of any results
-      (use idx -1 for no notify).
-    Returns: 0 on success; non-0 on failure
-    Module: notes
-
-*** ASSOC MODULE ***
-
-  assoc <chan> [name]
-    Description: sets the name associated with a botnet channel, if you
-      specify one
-    Returns: current name for that channel, if any
-    Module: assoc
-
-  killassoc <chan>
-    Description: removes the name associated with a botnet channel, if any
-      exists. Use 'killassoc &' to kill all assocs.
-    Returns: nothing
-    Module: assoc
-
-*** COMPRESS MODULE ***
-
-  compressfile [-level <level>] <src-file> [target-file]
-  uncompressfile <src-file> [target-file]
-    Description: compresses or un-compresses files. The level option specifies
-      the compression mode to use when compressing. Available modes are from
-      0 (minimum CPU usage, minimum compression) all the way up to 9 (maximum
-      CPU usage, maximum compression). If you don't specify the target-file,
-      the src-file will be overwritten.
-    Returns: nothing
-    Module: compress
-
-  iscompressed <filename>
-    Description: determines whether <filename> is gzip compressed. Returns 1
-      if it is, 0 if it isn't, and 2 if some kind of error prevented the
-      checks from succeeding.
-    Returns: nothing
-    Module: compress
-
-*** FILESYS MODULE ***
-
-  setpwd <idx> <dir>
-    Description: changes the directory of a file system user, in exactly
-      the same way as a 'cd' command would. The directory can be specified
-      relative or absolute.
-    Returns: nothing
-    Module: filesys
-
-  getpwd <idx>
-    Returns: the current directory of a file system user
-    Module: filesys
-
-  getfiles <dir>
-    Returns: a list of files in the directory given; the directory is
-      relative to dcc-path
-    Module: filesys
-
-  getdirs <dir>
-    Returns: a list of subdirectories in the directory given; the directory
-      is relative to dcc-path
-    Module: filesys
-
-  dccsend <filename> <ircnick>
-    Description: attempts to start a dcc file transfer to the given nick;
-      the filename must be specified either by full pathname or in relation
-      to the bot's startup directory
-    Returns:
-      0 success
-      1 the dcc table is full (too many connections)
-      2 can't open a socket for the transfer
-      3 the file doesn't exist
-      4 the file was queued for later transfer, which means that person has
-        too many file transfers going right now
-      5 copy-to-tmp is enabled and the file already exists in the temp
-        directory
-    Module: transfer
-
-  filesend <idx> <filename> [ircnick]
-    Description: like dccsend, except it operates for a current filesystem
-      user, and the filename is assumed to be a relative path from that
-      user's current directory
-    Returns: 0 on failure; 1 on success (either an immediate send or a queued
-      send)
-    Module: filesys
-
- fileresend <idx> <filename> [ircnick]
-    Description: functions like filesend, only that it sends a DCC RESEND
-      instead of a DCC SEND, which allows people to resume aborted file
-      transfers if their client supports that protocol. ircII/BitchX/etc.
-      support it; mIRC does not.
-    Returns: 0 on failure; 1 on success (either an immediate send or a queued
-      send)
-    Module: filesys
-
-  setdesc <dir> <file> <desc>
-    Description: sets the description for a file in a file system directory;
-      the directory is relative to dcc-path
-    Returns: nothing
-    Module: filesys
-
-  getdesc <dir> <file>
-    Returns: the description for a file in the file system, if one
-      exists
-    Module: filesys
-
-  setowner <dir> <file> <handle>
-    Description: changes the owner for a file in the file system; the
-      directory is relative to dcc-path
-    Returns: nothing
-    Module: filesys
-
-  getowner <dir> <file>
-    Returns: the owner of a file in the file system
-    Module: filesys
-
-  setlink <dir> <file> <link>
-    Description: creates or changes a linked file (a file that actually
-      exists on another bot); the directory is relative to dcc-path
-    Returns: nothing
-    Module: filesys
-
-  getlink <dir> <file>
-    Returns: the link for a linked file, if it exists
-    Module: filesys
-
-  getfileq <handle>
-    Returns: list of files queued by someone; each item in the list will be
-      a sublist with two elements: nickname the file is being sent to and
-      the filename
-    Module: transfer
-
-  getfilesendtime <idx>
-    Returns: the unixtime value from when a file transfer started, or a
-      negative number:
-        -1 no matching transfer with the specified idx was found
-        -2 the idx matches an entry which is not a file transfer
-    Module: transfer
-
-  mkdir <directory> [<required-flags> [channel]]
-    Description: creates a directory in the file system. Only users with the
-      required flags may access it.
-    Returns:
-      0 success
-      1 can't create directory
-      2 directory exists but is not a directory
-     -3 could not open filedb
-    Module: filesys
-
-  rmdir <directory>
-    Description: removes a directory from the file system.
-    Returns: 0 on success; 1 on failure
-    Module: filesys
-
-  mv <file> <destination>
-    Description: moves a file from its source to the given destination.
-      The file can also be a mask, such as /incoming/*, provided the
-      destination is a directory.
-    Returns: If the command was successful, the number of files moved will
-      be returned. Otherwise, a negative number will be returned:
-        -1 invalid source file
-        -2 invalid destination
-        -3 destination file exists
-        -4 no matches found
-    Module: filesys
-
-  cp <file> <destination>
-    Description: copies a file from its source to the given destination.
-      The file can also be a mask, such as /incoming/*, provided the
-      destination is a directory.
-    Returns: If the command was successful, the number of files copied will
-      be returned. Otherwise, a negative number will be returned:
-        -1 invalid source file
-        -2 invalid destination
-        -3 destination file exists
-        -4 no matches found
-    Module: filesys
-
-  getflags <dir>
-    Returns: the flags required to access a directory
-    Module: filesys
-
-  setflags <dir> [<flags> [channel]]
-    Description: sets the flags required to access a directory
-    Returns: 0 on success; -1 or -3 on failure
-    Module: filesys
-
-
-*** MISCELLANEOUS COMMANDS ***
-
-  bind <type> <flags> <keyword/mask> [proc-name]
-    Description: You can use the 'bind' command to attach Tcl procedures
-      to certain events. flags are the flags the user must have to trigger
-      the event (if applicable). proc-name is the name of the Tcl procedure
-      to call for this command (see below for the format of the procedure
-      call). If the proc-name is omitted, no binding is added. Instead, the
-      current binding is returned (if it's stackable, a list of the current
-      bindings is returned).
-    Returns: name of the command that was added, or (if proc-name was
-      omitted), a list of the current bindings for this command
-    Module: core
-
-  unbind <type> <flags> <keyword/mask> <proc-name>
-    Description: removes a previously created bind
-    Returns: name of the command that was removed
-    Module: core
-
-  binds [type/mask]
-    Returns: a list of Tcl binds, each item in the list is a sublist of
-      five elements:
-        {<type> <flags> <name> <hits> <proc>}
-    Module: core
-
-  logfile [<modes> <channel> <filename>]
-    Description: creates a new logfile, which will log the modes given for
-      the channel listed. If no logfile is specified, a list of existing
-      logfiles will be returned. "*" indicates all channels. You can also
-      change the modes and channel of an existing logfile with this command.
-      Entering a blank mode and channel ("") makes the bot stop logging there.
-
-      Logfile flags:
-        b - information about bot linking and userfile sharing
-        c - commands
-        d - misc debug information
-        e - Tcl errors
-        h - raw share traffic
-        j - joins, parts, quits, and netsplits on the channel
-        k - kicks, bans, and mode changes on the channel
-        m - private msgs, notices and ctcps to the bot
-        o - misc info, errors, etc (IMPORTANT STUFF)
-        p - public text on the channel
-        r - raw incoming server traffic
-        s - server connects, disconnects, and notices
-        t - raw botnet traffic
-        v - raw outgoing server traffic
-        w - wallops (make sure the bot sets +w in init-server)
-        x - file transfers and file-area commands
-    Returns: filename of logfile created, or, if no logfile is specified, a
-      list of logfiles such as: {mco * eggdrop.log} {jp #lame lame.log}
-    Module: core
-
-  maskhost <nick!user at host>
-    Returns: masked hostmask for the string given ("n!u at 1.2.3.4" -> "*!u at 1.2.3.*",
-      "n!u at lame.com" -> "*!u at lame.com", "n!u at a.b.edu" -> "*!u@*.b.edu")
-    Module: core
-
-  timer <minutes> <tcl-command>
-    Description: executes the given Tcl command after a certain number of
-      minutes have passed
-    Returns: a timerID
-    Module: core
-
-  utimer <seconds> <tcl-command>
-    Description: executes the given Tcl command after a certain number of
-      seconds have passed
-    Returns: a timerID
-    Module: core
-
-  timers
-    Returns: a list of active minutely timers. Each entry in the list contains
-      the number of minutes left till activation, the command that will be
-      executed, and the timerID.
-    Module: core
-
-  utimers
-    Returns: a list of active secondly timers. Each entry in the list contains
-      the number of minutes left till activation, the command that will be
-      executed, and the timerID.
-    Module: core
-
-  killtimer <timerID>
-    Description: removes a minutely timer from the list
-    Returns: nothing
-    Module: core
-
-  killutimer <timerID>
-    Description: removes a secondly timer from the list
-    Returns: nothing
-    Module: core
-
-  unixtime
-    Returns: a long integer which represents the number of seconds that have
-      passed since 00:00 Jan 1, 1970 (GMT).
-    Module: core
-
-  duration <seconds>
-    Returns: the number of seconds converted into years, weeks, days, hours,
-      minutes, and seconds. 804600 seconds is turned into 1 week 2 days
-      7 hours 30 minutes.
-    Module: core
-
-  strftime <formatstring> [time]
-    Returns: a formatted string of time using standard strftime format.
-      If time is specified, the value of the specified time is used.
-      Otherwise, the current time is used.
-    Module: core
-
-  ctime <unixtime>
-    Returns: a formatted date/time string based on the current locale
-      settings from the unixtime string given; for example "Fri Aug 3
-      11:34:55 1973"
-    Module: core
-
-  myip
-    Returns: a long number representing the bot's IP address, as it might
-      appear in (for example) a DCC request
-    Module: core
-
-  rand <limit>
-    Returns: a random integer between 0 and limit-1
-    Module: core
-
-  control <idx> <command>
-    Description: removes an idx from the party line and sends all future
-      input to the Tcl command given. The command will be called with two
-      parameters: the idx and the input text. The command should return 0
-      to indicate success and 1 to indicate that it relinquishes control of
-      the user back to the bot. If the input text is blank (""), it
-      indicates that the connection has been dropped. Also, if the input
-      text is blank, never call killdcc on it, as it will fail with "invalid
-      idx".
-    Returns: nothing
-    Module: core
-
-  sendnote <from> <to[@bot]> <message>
-    Description: simulates what happens when one user sends a note to another
-    Returns:
-      0 - the send failed
-      1 - the note was delivered locally or sent to another bot
-      2 - the note was stored locally
-      3 - the user's notebox is too full to store a note
-      4 - a Tcl binding caught the note
-      5 - the note was stored because the user is away
-    Module: core
-
-  link [via-bot] <bot>
-    Description: attempts to link to another bot directly. If you specify
-      a via-bot, it tells the via-bot to attempt the link.
-    Returns: 1 if the link will be attempted; 0 otherwise
-    Module: core
-
-  unlink <bot>
-    Description: attempts to unlink a bot from the botnet
-    Returns: 1 on success; 0 otherwise
-    Module: core
-
-  encrypt <key> <string>
-    Returns: encrypted string (using the currently loaded encryption module),
-      encoded into ASCII using base-64
-    Module: encryption
-
-  decrypt <key> <encrypted-base64-string>
-    Returns: decrypted string (using the currently loaded encryption module)
-    Module: encryption
-
-  encpass <password>
-    Returns: encrypted string (using the currently loaded encryption module)
-    Module: encryption
-
-  die [reason]
-    Description: causes the bot to log a fatal error and exit completely.
-      If no reason is given, "EXIT" is used.
-    Returns: none
-    Module: core
-
-  unames
-   Returns: the current operating system the bot is using
-   Module: core
-
-  dnslookup <ip-address/hostname> <proc> [[arg1] [arg2] ... [argN]]
-    Description: This issues an asynchronous dns lookup request. The
-      command will block if dns module is not loaded; otherwise it will
-      either return immediately or immediately call the specified proc
-      (e.g. if the lookup is already cached).
-
-      As soon as the request completes, the specified proc will be called
-      as follows:
-
-       <proc> <ipaddress> <hostname> <status> [[arg1] [arg2] ... [argN]]
-
-      status is 1 if the lookup was successful and 0 if it wasn't. All
-      additional parameters (called arg1, arg2 and argN above) get
-      appended to the proc's other parameters.
-    Returns: nothing
-    Module: core
-
-  md5 <string>
-    Returns: the 128 bit MD5 message-digest of the specified string
-    Module: core
-
-  callevent <event>
-    Description: triggers the evnt bind manually for a certain event.
-      For example: callevent rehash.
-    Returns: nothing
-    Module: core
-
- traffic
-    Returns: a list of sublists containing information about the bot's
-      traffic usage in bytes. Each sublist contains five elements: type,
-      in-traffic today, in-traffic total, out-traffic today, out-traffic
-      total (in that order).
-    Module: core
-
-  modules
-    Returns: a list of sublists containing information about the bot's
-      currently loaded modules. Each sublist contains three elements: module,
-      version, and dependencies. Each dependency is also a sublist containing
-      the module name and version.
-    Module: core
-
-  loadmodule <module>
-    Description: attempts to load the specified module.
-    Returns: "Already loaded." if the module is already loaded, "" if
-      successful, or the reason the module couldn't be loaded.
-    Module: core
-
-  unloadmodule <module>
-    Description: attempts to unload the specified module.
-    Returns: "No such module" if the module is not loaded, "" otherwise.
-    Module: core
-
-  loadhelp <helpfile-name>
-    Description: attempts to load the specified help file from the help/
-      directory.
-    Returns: nothing
-    Module: core
-
-  unloadhelp <helpfile-name>
-    Description: attempts to unload the specified help file.
-    Returns: nothing
-    Module: core
-
-  reloadhelp
-    Description: reloads the bot's help files.
-    Returns: nothing
-    Module: core
-
-  restart
-    Description: rehashes the bot, kills all timers, reloads all modules,
-      and reconnects the bot to the next server in its list.
-    Returns: nothing
-    Module: core
-
-  rehash
-    Description: rehashes the bot
-    Returns: nothing
-    Module: core
-
-  stripcodes <strip-flags> <string>
-    Description: strips specified control characters from the string given.
-      strip-flags can be any combination of the following:
-        b - remove all boldface codes
-        c - remove all color codes
-        r - remove all reverse video codes
-        u - remove all underline codes
-        a - remove all ANSI codes
-        g - remove all ctrl-g (bell) codes
-    Returns: the stripped string.
-    Module: core
-
-
-*** GLOBAL VARIABLES ***
-
-  NOTE: All config file variables are also global.
-
-  botnick
-    Value: the current nickname the bot is using (for example: "Valis",
-      "Valis0", etc.)
-    Module: server
-
-  botname
-    Value: the current nick!user at host that the server sees (for example:
-      "Valis!valis at crappy.com")
-    Module: server
-
- server
-   Value: the current server's real name (what server calls itself)
-     and port bot is connected to (for example: "irc.math.ufl.edu:6667")
-     Note that this does not nececerilly match the servers internet address.
-   Module: server
-
- serveraddress
-   Value: the current server's internet address (hostname or IP) and port bot
-     is connected to. This will correspond to the entry in server list (for
-     example: "eu.undernet.org:6667"). Note that this does not necessarily
-     match the name server calls itself.
-   Module: server
-
-  version
-    Value: current bot version "1.1.2+pl1 1010201 pl1";
-      first item is the text version, second item is a numerical version,
-      and any following items are the names of patches that have been added
-    Module: core
-
-  numversion
-    Value: the current numeric bot version (for example: "1010201").
-      Numerical version is in the format of "MNNRRPP", where:
-        M   major release number
-        NN  minor release number
-        RR  sub-release number
-        PP  patch level for that sub-release
-    Module: core
-
-  uptime
-    Value: the unixtime value for when the bot was started
-    Module: core
-
-  server-online
-     Value: the unixtime value for when the bot connected to its current
-       server
-     Module: server
-
-  lastbind
-    Value: the last command binding which was triggered. This allows you to
-      identify which command triggered a Tcl proc.
-    Module: core
-
-  isjuped
-    Value: 1 if bot's nick is juped(437); 0 otherwise
-    Module: server
-
-  handlen
-    Value: the value of the HANDLEN define in src/eggdrop.h
-    Module: core
-
-  config
-    Value: the filename of the config file Eggdrop is currently using
-    Module: core
-
-*** BIND ***
-
-  You can use the 'bind' command to attach Tcl procedures to certain events.
-  For example, you can write a Tcl procedure that gets called every time a
-  user says "danger" on the channel.
-
-  Some bind types are marked as "stackable". That means that you can bind
-  multiple commands to the same trigger. Normally, for example, a bind such
-  as 'bind msg - stop msg:stop' (which makes a msg-command "stop" call the
-  Tcl proc "msg:stop") will overwrite any previous binding you had for the
-  msg command "stop". With stackable bindings, like 'msgm' for example,
-  you can bind the same command to multiple procs. When the bind is triggered,
-  ALL of the Tcl procs that are bound to it will be called.
-
-  To remove a bind, use the 'unbind' command. For example, to remove the
-  bind for the "stop" msg command, use 'unbind msg - stop msg:stop'.
-
-  (A) BIND TYPES
-
-    The following is a list of bind types and how they work. Below each bind
-    type is the format of the bind command, the list of arguments sent to
-    the Tcl proc, and an explanation.
-
-    (1)  MSG
-         bind msg <flags> <command> <proc>
-         procname <nick> <user at host> <handle> <text>
-
-         Description: used for /msg commands. The first word of the user's
-           msg is the command, and everything else becomes the text argument.
-         Module: server
-
-    (2)  DCC
-         bind dcc <flags> <command> <proc>
-         procname <handle> <idx> <text>
-
-         Description: used for partyline commands; the command is the first
-           word and everything else becomes the text argument. The idx is
-           valid until the user disconnects. After that, it may be reused,
-           so be careful about storing an idx for long periods of time.
-         Module: core
-
-    (3)  FIL
-         bind fil <flags> <command> <proc>
-         procname <handle> <idx> <text>
-
-         Description: the same as DCC, except this is triggered if the user
-           is in the file area instead of the party line
-         Module: filesys
-
-    (4)  PUB
-         bind pub <flags> <command> <proc>
-         procname <nick> <user at host> <handle> <channel> <text>
-
-         Description: used for commands given on a channel. The first word
-           becomes the command and everything else is the text argument.
-         Module: irc
-
-    (5)  MSGM (stackable)
-         bind msgm <flags> <mask> <proc>
-         procname <nick> <user at host> <handle> <text>
-
-         Description: matches the entire line of text from a /msg with the
-           mask. This is useful for binding Tcl procs to words or phrases
-           spoken anywhere within a line of text.
-         Module: server
-
-    (6)  PUBM (stackable)
-         bind pubm <flags> <mask> <proc>
-         procname <nick> <user at host> <handle> <channel> <text>
-
-         Description: just like MSGM, except it's triggered by things said
-           on a channel instead of things /msg'd to the bot. The mask is
-           matched against the channel name followed by the text and can
-           contain wildcards. Also, if a line triggers a PUB bind, it will not
-           trigger a PUBM bind.
-         Module: irc
-
-    (7)  NOTC (stackable)
-         bind notc <flags> <mask> <proc>
-         procname <nick> <user at host> <handle> <text> <dest>
-
-         Description: dest will be a nickname (the bot's nickname,
-           obviously) or a channel name. mask is matched against the entire
-           notice and can contain wildcards. It is considered a breach of
-           protocol to respond to a /notice on IRC, so this is intended for
-           internal use (logging, etc.) only. Note that server notices do not
-           trigger the NOTC bind.
-
-           New Tcl procs should be declared as
-             proc notcproc {nick uhost hand text {dest ""}} {
-               global botnick; if {$dest == ""} {set dest $botnick}
-               ...
-             }
-           for compatibility.
-         Module: server
-
-    (8)  JOIN (stackable)
-         bind join <flags> <mask> <proc>
-         procname <nick> <user at host> <handle> <channel>
-
-         Description: triggered by someone joining the channel. The mask in
-           the bind is matched against "#channel nick!user at host" and can
-           contain wildcards.
-         Module: irc
-
-    (9)  PART (stackable)
-         bind part <flags> <mask> <proc>
-         procname <nick> <user at host> <handle> <channel> <msg>
-
-         Description: triggered by someone leaving the channel. The mask is
-           matched against "#channel nick!user at host" and can contain
-           wildcards. If no part message is specified, msg will be set
-           to "".
-
-           New Tcl procs should be declared as
-             proc partproc {nick uhost hand chan {msg ""}} { ... }
-           for compatibility.
-         Module: irc
-
-    (10) SIGN (stackable)
-         bind sign <flags> <mask> <proc>
-         procname <nick> <user at host> <handle> <channel> <reason>
-
-         Description: triggered by a signoff, or possibly by someone who got
-           netsplit and never returned. The signoff message is the last
-           argument to the proc. Wildcards can be used in the mask, which is
-           matched against '#channel nick!user at host'.
-         Module: irc
-
-    (11) TOPC (stackable)
-         bind topc <flags> <mask> <proc>
-         procname <nick> <user at host> <handle> <channel> <topic>
-
-         Description: triggered by a topic change. mask can contain wildcards
-           and is matched against '#channel <new topic>'.
-         Module: irc
-
-    (12) KICK (stackable)
-         bind kick <flags> <mask> <proc>
-         procname <nick> <user at host> <handle> <channel> <target> <reason>
-
-         Description: triggered when someone is kicked off the channel. The
-           mask is matched against '#channel target reason' where the target is
-           the nickname of the person who got kicked (can contain wildcards).
-           The proc is called with the nick, user at host, and handle of the
-           kicker, plus the channel, the nickname of the person who was
-           kicked, and the reason; flags are ignored.
-         Module: irc
-
-    (13) NICK (stackable)
-         bind nick <flags> <mask> <proc>
-         procname <nick> <user at host> <handle> <channel> <newnick>
-
-         Description: triggered when someone changes nicknames. The mask
-           is matched against '#channel newnick' and can contain wildcards.
-           Channel is "*" if the user isn't on a channel (usually the bot not
-           yet in a channel).
-         Module: irc
-
-    (14) MODE   (stackable)
-         bind mode <flags> <mask> <proc>
-         proc-name <nick> <user at host> <handle> <channel> <mode-change> <victim>
-
-         Description: mode changes are broken down into their component
-           parts before being sent here, so the <mode-change> will always
-           be a single mode, such as "+m" or "-o". victim will show the
-           argument of the mode change (for o/v/b/e/I) or "" if the set
-           mode does not take an argument. Flags are ignored. The bot's
-           automatic response to a mode change will happen AFTER all
-           matching Tcl procs are called. The mask will be matched against
-           '#channel +/-modes' and can contain wildcards.
-
-           If it is a server mode, nick will be "", user at host is the server
-           name, and handle is *.
-
-           Note that "victim" was added in 1.3.23 and that this will break
-           Tcl scripts that were written for pre-1.3.23 versions and use this
-           binding. An easy fix (by guppy) is as follows (example):
-
-           Old script looks as follows:
-             bind mode - * mode_proc
-             proc mode_proc {nick uhost hand chan mc} { ... }
-
-           To make it work with 1.3.23+ and stay compatible with older bots, do:
-             bind mode - * mode_proc_fix
-             proc mode_proc_fix {nick uhost hand chan mc {victim ""}} {
-               if {$victim != ""} {append mc " $victim"}
-               mode_proc $nick $uhost $hand $chan $mc
-             }
-             proc mode_proc {nick uhost hand chan mc} { ... }
-         Module: irc
-
-
-    (15) CTCP (stackable)
-         bind ctcp <flags> <keyword> <proc>
-         proc-name <nick> <user at host> <handle> <dest> <keyword> <text>
-
-         Description: dest will be a nickname (the bot's nickname, obviously)
-           or channel name. keyword is the ctcp command (which can contain
-           wildcards), and text may be empty. If the proc returns 0, the bot
-           will attempt its own processing of the ctcp command.
-         Module: server
-
-    (16) CTCR (stackable)
-         bind ctcr <flags> <keyword> <proc>
-         proc-name <nick> <user at host> <handle> <dest> <keyword> <text>
-
-         Description: just like ctcp, but this is triggered for a ctcp-reply
-           (ctcp embedded in a notice instead of a privmsg)
-         Module: server
-
-    (17) RAW (stackable)
-         bind raw <flags> <keyword> <proc>
-         procname <from> <keyword> <text>
-
-         Description: previous versions of Eggdrop required a special compile
-           option to enable this binding, but it's now standard. The keyword
-           is either a numeric, like "368", or a keyword, such as "PRIVMSG".
-           from will be the server name or the source user (depending on
-           the keyword); flags are ignored. The order of the arguments is
-           identical to the order that the IRC server sends to the bot. The
-           pre-processing  only splits it apart enough to determine the
-           keyword. If the proc returns 1, Eggdrop will not process the line
-           any further (this could cause unexpected behavior in some cases).
-         Module: server
-
-    (18) BOT
-         bind bot <flags> <command> <proc>
-         proc-name <from-bot> <command> <text>
-
-         Description: triggered by a message coming from another bot in
-           the botnet. The first word is the command and the rest becomes
-           the text argument; flags are ignored.
-         Module: core
-
-    (19) CHON (stackable)
-         bind chon <flags> <mask> <proc>
-         proc-name <handle> <idx>
-
-         Description: when someone first enters the party-line area of the
-           bot via dcc chat or telnet, this is triggered before they are
-           connected to a chat channel (so, yes, you can change the channel
-           in a 'chon' proc). mask is matched against the handle and supports
-           wildcards. This is NOT triggered when someone returns from the
-           file area, etc.
-         Module: core
-
-    (20) CHOF (stackable)
-         bind chof <flags> <mask> <proc>
-         proc-name <handle> <idx>
-
-         Description: triggered when someone leaves the party line to
-           disconnect from the bot. mask is matched against the handle and
-           can contain wildcards. Note that the connection may have already
-           been dropped by the user, so don't send output to the idx.
-         Module: core
-
-    (21) SENT (stackable)
-         bind sent <flags> <mask> <proc>
-         proc-name <handle> <nick> <path/to/file>
-
-         Description: after a user has successfully downloaded a file from
-           the bot, this binding is triggered. mask is matched against the
-           handle of the user that initiated the transfer and supports
-           wildcards. nick is the actual recipient (on IRC) of the file. The
-           path is relative to the dcc directory (unless the file transfer
-           was started by a script call to 'dccsend', in which case the path
-           is the exact path given in the call to 'dccsend').
-         Module: transfer
-
-    (22) RCVD (stackable)
-         bind rcvd <flags> <mask> <proc>
-         proc-name <handle> <nick> <path/to/file>
-
-         Description: triggered after a user uploads a file successfully.
-           mask is matched against the user's handle. nick is the IRC
-           nickname that the file transfer originated from. The path is
-           where the file ended up, relative to the dcc directory (usually
-           this is your incoming dir).
-         Module: transfer
-
-    (23) CHAT (stackable)
-         bind chat <flags> <mask> <proc>
-         proc-name <handle> <channel#> <text>
-
-         Description: when a user says something on the botnet, it invokes
-           this binding. Flags are ignored; handle could be a user on this
-           bot ("DronePup") or on another bot ("Eden at Wilde") and therefore
-           you can't rely on a local user record. The mask is checked against
-           the entire line of text and supports wildcards.
-
-           NOTE: If a BOT says something on the botnet, the BCST bind is
-           invoked instead.
-         Module: core
-
-    (24) LINK (stackable)
-         bind link <flags> <mask> <proc>
-         proc-name <botname> <via>
-
-         Description: triggered when a bot links into the botnet. botname
-           is the botnetnick of the bot that just linked in; via is the bot
-           it linked through. The mask is checked against the botnetnick of
-           the bot that linked and supports wildcards. flags are ignored.
-         Module: core
-
-    (25) DISC (stackable)
-         bind disc <flags> <mask> <proc>
-         proc-name <botname>
-
-         Description: triggered when a bot disconnects from the botnet for
-           whatever reason. Just like the link bind, flags are ignored; mask
-           is matched against the botnetnick of the bot that unlinked.
-           Wildcards are supported in mask.
-         Module: core
-
-    (26) SPLT (stackable)
-         bind splt <flags> <mask> <proc>
-         procname <nick> <user at host> <handle> <channel>
-
-         Description: triggered when someone gets netsplit on the channel.
-           Be aware that this may be a false alarm (it's easy to fake a
-           netsplit signoff message on some networks); mask may contain
-           wildcards and is matched against '#channel nick!user at host'.
-           Anyone who is SPLT will trigger a REJN or SIGN within the next
-           wait-split (defined in the config file) minutes.
-         Module: irc
-
-    (27) REJN (stackable)
-         bind rejn <flags> <mask> <proc>
-         procname <nick> <user at host> <handle> <channel>
-
-         Description: someone who was split has rejoined. mask can contain
-           wildcards, and is matched against '#channel nick!user at host'.
-         Module: irc
-
-    (28) FILT (stackable)
-         bind filt <flags> <mask> <proc>
-         procname <idx> <text>
-
-         Description: party line and file system users have their text sent
-           through filt before being processed. If the proc returns a blank
-           string, the text is considered parsed. Otherwise, the bot will use
-           the text returned from the proc and continue parsing that
-         Module: core
-
-    (29) NEED (stackable)
-         bind need <flags> <mask> <proc>
-         procname <channel> <type>
-
-         Description: this bind is triggered on certain events, like when
-           the bot needs operator status or the key for a channel. The
-           types are: op, unban, invite, limit, and key; the mask is
-           matched against '#channel type' and can contain wildcards. flags
-           are ignored.
-
-           Example:
-             bind need - "% op" needop < handles only need op
-             bind need - "*" needall   < handles all needs
-         Module: irc
-
-    (30) FLUD (stackable)
-         bind flud <flags> <type> <proc>
-         procname <nick> <user at host> <handle> <type> <channel>
-
-         Description: any floods detected through the flood control settings
-           (like 'flood-ctcp') are sent here before processing. If the proc
-           returns 1, no further action is taken on the flood; if the proc
-           returns 0, the bot will do its normal "punishment" for the flood.
-           The flood types are: pub, msg, join, or ctcp (and can be masked to
-           "*" for the bind); flags are ignored.
-         Module: server
-
-    (31) NOTE
-         bind note <flags> <handle> <proc>
-         procname <from> <to> <text>
-
-         Description: incoming notes (either from the party line, someone on
-           IRC, or someone on another bot on the botnet) are checked against
-           these binds before being processed. If a bind exists, the bot will
-           not deliver the note. The handle must be an exact match (no wildcards),
-           but it is not case sensitive; flags are ignored.
-         Module: core
-
-    (32) ACT (stackable)
-         bind act <flags> <mask> <proc>
-         proc-name <handle> <channel#> <action>
-
-         Description: when someone does an action on the botnet, it invokes
-           this binding. flags are ignored; the mask is matched against the
-           text of the action and can support wildcards.
-         Module: core
-
-   (33) WALL (stackable)
-        bind wall <flags> <mask> <proc>
-        proc-name <from> <msg>
-
-        Description: when the bot receives a wallops, it invokes this
-          binding. flags are ignored; the mask is matched against the text
-          of the wallops msg. Note that RFC shows the server name as a source
-          of the message, whereas many IRCds send the nick!user at host of the
-          actual sender, thus, Eggdrop will not parse it at all, but simply
-          pass it to bind in its original form.
-        Module: server
-
-    (34) BCST (stackable)
-         bind bcst <flags> <mask> <proc>
-         proc-name <botname> <channel#> <text>
-
-         Description: when a bot broadcasts something on the botnet (see
-           'dccbroadcast' above), it invokes this binding. flags are ignored;
-           the mask is matched against the message text and can contain
-           wildcards. 'channel' argument will always be '-1' since broadcasts
-           are not directed to any partyline channel.
-
-           It is also invoked when a BOT (not a person, as with the CHAT bind)
-           'says' something on a channel. In this case, the 'channel' argument
-           will be a valid channel, and not '-1'.
-         Module: core
-
-    (35) CHJN (stackable)
-         bind chjn <flags> <mask> <proc>
-         proc-name <botname> <handle> <channel#> <flag> <idx> <user at host>
-
-         Description: when someone joins a botnet channel, it invokes this
-           binding. The mask is matched against the channel and can contain
-           wildcards. flag is one of: * (owner), + (master), @ (op), or %
-           (botnet master).
-         Module: core
-
-    (36) CHPT (stackable)
-         bind chpt <flags> <mask> <proc>
-         proc-name <botname> <handle> <idx> <channel#>
-
-         Description: when someone parts a botnet channel, it invokes this
-           binding. flags are ignored; the mask is matched against the
-           channel and can contain wildcards.
-         Module: core
-
-    (37) TIME (stackable)
-         bind time <flags> <mask> <proc>
-         proc-name <minute> <hour> <day> <month> <year>
-
-         Description: allows you to schedule procedure calls at certain
-           times. mask matches 5 space separated integers of the form:
-           "minute hour day month year". minute, hour, day, month have a
-           zero padding so they are exactly two characters long; year is
-           extended to four characters in the same way.
-         Module: core
-
-    (38) AWAY (stackable)
-         bind away <flags> <mask> <proc>
-         proc-name <botname> <idx> <text>
-
-         Description: triggers when a user goes away or comes back on the
-           botnet. text is the reason than has been specified (text is ""
-           when returning). mask is matched against the botnet-nick of the
-           bot the user is connected to and supports wildcards. flags are
-           ignored.
-         Module: core
-
-    (39) LOAD (stackable)
-         bind load <flags> <mask> <proc>
-         proc-name <module>
-
-         Description: triggers when a module is loaded. mask is matched
-           against the name of the loaded module and supports wildcards;
-           flags are ignored.
-         Module: core
-
-    (40) UNLD (stackable)
-         bind unld <flags> <mask> <proc>
-         proc-name <module>
-
-         Description: triggers when a module is unloaded. mask is matched
-           against the name of the unloaded module and supports wildcards;
-           flags are ignored.
-         Module: core
-
-    (41) NKCH (stackable)
-         bind nkch <flags> <mask> <proc>
-         proc-name <oldhandle> <newhandle>
-
-         Description: triggered whenever a local user's handle is changed
-           (in the userfile). mask is matched against the user's old handle
-           and can contain wildcards; flags are ignored.
-         Module: core
-
-    (42) EVNT (stackable)
-         bind evnt <flags> <type> <proc>
-         proc-name <type>
-
-         Description: triggered whenever one of these events happen. flags
-           are ignored; valid events are:
-             sighup          - called on a kill -HUP <pid>
-             sigterm         - called on a kill -TERM <pid>
-             sigill          - called on a kill -ILL <pid>
-             sigquit         - called on a kill -QUIT <pid>
-             save            - called when the userfile is saved
-             rehash          - called just after a rehash
-             prerehash       - called just before a rehash
-             prerestart      - called just before a restart
-             logfile         - called when the logs are switched daily
-             loaded          - called when the bot is done loading
-             userfile-loaded - called after userfile has been loaded
-
-             connect-server    - called just before we connect to an IRC server
-             init-server       - called when we actually get on our IRC server
-             disconnect-server - called when we disconnect from our IRC server
-         Module: core
-
-    (43) LOST (stackable)
-         bind lost <flags> <mask> <proc>
-         proc-name <handle> <nick> <path> <bytes-transferred> <length-of-file>
-
-         Description: triggered when a DCC SEND transfer gets lost, such as
-           when the connection is terminated before all data was successfully
-           sent/received. This is typically caused by a user abort.
-         Module: transfer
-
-    (44) TOUT (stackable)
-         bind tout <flags> <mask> <proc>
-         proc-name <handle> <nick> <path> <bytes-transferred> <length-of-file>
-
-         Description: triggered when a DCC SEND transfer times out. This may
-           either happen because the dcc connection was not accepted or
-           because the data transfer stalled for some reason.
-         Module: transfer
-
-
-  (B) RETURN VALUES
-
-    Several bindings pay attention to the value you return from the proc
-    (using 'return <value>'). Usually, they expect a 0 or 1, and returning
-    an empty return is interpreted as a 0. Be aware if you omit the return
-    statement, the result of the last Tcl command executed will be returned
-    by the proc. This will not likely produce the results you intended (this
-    is a "feature" of Tcl).
-
-    Here's a list of the bindings that use the return value from procs
-    they trigger:
-
-    (1) MSG   Return 1 to make the command get logged like so:
-                (nick!user at host) !handle! command
-
-    (2) DCC   Return 1 to make the command get logged like so:
-                #handle# command
-
-    (3) FIL   Return 1 to make the command get logged like so:
-                #handle# files: command
-
-    (4) PUB   Return 1 to make the command get logged like so:
-                <<nick>> !handle! command
-
-    (5) CTCP  Return 1 to ask the bot not to process the CTCP command on its
-              own. Otherwise, it would send its own response to the CTCP
-              (possibly an error message if it doesn't know how to deal with
-              it).
-
-    (6) FILT  Return "" to indicate the text has been processed, and the bot
-              should just ignore it. Otherwise, it will treat the text like
-              any other.
-
-    (7) FLUD  Return 1 to ask the bot not to take action on the flood.
-              Otherwise it will do its normal punishment.
-
-    (8) RAW   Return 1 to ask the bot not to process the server text. This
-              can affect the bot's performance by causing it to miss things
-              that it would normally act on -- you have been warned.
-
-    (9) CHON  Return 1 to ask the bot not to process the partyline join event.
-
-    (10) CHOF  Return 1 to ask the bot not to process the partyline part event.
-
-    (11) WALL  Return 1 to make the command get logged like so:
-           !nick! msg
-
-*** CONTROL PROCEDURES ***
-
-  Using the 'control' command, you can put a DCC connection (or outgoing
-  TCP connection) in control of a script. All text received from the
-  connection is sent to the proc you specify. All outgoing text should
-  be sent with 'putdcc'.
-
-  The control procedure is called with these parameters:
-    procname <idx> <input-text>
-
-  This allows you to use the same proc for several connections. The
-  idx will stay the same until the connection is dropped. After that,
-  it will probably get reused for a later connection.
-
-  To indicate that the connection has closed, your control procedure
-  will be called with blank text (the input-text will be ""). This
-  is the only time it will ever be called with "" as the text, and it
-  is the last time your proc will be called for that connection. Don't
-  call killdcc on the idx when text is blank, it will always fail with
-  "invalid idx".
-
-  If you want to hand control of your connection back to Eggdrop, your
-  proc should return 1. Otherwise, return 0 to retain control.
-
-
-*** TCP CONNECTIONS ***
-
-  Eggdrop allows you to make two types of TCP ("telnet") connections:
-  outgoing and incoming. For an outgoing connection, you specify the
-  remote host and port to connect to. For an incoming connection, you
-  specify a port to listen on.
-
-  All of the connections are *event driven*. This means that the bot will
-  trigger your procs when something happens on the connection, and your
-  proc is expected to return as soon as possible. Waiting in a proc for
-  more input is a no-no.
-
-  To initiate an outgoing connection, use:
-    set idx [connect <hostname> <port>]
-
-  $idx now contains a new DCC entry for the outgoing connection.
-
-  All connections use non-blocking (commonly called "asynchronous",
-  which is a misnomer) I/O. Without going into a big song and dance
-  about asynchronous I/O, what this means to you is:
-
-    * assume the connection succeeded immediately
-    * if the connection failed, an EOF will arrive for that idx
-
-  The only time a 'connect' will return an error is if you give it a
-  hostname that can't be resolved (this is considered a "DNS error").
-  Otherwise, it will appear to have succeeded. If the connection failed,
-  you will immediately get an EOF.
-
-  Right after doing a 'connect' call, you should set up a 'control' for
-  the new idx (see the section above). From then on, the connection will
-  act just like a normal DCC connection that has been put under the control
-  of a script. If you ever return "1" from the control proc (indicating
-  that you want control to return to Eggdrop), the bot will just close the
-  connection and dispose of it. Other commands that work on normal DCC
-  connections, like 'killdcc' and 'putdcc', will work on this idx, too.
-  The 'killdcc' command will fail with "invalid idx" if you attempt to use
-  it on a closed socket.
-
-  To create a listen port, use:
-    listen <port> script <proc>
-
-  Procs should be declared as:
-    <procname> <newidx>
-
-  For example:
-    listen 6687 script listen:grab
-
-    proc listen:grab {newidx} {
-      control $newidx listen:control
-    }
-
-    When a new connection arrives in port 6687, Eggdrop will create a new
-    idx for the connection. That idx is sent to 'listen:grab'. The proc
-    immediately puts this idx under control. Once 'listen:grab' has been
-    called, the idx behaves exactly like an outgoing connection would.
-
-  The best way to learn how to use these commands is to find a script that
-  uses them and follow it carefully. However, hopefully this has given you
-  a good start.
-
-
-*** MATCH CHARACTERS ***
-
-  Many of the bindings allow match characters in the arguments. Here
-  are the four special characters:
-
-  ?  matches any single character
-  *  matches 0 or more characters of any type
-  %  matches 0 or more non-space characters (can be used to match a single
-     word)
-  ~  matches 1 or more space characters (can be used for whitespace between
-     words)
-    _____________________________________________________________________
-
-  Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Eggheads Development Team
----------------------- End of diff -----------------------



More information about the Changes mailing list