# Getting started with Supybot

## Introduction

Ok, so you've decided to try out Supybot. That's great! The more people who use Supybot, the more people can submit bugs and help us to make it the best IRC bot in the world :)

First things first: Supybot requires Python 2.3. There ain't no getting around it. If you're a Python developer, you probably know how superior 2.3 is to previous incarnations. If you're not, just think about the difference between a bowl of plain vanilla ice cream and a banana split. Or something like that. Either way, we're Python developers and we like banana splits.

## Installing the bot and its utilities

So what do you do? First thing you'll want to do is run (with root/admin privileges) python setup.py install. This will install Supybot globally. If you need to install locally for whatever reason, see this forum post on how to do so. You'll then have several new programs installed where Python scripts are normally installed on your system (`/usr/bin` or `/usr/local/bin` are common on UNIX systems; `C:\Python23\Scripts` is a common place on Windows; and (watch out, this is a long one :)) `/System/Library/Frameworks/Python.framework/Versions/2.3/bin` is a common place on MacOS X.). The two that might be of particular interest to you, the new user, are
and
The former (
is the script to run an actual bot; the latter (
is an in-depth wizard that provides a nice user interface for creating configuration files for your bot. We'd prefer you to the use
, but if you're in a hurry or don't feel like being asked many questions, just run supybot with no arguments and it'll ask you only the questions necessary ")to run a bot.

## Firing up the bot for the first time

So after running either of those two programs, you've got a nice registry file handy. If you're not satisfied with your answers to any of the questions you were asked, feel free to run the program again until you're satisfied with all your answers. Once you're satisfied, though, run the
program with the registry file you created as an argument. This will start the bot; unless you turned off logging to stdout, you'll see some nice log messages describing what the bot is doing at any particular moment; it may pause for a significant amount of time after saying "Connecting to ..." while the server tries to check its ident.

## Your first interactions with the bot

Ok, so let's assume your bot connected to the server fine and joined the channels you told it to join. For now we'll assume you named your bot supybot (you probably didn't, but it'll make it much clearer in the examples that follow to assume that you did). We'll also assume that you told it to join #channel (a nice generic name for a channel, isn't it? :)) So what do you do with this bot that you just made to join your channel? Try this in the channel:

supybot: list

Replacing supybot with the actual name you picked for your bot, of course. Your bot should reply with a list of the plugins he currently has loaded. At least Admin, Channel, Config, Misc, Owner, and User should be there; if you used
to create your configuration file you may have many more plugins loaded. The list command can also be used to list the commands in a given plugin:

supybot: list Misc

Will list all the commands in the Misc plugin.

### Accessing the bot's online help

If you want to see the help for any command, just use the help command:

supybot: help help supybot: help list supybot: help load

### Dealing with ambiguous commands

Sometimes more than one plugin will have a given command; for instance, the list command exists in both the Misc and Config plugins (both loaded by default). List, in this case, defaults to the Misc plugin, but you may want to get the help for the list command in the Config plugin. In that case, you'll want to give your command like this:

supybot: help config list

Anytime your bot tells you that a given command is defined in several plugins, you'll want to use this syntax (plugin command) to disambiguate which plugin's command you wish to call. For instance, if you wanted to call the Config plugin's list command, then you'd need to say:

supybot: config list

Rather than just list.

### Loading plugins

Now that you know how to deal with plugins having commands with the same name, let's take a look at loading other plugins. If you didn't use
, though, you might do well to try it before playing around with loading plugins yourself: each plugin has its own `configure` function that the wizard uses to setup the appropriate registry entries if the plugin requires any.

#### Identifying yourself as the bot owner

Now, if you do want to play around with loading plugins, you're going to need to have the owner capability. If you ran the wizard, then chances are you already added an owner user for yourself. If not, however, you can add one via the handy-dandy
script. You'll want to run it while the bot is not running (otherwise it could overwrite
's changes to your user database before you get a chance to reload them). Just follow the prompts, and when it asks if you want to give the user any capabilities, say yes and then give yourself the owner capability (without the quotes), restart the bot and you'll be ready to load some plugins!

Now, in order for the bot to recognize you as your owner user, you'll have to identify with the bot. Open up a query window in your irc client (/query should do it; if not, just know that you can't identify in a channel because it requires sending your password to the bot). Then type this:

help identify

And follow the instructions; the command you send will probably look like this, with your owner user and password replaced:

identify myowneruser myuserpassword

The bot will tell you that “The operation succeeded” if you got the right name and password. Now that you're identified, you can do anything that requires any privilege: that includes all the commands in the Owner and Admin plugins, which you may want to take a look at (using the list and help commands, of course). One command in particular that you might want to use (it's from the User plugin) is the addhostmask command: it lets you add a hostmask to your user record so the bot recognizes you by your hostmask instead of requiring you to always identify with it before it recognizes you. Use the help command to see how this command works. Here's how I often use it:

addhostmask myuser [hostmask] mypassword

You may not have seen that "[hostmask]" syntax before. Supybot allows nested commands, which means that any command's output can be nested as an argument to another command. The hostmask command from the Misc plugin returns the hostmask of a given nick, but if given no arguments, it returns the hostmask of the person giving the command. So the command above adds the hostmask I'm currently using to my user's list of recognized hostmasks. I'm only required to give `mypassword` if I'm not already identified with the bot.

### The more command

Another command you might find yourself needing somewhat often is the more command. The IRC protocol limits messages to 512 bytes, 60 or so of which must be devoted to some bookkeeping. Sometimes, however, Supybot wants to send a message that's longer than that. What it does, then, is break it into "chunks" and send the first one, following it with "(X more messages)" where X is how many more chunks there are. To get to these chunks, use the more command. One way to try is to look at the listing of configuration groups for the bot (more on this in the CONFIGURATION document) by giving the command "config list supybot". Last I checked, it'll overflow into a second chunk. When you invoke this command, you should see output like:

<supybot> nick, ident, user, server, password, channels, prefixChars, defaultCapabilities, defaultAllow, defaultIgnore, humanTimestampFormat, externalIP, bracketSyntax, pipeSyntax, followIdentificationThroughNickChanges, alwaysJoinOnInvite, showSimpleSyntax, maxHistoryLength, nickmods, throttleTime, snarfThrottle, threadAllCommands, pingServer, pingInterval, upkeepInterval, flush, (1 more message)

Now, to see the rest of the output, simply give the command more, and it will show you the rest:

<jemfinch> more <supybot> httpPeekSize, and defaultSocketTimeout

## You're ready!

You should now have a solid foundation for using Supybot. Be sure to check the help that is built-in to the bot itself if you have any questions, and enjoy using Supybot!