Skip to content


Subversion checkout URL

You can clone with
Download ZIP
A Perl based IRC bot built on AnyEvent::IRC
Branch: master

Marking off TODO item

latest commit 14bbc62cbb
Adam Flott authored
Failed to load latest commit information.
conf/presets Let's party
data/ascii-art Let's party
lib Add new file polling feature
.gitignore Let's party Marking off TODO item
configure Let's party Let's party


winobot is an Perl based IRC bot built on AnyEvent::IRC and Moose. The name "winobot" comes from Wonder Showzen a short lived TV show on MTV2. Watch the skit.


  • Likes to party
  • Built on AnyEvent
  • Configuration file driven (built on Thorium)
  • MongoDB is the backing store for Features
  • Markov Chain's via Hailo (must load feature)
  • Automatic condensing of URL's with TinyURL (must load feature)
  • Twitter feed monitoring from Stream API (must load feature and requires API keys)
  • Supports encrypted rooms via Algorithm::IRCSRP2 (must load feature)
  • Utility features such as Date, Echo, Help, LoadUnload, Uptime, etc (must load features)


  • Missing documentation for configuration and feature use
  • CPAN dependency heavy
  • Lots on the TODO list
  • No runtime configuration altering / reloading
  • No runtime admin interface
  • Logging must be turned on, see Thorium::Log (there should be a command line option for this)
  • No initial data is loaded into database (insult, praises, etc)



Perl 5.14+

Use perlbrew to make this hassle free.

CPAN Modules For core

Use cpanm to make this hassle free.

  • AnyEvent
  • AnyEvent::HTTP
  • AnyEvent::IRC
  • AnyEvent::Worker
  • Class::MOP
  • Class::Unload
  • Dir::Self
  • Find::Lib
  • Hailo
  • List::MoreUtils
  • Math::Random::Secure
  • MongoDB
  • Moose
  • Regexp::Common
  • Sub::Exporter
  • Text::ASCIITable::Wrap
  • Thorium
  • Try::Tiny
  • autovivification
  • indirect

CPAN Modules For Features

  • Algorithm::IRCSRP2
  • AnyEvent::HTTP
  • AnyEvent::Twitter
  • AnyEvent::Twitter::Stream
  • Array::Diff
  • DateTime
  • Email::Send
  • Email::Simple
  • HTML::Extract
  • Hailo
  • JSON::XS
  • Math::Random::ISAAC::XS
  • Math::Random::Secure
  • Memory::Usage
  • Net::FTP
  • Net::OAuth
  • Net::SSLeay
  • Regexp::Common
  • Roman::Unicode
  • Text::ASCIITable::Wrap
  • Time::Duration
  • Try::Tiny
  • XML::LibXML


Any reasonably recent version will do.

Checkout / Install / Run

$ cpanm <huge-list-of-dependencies>
$ git clone git://
$ cd winobot
$ # create a preset in conf/presets
$ ./configure --load the-preset-name-you-chose-minus-the-dot-yaml-ext
$ ./



  1. turn $id into a proper object
  2. access control / admin interface
  3. make $state->conf a role in Winobot::State, then eliminate use of get_feature_option
  4. load <name> produces pass when module was not loaded
  5. reconnect ability
  6. add $state->db role
  7. use AnyEvent version of MongoDB
  8. add unix signals with anyevent
  9. make features reloadable per channel? futzing with namespaces might do it?
  10. restore handler functionality for channel-less events (disconnect, connect, etc)
  11. add time zone to defaults.yaml instead of



  1. automatic srp'ing on reconnect
  2. handle multiple channels, servers


  1. when no files are processed, dont output "No config files processed!" when local.yaml was actually generated. maybe change to "No template files processed!"?
  2. don't use Proc::ProcessTable


  1. compile fixes for OSX
Something went wrong with that request. Please try again.