Over the past couple of days I've been working on an IRC bot in
haskell. I believe it to be ready for an 0.1 release, and so here it is:
http://austin.youareinferior.net/infinity-0.1.tar.gz
The interesting thing about this bot is the plugin system. I wanted it to be extendable, and so I decided that I would go the route of plugins. I opt'd for a library that allowed this called hs-plugins, and it's worked out really well. Essentially you can write a plugin in the Plugins/ directory, start the bot, and on startup the bot will compile and load it.

Everything such as what arguments and whatnot is sent to the bot is done by the core, and in the core there're several built in commands (quit, list, etc. etc..)
This is still very much a work in progress and I'm hacking away on the 0.2 release which has about 4 goals (2 of which I've already finished):
- Implement the configuration dynamically so it doesn't have to be compiled into core like it is now (finished)
- Move the core commands into their own system plugin (finished; the only exception to this is the quit command which kind of needs to be in the core...)
- Implement a more robust IRC parsing solution as the current one is ad-hoc and I very much dislike the code (Parsec)
- Implement the ability to reload plugins in-situ. This will require some form of inter-thread synchronization such as
Software Transactional Memory so the global list of plugins is not tampered with incorrectly; this will also require updating the API for the plugins since they too have access to things like the list of plugins (this will most likely require reworking of the ReaderT monad I use for an environment inside the IRC thread; I will probably move to using StateT.)
Once 0.2 is out I will consider it *much* more usable and stable than 0.1; aside from the above there're also several things I've rectified already. So like I said, this is a work in progress although I do consider 0.1 'usable.'
Note: you will need linux if you wish to compile and run the bot as hs-plugins does not like windows. I've also only tested this on i386 linux so if anybody would like to try it on other platforms and get it to work that'd be awesome.
Happy hacking.
