Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

A Perl based IRC bot built on AnyEvent::IRC

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 conf
Octocat-spinner-32 data
Octocat-spinner-32 lib
Octocat-spinner-32 .gitignore
Octocat-spinner-32 README.md
Octocat-spinner-32 configure
Octocat-spinner-32 winobot.pl
README.md

About

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.

Features

  • 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)

Quirks

  • 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)

Installation

Dependencies

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

MongoDB

Any reasonably recent version will do.

Checkout / Install / Run

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

TODO

core

  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 winobot.pl

Features

SRP

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

Thorium

  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

Hobocamp

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