Specialized Clients - Bots, Bouncers, and everything else
This category covers special types of clients, such as bots, bouncers, and other programs that connect into IRC, but don’t provide the typical client interface.
Bots are automated IRC clients which run with little or no user interaction, generally to provide some utility or amusement to channels. On networks without channel registration services such as EFNet and IRCNet, bots often fulfill a key role on channels of maintaining ops.
Servers have widely varying policies regarding bot usage - in the past, very few servers allowed bots on EFNet and IRCNet (and those that did usually required prior permission) because of their place in channel wars, while networks supporting registration have generally been more tolerant.
These days, most servers will allow bots, but it’s still necessary to check the policies of the network and individual servers. Even where bots are allowed, bots are expected to be well behaved - bots that cause problems, or in some case, even bots that are involved in problems, are likely to be banned.
Some best practices for bot operators:
- Bots should only function on channels where they are welcome.
- Bots which are not used for channel protection should leave or return according to thie wishes of channel operators.
- Bots should clearly indicate who’s responsible for running them, or the ops of channels where they are operated should know this information.
- Bots should be carefully coded to avoid “privmsg loops” - where two or more bots are triggering each other to speak endlessly. Following the guidance of RFC1459 regarding automation is highly recommended.
- Bots should not be configured in a way to limit the actions of channel operators without a thorough understanding of consequences. A bot may be able to react more quickly than a human chanop can, but speed is no substitute for human judgement, and many “well meaning” protections like mode locks have been known to backfire spectacutlarly. (If you can’t trust your channel ops, why are they opped?)
Eggdrop is a widely popular IRC bot package, and is frequently used either to protect channels in the absence of services, or to provide services to a channel beyond what the network’s services can provide.
Still the most popular bot for channel protection purposes, Eggdrop is a relative heavyweight that provides a framework for managing user accounts, networking between bots, and a DCC partyline for management, as well as a TCL interpreter for extending the bot.
Other Eggdrop Resources:
- #egghelp on EFNet
Infobot is a popular “FAQ” bot for IRC channels, with a rudamentary capability to be taught boilerplate answers to common questions. It’s still very popular, but it’s old and mostly unmaintained these days. It’s spawned many clones, forks, and imitations, which by now are far more advanced than the original.
- #xkcd on irc.foonetic.net - Home of the original bucket.
- #bucket on irc.foonetic.net - bucket’s development channel.
Irker is a version control notification bot written by Eric S. Raymond to replace the defunct CIA notification service. It is used to notify a channel of software developers when changes are “committed” or “pushed” to various version control systems, including Git.
A number of frameworks also exist, which are well suited to writing your own customized bots. A few of these are listed here.
- bot::basicbot::pluggable - simple and modular perl framework
- guppy (source) - simple, modular Python framework
- mozbot - heavily customized perl framework, with many preconfigured modules for software developers
- Autumn - Modular Ruby framework for IRC bots.
This is by no means a comprehensive list of bot software, especially given that full-featured IRC clients often have functionality that borders on bot-like, and many specialized bots exist to particular tasks. Software developers in particular are fond of writing bots for specific tasks, like announcing commits to version control systems, outcomes of software builds and testing, and other things that interest them.
Bouncers, also known as IRC proxies, proxy IRC connections for reasons of privacy, security, or vanity, and they may additionally function as bots as well, allowing persistent presence for users with intermittent connections.
BNC was the original IRC bouncer, and may still be referred to in some howtos and other documentation. The homepage is down of this writing, but the package is still found in some repositories. It’s considered obsolete by most users these days, but it’s sufficient for circumventing port restrictions or masking your home address.
Part bot, part bouncer, znc is a robust way to keep a constant presence on IRC. In addition to the standard bnc proxying functions, znc provides persistent connections to the server that stay active when a client connects, a backlog that’s delivered to the client when it reconnects, and a module system that allows znc to function as a bot in your absence.
Source Code Repository
Clients with built in proxies
Several unix clients also function as IRC proxies, and are documented on their respective pages:
Some other “specialty” clients may not fit cleanly into any of these categories. They are listed here.
xmpp, better known to many users as jabber, has a provision for gateways between the IRC network and the XMPP network. These gateways are known in XMPP terms as “transports”, and usually translate IRC sessions to XMPP’s Multi-User Chat (MUC) facility so that an instant messaging user can connect to IRC without an additional client.
Normally, a transport is installed only for the users (or a subset of the users) of a particular XMPP service on the network.
Some XMPP-to-IRC transports include:
Functionality of such solutions will be limited by both the gateway and the instant messaging program in use. but is sufficient for basic chatting, and may be sufficient for limited exercise of channel operator functions, but not much else.
irc-to-xmpp and irc-to-other gateways
- bitlbee - multi-protocol gateway from IRC to XMPP (including Facebook Chat/Google Talk), AIM/ICQ, Yahoo, and others.