TownCrier
Introduction
TownCrier is an IRC bot which is currently only active on freenode (although that could change if enough interest is generated). TownCrier integrates with the Trac project management solution to allow IRC users to see as changes are made in Trac and to generate links and even submit tickets all from IRC.
He is based upon Supybot, a highly extensible and easy to use IRC bot, written in python. Currently no modification has been made to the source and all extra functionality has been added through the use of plugins and configuration options. Basically, it doesn’t take too much to turn a vanilla Supybot install into a nice little TracBot.
TownCrier started life as TracBot, simply a clone of WhippingBoy, a similar IRC bot found in the Trac channel. He was originally met with skepticism by the residents of #adium but now is a permanent and accepted figure in the channel. From the early days as a RSS => IRC gateway to now, where he has a full set of functions inside his TracBot plugin, TownCrier has come a long way.
Commands
Commands are called one of three ways. The best way in my opinion is to prefix them with an exclamation mark (eg. ”!zomg”). You can also prefix the bot’s nick, which is normally TownCrier (eg. ”Towncrier: zomg”). Finally you can run commands in a query with the bot. Some commands such as register and identify require this for obvious reasons.
I have written a few plugins specifically for TownCrier, which have been released under the BSD license and one of which is in the supybot-plugins repository. The commands are detailed below.
Tracbot Plugin
ticket (
ticket [<channel>] <ticket_number>) generates the link for the ticket with number<ticket_number>in the Trac site defined for<channel>. Channel defaults to the channel which the command is called in and is only required if the command is called in a query.wiki (
wiki [<channel>] <wiki_page>) generates the link for the wiki page<wiki_page>in the Trac site defined for<channel>. Channel defaults to the channel which the command is called in and is only required if the command is called in a query.changeset (
changeset [<channel>] <changeset_number>) generates the link for the changeset with number<changeset_number>. Channel defaults to the channel which the command is called in and is only required if the command is called in a query.tracsearch (
tracsearch [<channel>] [wiki|tickets|changesets|commits] <search_string>) generates a link to the search for<search_string>on the Trac site defined for<channel>. Channel defaults to the channel which the command is called in and is only required if the command is called in a query. Type is optional andchangesetsandcommitsare synonymous.maketicket (
maketicket [--type=<type>] [--reporter=<reporter>] [--component=<component>] [--owner=<owner>] [--milestone=<milestone>] [--version=<version>] [--severity=<severity>] "<summary>" <description>) Actually creates a new ticket for you with the supplied options. The reporter defaults to the nick which called the command and everything else defaults to ”None” unless supplied.
Getting TownCrier in Your Channel
So this sounds all very cool and you want one? Well that’s easy. Just give me a bell! I’m contactable on IRC. My nick is Synapse and I’m on all the time, leave a message if I’m not there. I’m also contactable via email at andrew@mootopinter.com.

