PircBot Change Log

Java IRC Bot development history

Back to the PircBot IRC Bot home page.


PircBot 1.5.0 adds automatic handling of 439 server responses. This allows PircBot to connect to networks such as Rizen, where a 439 server response must be ignored during connection.


PircBot 1.4.6 adds native support to identify securely with NickServ. Some IRC Networks (such as freenode) require users to register and identify with NickServ before they are able to send private messages to other users, thus reducing the amount of spam. If you are using an IRC network where this kind of policy is enforced, you will need to make your bot identify itself to NickServ before you can send private messages. Assuming you have already registered your bot's nick with NickServ, the new identify(String password) method can be used to identify with the supplied password. It usually makes sense to identify with NickServ immediately after connecting to a server.

PircBot's identify method issues a raw NICKSERV command to the server, and is therefore safer than the alternative approach of sending a private message to NickServ. The latter approach is considered dangerous, as it may cause you to inadvertently transmit your password to an untrusted party if you connect to a network which does not run a NickServ service and where the untrusted party has assumed the nick "NickServ".


PircBot 1.4.4 introduces a couple of features that will be loved by those who wish to run the bot behind NAT or a firewall. The setDccPorts method can be used to specify a list of port numbers to be used to accept DCC connections, making port forwarding through NAT much easier. If no list is supplied, PircBot will continue to pick any available port number. The second new feature allows you to set the IP address of PircBot. This is also useful if you need to set the IP address to that of your router in order to receive DCC connections or if you are using multiple network interface cards. This release also fixes minor bugs in the DccFileTransfer class and the tracking of user privileges. Thanks DeadEd for testing these new features.


PircBot 1.4.2 introduces a close() method in the DccFileTransfer class, allowing you to abort file transfers at any moment. The new getTransferRate() method lets you estimate the average transfer speed of a file. Many thanks to Pete Palmer for getting these functions realised by means of a generous donation :)


PircBot 1.4.0 introduces an improved removeFormattingAndColors method in the Colors class, which can also remove background colors. From now on, minor version numbers that are even will indicate stable releases. Odd numbers will represent untested releases and will not be made available to the public.


PircBot 1.3.0 introduces a new method, sendRawLineViaQueue, which allows you to have more control over what you send without flooding the server. You can now call setAutoNickChange(true) to make PircBot automatically obtain a valid nickname if the desired name is already in use.


PircBot 1.2.9 makes the handleLine method non-final. This makes it easier to grab every raw line that comes from the server.


PircBot 1.2.8 fixes a bug with message receiving in channels with ! and + prefixes.


PircBot 1.2.6 allows access to the reader and writer objects in the DCC Chat object, giving more control over sending and receiving data that isn't separated by new lines.

I wrote an article about PircBot, which appeared in the December 2003 issue of Java Developer's Journal, pages 26-32. You can also view it online here


PircBot is 2 years old today! Thanks to everyone for providing the feedback and support that brought it this far. Let's hope there are still many years left to go.


PircBot 1.2.5 removes two messages printed in error to the standard output when a PircBot object has its dispose() method called. Thanks to Olivier Chalouhi for spotting this.


PircBot 1.2.4 fixes an error in the value returned by getProgress() when called on a DccFileTransfer object.


PircBot 1.2.3 includes a few minor changes to make it compile (and run) under JDK 1.1.8. This makes it suitable for writing Java applets with IRC connectivity in most browsers. Of course, it still compiles with the current Java 1.4.2. The Queue class contains a new addFront method.


PircBot 1.2.2 introduces the dispose method. This is useful when writing bots or clients that use multiple servers (and therefore multiple PircBot instances) or when integrating a PircBot with an existing program. Calling dispose ensures that both of the thread resources used by the PircBot to handle incoming and outgoing messages are stopped, allowing the PircBot object to be garbage collected and free up memory.

Reconnection after a NickAlreadyInUseException has been thrown can now be successfully done on the first attempt. Thanks to Mattias for identifying this problem and testing the fix before release.


PircBot 1.2.1 fixes a broken link in the documentation. No code has changed. If you already have PircBot 1.2.0, there is no need to update to PircBot 1.2.1.


PircBot 1.2.0 contains lots of new features. I've spent a long time preparing and testing this release, as it includes the most popular requests made by PircBot implementors. Hopefully these additions will make PircBot a lot more useful to everyone. So here's a rundown of the new features:

If you have exisiting code that made use of DCC file receiving, it may need to be altered slightly to work with this new release and make use of its new features.

PircBot is now in a CVS repository, so I can work on it more easily when I'm travelling about.


PircBot 1.0.5 allows charsets chosen by the user to affect incoming as well as outgoing messages. Also improved connection handling.


PircBot 1.0.4 introduces internationalisation. It is now possible (using the setEncoding method) to specify the charset that will be used when messages are sent to IRC servers, e.g. "GB2312" for Chinese encoding. The JVM's default encoding is otherwise used. Thanks to Xianhong Chen and Michael Schierl for their help and suggestions.


Today, I gave an hour lecture on PircBot to first year Computer Science undergraduates at the University of Kent at Canterbury. Everyone seemed fairly interested and already there are new bots popping up all over the university's IRC servers :)

I feel this this is a worthwhile thing to teach, as it makes Java programming fun. Students are able to take all of the stuff they have learnt and apply it in such a way that produces a useful and fun result. If you are interested in getting hold of my lecture slides for a similar purpose, then please do not hesitate to contact me.


PircBot 1.0.3 fixes a bug in the user list feature where it failed to recognise mode changes correctly. The redundant _channel field has been removed from the User class and @since tags have been added to the documentation where appropriate to indicate which release each method has been available from.


PircBot 1.0.2 sees an alteration in the disconnect() method so that it may be safely called from other classes. The API documentation has been completed for the DccChat class and hyperlinks have been added to the PircBot class where required. The classes that deal with connections have been refactored and output to the server is no longer discarded from the log output during the process of connecting to an IRC server.


PircBot 1.0.1 released: Whoops, a last minute change I made to the bit that detects QUIT messages meant that the user list feature wasn't updated when other users quit from a server. This has now been fixed. If your PircBot makes use of the user list features, then it is highly recommended that you download this latest version.


I am pleased to announce the release of PircBot 1.0.0.

This new version number represents a significant addition to the capabilities of PircBot - it does, more or less, now provide virtually any feature you would need to make an IRC bot or an IRC client (and if it doesn't, it's always possible to make it do it!).

Here is a list of the new features in PircBot 1.0.0:-

PircBot 1.0.0 has been released after a non-public trial of PircBot 0.9.13. It is probably a good thing for the triskaidekaphobics amongst us that it was never released to the public :) Thanks to Chris Lambert for helping out with testing the pre-release version of PircBot 1.0.0.

I would like to thank once again all those who have helped in its development by providing feedback and generally nice comments :)

Happy new year!


Merry Christmas, everyone.

PircBot 0.9.12 makes it much easier to add colour and formatting to messages by using the new Colors class. It is also now possible to request a list of all channels on the server and detect topic changes.

The following bugs/issues have been resolved: Failure to close file when DCC send fails; Removal of duplicate maximum line length field; No chance of losing any private messages during a nick change; onMode now has no default implementation and can be safely overriden without needing to call super.onMode.

Also note that the new version of pisg (0.44) has been fixed so that it now correctly parses PircBot actions when it is used to generate IRC channel statistics.

P.S. Thanks to those who wished me a happy birthday for yesterday :)


Not an actual revision as such, but I'd just like to point out that PircBot is a year old today! Yay :)


PircBot 0.9.11 corrects a problem in the InputThread class, where it may have been possible for PircBot to utilize unnecessary CPU usage in the event of being disconnected by a server. I would recommend that you upgrade to this latest release if you have experienced any such problems.


PircBot 0.9.10 has had a few minor additions and corrections made to its documentation. A toString() method has also been added. You may find this useful for debugging purposes, particularly if you are using more than one PircBot instance to achieve multiple server connectivity. The format of this String may change between different versions of PircBot, but is currently something of the form Version{PircBot x.y.z Java IRC Bot - www.jibble.org} Connected{true} Server{irc.dal.net} Port{6667} Password{}


PircBot 0.9.9 has several important new features, so upgrade now! Improved disconnection detection has been integrated, so it is now possible to detect ping timeouts much more easily. Reconnecting to an IRC server is much easier with the introduction of the reconnect() method and associated getPort() and getPassword() methods. It is now possible to monitor the size of the outgoing message queue with the getOutgoingQueueSize() method. Multiple server support has been enhanced by explicit provision of hashCode() and equals() methods and documentation. The web site now contains a PircBot FAQ.


PircBot 0.9.8 now includes full support for multiple concurrent DCC CHAT sessions by being able to send requests as well as receive them. Overall, DCC support (both file transfers and chat) has been improved. You could, for example, use a DCC CHAT session to remotely control your bot with a bit more security by bypassing the IRC server and connecting directly to your bot. You can also read some quotes from Monty, a bot based on PircBot.


A couple of very minor bug fixes: Fixed a problem where in [very] rare circumstances it may have called your onDisconnect() method twice when a disconnection was detected. Also fixed an ambiguity in the documentation for the sendCTCPCommand method.


A couple of new features have been added: There is now an onConnect method that can be implemented to allow you to immediately detect when the PircBot has successfully connected to an IRC server. This is more desirable than polling the isConnected method. There is also a getServer method which returns the name of the last server that you tried to connect to. There have also been slight changes in the javadoc documentation (included in the zip file) to reflect these additions.

If you have any questions or comments, then please do send them to the mailing list rather than directly to me, as many minds are often better than one :-)


When I first placed PircBot on the web, a google search for "PircBot" gave no results, so happy in the knowledge that there was nothing out there with the same name, that's the name I chose. Now, the same google search yields 6470 pages! Do consider joining the mailing list if you want to become more involved, or link to this page to spread the news further!


w00t! PircBot is getting nearly 1000 downloads per month - I'd like to thank everybody for trying it out!


PircBot 0.9.5 includes a lot of new features and minor bug jibbling:-

The Ident server has been changed so that it is guaranteed to be able to accept an ident request before the constructor returns. This solves problems where the ident server did not appear to be running if you were trying to connect to an IRC server immediately after starting up the ident server.

The disconnect() method has now been made public. There didn't seem to be any sensible reason to keep it as protected. Bear in mind, however, that it is nicer to use the quitServer method to disconnect from a server, as this allows you to provide a quit message.

The javadoc comments for the sendMessage method have been changed so it is more clear that the method can also be used to send private messages (some users thought it wasn't possible for a PircBot to send private messages).

Added the sendCTCPCommand method to make it easier to send CTCP commands.

It is now a lot easier to detect when other users (or even the bot itself) have been opped, voiced, banned, etc, or when channel modes have been applied, such as moderation, secret, invite-only, etc. The onMode method in the PircBot class now deals with calling the methods onOp, onDeOp, etc, so if you override the onMode method, be sure to call super.onMode(...) to enjoy the laziness of not having to manually parse mode flags :-)

The PircBot FreeBSD port has also been upgraded to version 0.9.5.


PircBot 0.9.4 is now available as a FreeBSD port


Version 0.9.4 released. This addresses some minor issues.

Version numbering from now on will be of the form x.y.z where the leftmost digit represents the major version number. Small revisions will be reflected by a change of the middle digit and minor fixes by the rightmost (Hence, the previous version would probably have been 0.9.3).

The PircBot download link now points at a zip file of the name pircbot-x.y.z.zip, where x.y.z is the version number of the release. All javadoc documentation contains this version number and the exact build time. The version number is also stored in a public string PircBot.VERSION.

Codewise, the only change is the name of a method (intToIP is now known as longToIP).


PircBot 0.9c released. There are some significant additions to this version, mainly in response to requests from PircBot users. So, what's new, you're probably wondering...

By popular demand, DCC CHAT is now supported! This allows the bot to connect directly to a client and send/receive messages without having to go via the server. This means that flooding is not an issue, and naughty irc server operators won't be able to "spy" on such messages so easily.

Most IRC servers attempt to contact the ident server on connecting hosts in order to determine the user's identity. A few IRC servers will not allow you to connect unless this information is provided. PircBot now comes with a built-in ident server, in case you need to use it. Just call the startIdentServer method to fire it up.

There have also been a few tweaks and optimisations made to the existing code in PircBot. The source code, documentation and compiled class files are available inside the pircbot.jar file (this can be opened with WinZip, jar, or suchlike).

I've also made sure that the javadoc documentation answers most peoples' questions about how to use PircBot's methods. Please do take a look at this documentation, it really is useful. (You probably only really need to look at the documentation for the PircBot class itself).

As usual, keep the feedback flooding in. It really is nice to hear what people think about PircBot and the new additions to it as well as what they're using it for!.


Minor bug fix. Thanks to René Wolferink for pointing out that if the bot got sent a DCC event that was not of a supported type, then the onUnknown method did not get called. This has now been fixed. At the moment, PircBot supports DCC sending and receiving of files.


PircBot's default logging style can now be used with pisg - the Perl IRC Statistics Generator. This allows you to turn PircBot log files into amusing statistics for your IRC channels. Take a look at their homepage to see some examples of what it produces.

Unless you have overridden PircBot's log(...) method, all log entries are written to the standard output. If you want all of this to be appended to a log file when you run your bot, then you can do this by running it like so: java MyBot >> mybot.log


When an 'onXxx' method threw an unchecked Exception, the PircBot used to silently ignore it and carry on as normal. This meant that the user could write potentially buggy code that fails, but they may be unaware of this if they do not explicitly catch the Exception themselves.

PircBot now reports such uncaught exceptions that propagate back to the calling thread by entering the stack trace in the log, thus making debugging of your own code easier.

Please subscribe to the mailing list if you want to be notifed about new releases as and when they happen!


PircBot now strictly enforces the IRC RFC requirement of a maximum line length of 512 bytes (including the trailing \r\n) for anything that is sent to the IRC server. This can no longer be overridden by the user.


After much request, PircBot now permits sending and receiving of files over DCC. Documentation for this is, as always, found in the API documentation on this website, or inside the pircbot.jar archive file. Thanks to Niels Demoen for testing this feature before its release. Also note that for convenience, NickAlreadyInUseException is now a sub class of IrcException.


A minor alteration to the onMode method - the mode string no longer has a leading space character. Thanks to Thomas Skovsende for suggesting this change.


Fixed a problem where on some Java Virtual Machines, the outgoing message queue may have deadlocked if many messages were sent in immediate succession. If anybody still experiences such problems with the latest PircBot, then let me know exactly what version of Java you are running. (type java -version)


The onServerResponse method has been altered so that the response field now contains the full server response, so for things like user lists, it is now possible to see the total number of users before the list starts. Thanks to Emanuel Greisen for suggesting this fix.


René Wolferink pointed out that the "on..." methods were all public and these have now been changed to protected, as it is only the PircBot class itself that should call these methods (apologies for not changing this sooner, it just made testing a bit easier :-)) At the moment, René is working on a layer for PircBot to make it easier to create games over IRC.


Added some useful bits and bobs. Server responses and their codes can now be dealt with using the onServerResponse method. This accepts two arguments: the response code (a three-digit number) and the actual response from the IRC server.

A few internal things were changed to increase performance, but those will go unnoticed as the external functionality remains the same.

Graham Uphill is currently using PircBot to develop a bot to be used at an upcoming LAN party (with an attendance of as many as 1000!). This bot will be used to announce tournament games and accept results. As the bot will not be subjected to the usual flood protection laws as the other users, he wanted to be able to make it respond to requests as quickly as possible. If you send messages using the sendMessage method, this enqueues outgoing messages to be despatched instantly, or at one second intervals if there is more than one message. You may now use the setMessageDelay method to change the size of this delay. (Note: it's probably best to stick with the default value of 1000ms unless you are running under special circumstances like these.)


Thanks to Thomas Skovsende for pointing out an incompatibility with certain IRC servers. This was an overlooked side effect of the previous architecture redesign and has been fixed in the latest PircBot release.


Some important bug fixes and an architecture redesign. The threading architecture within the PircBot has been improved to allow better disconnection detection and memory is tidied up when the PircBot subsequently connects to another IRC server. The partChannel method has been fixed to allow correct use of the optional reason string. Thanks to Tim Bishop for contributing to the testing of the aforementioned items. The PircBot has been altered so that the correct target is passed to the onPart method. Thanks to Alexis Tay Chee Yang for discovering this. Thanks also to everyone who's provided positive feedback about PircBot, it's nice to know there are lots of people using it :)


A small bug fix. When a PircBot joined an IRC server with a nick that was already in use, an IrcException was being thrown instead of a NickAlreadyInUseException. Also, the outgoing message queue is now explicitly cleared each time the PircBot connects to an IRC server.


Important: Please note that this new release uses a new package name. This may require you to slightly alter your code. With older versions, you used to do import pircbot.*; to import the PircBot classes. In this release (and future releases) you will have to import org.jibble.pircbot.*;

A lot has changed in this new release. The javadoc documentation has been revised and several new methods have been added to the PircBot in order to make it easier to use. It is now much easier to ban, kick, voice/devoice and op/deop users. You may now also implement the onMode method to detect such changes by other users. Quitting from servers and parting channels may now be done without supplying a reason. Joining passworded channels is now made easier by use of a second joinChannel method. A new connect method allows connection to a specified port number without needing to provide a password.

Also, at the last minute, Tim Bishop pointed out the lack of invitation handlers. There is now an onInvite method which is called whenever the PircBot is invited to another channel. You may also issue your own invitations by calling the sendInvite method. You may find this useful if you are writing an IRC bot to manage channels that have entry restricted on an "invitation only" basis.

The addition of an isConnected method and improved disconnection detection should make this release much more resilient to the effects of unreliable internet connections or poorly IRC servers.

Tim Bishop also requested a mutator for the version identifier, so there is now a setVersion method in PircBot. Another addition is the throwing of a NickAlreadyInUseException if you try to connect to an IRC server with a nick that's already taken.


Added documentation for joining passworded channels and altered some internal data structures of the PircBot.


PircBot wishes you all a happy new year. A few new methods have been added to the PircBot to make it simpler to create bots that perform law-and-order tasks. I was kind of keen to stay away from producing something that could be made into an "op bot", but that's what a lot of you have been asking for, so here ya go. Firstly, there is the setMode method, which will let you grant operator privilidges, turn on topic protection, etc. Then there's the kick and setTopic methods, which are pretty self-explanatory, but check the javadoc documentation if you need any help. These additions are based on input from David Freeman and Niels Demoen. Also thanks to Paul Haine for pointing out a couple of oversights in the javadoc documentation and Kevin Marsh for pointing out the smallest typo in the world on this page :)


Fixed bug where the PircBot would fail to join certain servers where a ping was issued before the PircBot had successfully joined.  Please download the latest PircBot package to fix this error.  Thanks to Chris Jones for discovering this.


First public release, marked as version 0.9


Produced PBC, the proof of concept GUI client for PircBot.  This has been tested on Solaris, Windows and PocketPC 2002 on the iPAQ.


Jibbled about with PircBot so that it was not dependant on JDK 1.4.  Use of Vector data structures in the outgoing message queue and the removal of regular expressions means that PircBot can now be compiled by JDKs as old as version 1.1.


Added new features to Monty that would not have been possible in the single-threaded Perl Monty.


Started to port Monty from Perl to Java.  During this process, it was apparent that it would be nice to separate the bot into two parts - a framework for an abstract bot (PircBot) and Monty itself, which would make use of PircBot.  Monty requires JDK 1.4 to compile (due to regex package use).


Monty was born in the guise of a Perl script.  Little bits were added to it in stages.


Please send all feature requests, feedback and bug reports to the email address at the bottom of this page.


Search this site


Copyright Paul Mutton 2001-2013
Feedback welcomed

Web Hosting

Web Hosting