These are the interfaces of some of the objects you'll deal with if
you code for Supybot.

ircmsgs.IrcMsg:
	This is the object that represents an IRC message.  It has
	several methods and attributes.  The most important thing
	about this class, however, is that it *is* hashable, and thus
	*cannot* be modified.  Do not change any attributes; any code
	that modifies an IRC message is *broken* and should not
	exist.

	Interesting Methods:
		    __init__: One of the more complex initializers in 
		    a class.  It can be used in three different ways:

		    1) It can be given a string, as one received from
                       the server, which it will then parse into its
                       separate components and instantiate the class
                       with those components as attributes.

		    2) It can be given a command, some (optional)
                       arguments, and a (optional) prefix, and will
                       instantiate the class with those components as
                       attributes.

		    3) It can be given, in addition to any of the
                       above arguments, a 'msg' keyword argument that
                       will use the attributes of msg as defaults.
                       This exists to make it easier to copy
                       messages, since the class is immutable.

		    __str__: This returns the message in a string form
		    suitable for sending to a server.

		    __repr__: This returns the message in a form
		    suitable for eval(), assuming the name "IrcMsg" is
		    in your namespace and is bound to this class.

	Interesting Attributes:
		    This is the meat of this class.  These are
		    generally what you'll be looking at with IrcMsgs.

		    command: This is the command of the IrcMsg --
		    PRIVMSG, NOTICE, WHOIS, etc.

		    args: This is a tuple of the arguments to the
		    IrcMsg.  Some messages have arguments, some don't,
		    depending on what command they are.  You are, of
		    course, always assured that args exists and is a
		    tuple, though it might be empty.

		    prefix: This is the hostmask of the person/server
		    the message is from.  In general, you won't be
		    setting this on your outgoing messages, but
		    incoming messages will always have one.  This is
		    the whole hostmask; if the message was received
		    from a server, it'll be the server's hostmask; if
		    the message was received from a user, it'll be the
		    whole user hostmask.  In that case, however, it's
		    also parsed out into the nick/user/host
		    attributes, which are probably more useful to
		    check for many purposes.

		    nick: If the message was sent by a user, this will
		    be the nick of the user.  If it was sent by a
		    server, this will be the server's name (something
		    like calvino.freenode.net or similar).

		    user: If the message was sent by a user, this will
		    be the user string of the user -- what they put
		    into their IRC client for their "full name."  If
		    it was sent by a server, it'll be the server's
		    name, again.

		    host: If the message was sent by a user, this will
		    be the host portion of their hostmask.  If it was
		    sent by a server, it'll be the server's name (yet
		    again :))
		 
                       
irclib.Irc:
	This is the object to handle everything about IRC except the
	actual connection to the server itself.

	Interesting Methods:
		    The two following messages (queueMsg and
		    sendMsg) are the methods by far most commonly
		    called by plugin authors.  They're generally
		    the only methods you need to pay attention to
		    if you're writing plugins.
		    
		    queueMsg: Queues a message for sending to the
		    server.  The queue is generally FIFO, but it
		    does prioritize messages based on their command.

		    sendMsg: Queues a message for sneding to the
		    server prior to any messages in the normal
		    queue.  This is exactly a FIFO queue, no
		    reordering is done at all.

		    The following two methods are the most important
		    for people writing new IrcDrivers.  Otherwise,
		    you really don't need to pay attention to them.

		    feedMsg: Feeds the Irc object a message for it
		    handle appropriately, as well as passing it on
		    to callbacks.

		    takeMsg: If the Irc object has a message it's
		    ready to send to the server, this will return
		    it.  Otherwise, it will return None.

		    The next several methods are of far more marginal
		    utility.  But someone may need them, so they're
		    documented here.

		    addCallback: Takes a callback to add to the list
		    of callbacks in the Irc object.  See the
		    interface for IrcCallback for more information.

		    getCallback: Gets a callback by name, if it is
                    in the Irc object's list of callbacks.  If it
		    it isn't, returns None.

		    removeCallback: Removes a callback by name.
                    Returns a list of the callbacks removed (since
                    it is technically possible to have multiple
		    callbacks with the same name.  This list may
		    be empty.

		    __init__: Requires a nick.  Optional arguments
		    include user and ident, which default to the
		    nick given, password, which defaults to the empty
                    password, and callbacks, a list of callbacks
                    (which defaults to nothing, an empty list).

		    reset: Resets the Irc object to its original
		    state, as well as sends a reset() to every
		    callbacks.

		    die: Kills the IRC object and all its callbacks.

	Interesting attributes:
		    nick: The current nick of the bot.

		    prefix: The current prefix of the bot.

		    server: The current server the bot is connected to.
                    Usually consists of a (host, port) pair.

                    afterConnect: False until the bot has received a
                    command sent after the connection is finished --
                    376, 377, or 422.

		    state: An IrcState object for this particular
                    connection.  See the interface for the IrcState
                    object for more information.


irclib.IrcCallback:
	Interesting Methods:
		    name: Returns the name of the callback.  The
		    default implementation simply returns the name
		    of the class.

		    __call__: Called by the Irc object with itself
		    and the message whenever a message is fed to
		    the Irc object.  Nothing is done with the return
		    value.

		    inFilter: Called by the Irc object with itself
		    and the message whenever a message is fed to
		    the Irc object.  The return value should be an
		    IrcMsg object to be passed to the next callback
		    in the Irc's list of callbacks.  If None is
		    returned, all processing stops.  This gives
		    callbacks an oppurtunity to "filter" incoming
		    messages before general callbacks are given
		    them.

		    outFilter: Basically equivalent to inFilter,
		    except instead of being called on messages
		    as they enter the Irc object, it's called on
		    messages as they leave the Irc object.

		    die: Called when the parent Irc is told to
		    die.  This gives callbacks an oppurtunity to
		    close open files, network connections, or
		    databases before they're deleted.

		    reset: Called when the parent Irc is told to
		    reset (which is generally when reconnecting
		    to the server).  Most callbacks don't need
		    to define this.

	Interesting attributes:
		    priority: Determines the priority of the
		    callback in the Irc object's list of
		    callbacks.  Defaults to 99; the valid range
		    includes 0 through sys.maxint-1 (don't use
		    sys.maxint itself, that's reserved for the
		    Misc plugin).  The lower the number, the
		    higher the priority.  High priority
		    callbacks are called earlier in the
		    inFilter cycle, earlier in the __call__
		    cycle, and later in the outFilter cycle --
		    basically, they're given the first chances
		    on the way in and the last chances on the
		    way out.