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)
Use perlbrew to make this hassle free.
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
- 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.
$ 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
- turn
$id
into a proper object - access control / admin interface
- make
$state->conf
a role inWinobot::State
, then eliminate use of get_feature_option load <name>
produces pass when module was not loaded- reconnect ability
- add $state->db role
- use AnyEvent version of MongoDB
- add unix signals with anyevent
- make features reloadable per channel? futzing with namespaces might do it?
- restore handler functionality for channel-less events (disconnect, connect, etc)
- add time zone to
defaults.yaml
instead ofwinobot.pl
- automatic srp'ing on reconnect
- handle multiple channels, servers
- when no files are processed, dont output "No config files processed!" when local.yaml was actually generated. maybe change to "No template files processed!"?
- don't use Proc::ProcessTable
- compile fixes for OSX