# File: cpanfile
# Purpose: Selects and installs PBot dependencies.
#
# Install a minimum bare-bones PBot (no Plugins or modules):
#   cpanm -n --installdeps .
#
# Install a fully featured PBot (without Windows compiler-vm support):
#   cpanm -n --installdeps . --with-all-features --without-feature compiler_vm_win32

requires 'perl' => '5.020000';

# PBot core
requires 'Cache::FileCache';
requires 'Carp';
requires 'DateTime';
requires 'DateTime::Format::Duration';
requires 'DateTime::Format::Flexible';
requires 'DBD::SQLite';
requires 'DBI';
requires 'Devel::StackTrace';
requires 'Data::Dumper';
requires 'Encode';
requires 'File::Basename';
requires 'File::Copy';
requires 'File::HomeDir';
requires 'File::Spec';
requires 'Getopt::Long';
requires 'HTML::Entities';
requires 'IO::File';
requires 'IO::Select';
requires 'IO::Socket';
requires 'IO::Socket::INET';
requires 'IO::Socket::SSL';
requires 'IPC::Run';
requires 'JSON';
requires 'JSON::XS';
requires 'LWP::Protocol::https';
requires 'LWP::UserAgent';
requires 'LWP::UserAgent::Paranoid';
requires 'MIME::Base64';
requires 'Module::Refresh';
requires 'POSIX';
requires 'Scalar::Util';
requires 'Socket';
requires 'Storable';
requires 'Symbol';
requires 'Text::CSV';
requires 'Text::Levenshtein::XS';
requires 'Text::ParseWords';
requires 'Time::Duration';
requires 'Time::HiRes';
requires 'Unicode::Truncate';
requires 're::engine::RE2';

# Plugins
feature ActionTrigger => sub {
    requires 'DBI';
    requires 'Time::Duration';
    requires 'Time::HiRes';
};

feature Plang => sub {
    requires 'Data::Dumper';
    requires 'Text::ParseWords';
    requires 'FindBin';
};

feature AntiAway => sub {
};

feature AntiKickAutoRejoin => sub {
    requires 'Time::HiRes';
    requires 'Time::Duration';
};

feature AntiNickSpam => sub {
    requires 'Time::Duration';
    requires 'Time::HiRes';
};

feature AntiRepeat => sub {
    requires 'String::LCSS';
    requires 'Time::HiRes';
    requires 'POSIX';
};

feature AntiTwitter => sub {
    requires 'Time::HiRes';
    requires 'Time::Duration';
};

feature AutoRejoin => sub {
    requires 'Time::HiRes';
    requires 'Time::Duration';
};

feature Battleship => sub {
    requires 'Time::Duration';
    requires 'Data::Dumper';
};

feature Connect4 => sub {
    requires 'Time::Duration';
    requires 'Data::Dumper';
    requires 'List::Util';
};

feature Counter => sub {
    requires 'DBI';
    requires 'Time::Duration';
    requires 'Time::HiRes';
};

feature Date => sub {
    requires 'Getopt::Long';
};

feature Example => sub {
};

feature FuncBuiltins => sub {
    requires 'URI::Escape';
    requires 'Lingua::EN::Tagger';
};

feature FuncGrep => sub {
};

feature FuncPlural => sub {
};

feature FuncSed => sub {
};

feature GoogleSearch => sub {
    requires 'WWW::Google::CustomSearch';
    requires 'HTML::Entities';
};

feature ParseDate => sub {
    requires 'Time::Duration';
};

feature Plang => sub {
    requires 'Getopt::Long';
};

feature Quotegrabs => sub {
    requires 'HTML::Entities';
    requires 'Time::Duration';
    requires 'Time::HiRes';
    requires 'Getopt::Long';
    requires 'POSIX';
    requires 'DBI';
    requires 'Carp';
};

feature RelayUnreg => sub {
    requires 'Time::HiRes';
};

feature RemindMe => sub {
    requires 'DBI';
    requires 'Time::Duration';
    requires 'Time::HiRes';
    requires 'Getopt::Long';
};

feature RestrictedMod => sub {
    requires 'Storable';
};

feature Spinach => sub {
    requires 'JSON';
    requires 'Lingua::EN::Fractions';
    requires 'Lingua::EN::Numbers';
    requires 'Lingua::EN::Numbers::Years';
    requires 'Lingua::Stem';
    requires 'Lingua::EN::ABC';
    requires 'Time::Duration';
    requires 'Text::Unidecode';
    requires 'Encode';
    requires 'Data::Dumper';
    requires 'DBI';
    requires 'Carp';
    requires 'FindBin';
    requires 'Math::Expression::Evaluator';
};

feature TypoSub => sub {
};

feature UrlTitles => sub {
};

feature Weather => sub {
    requires 'XML::LibXML';
    requires 'Getopt::Long';
};

feature Wolfram => sub {
    requires 'LWP::UserAgent::Paranoid';
    requires 'URI::Escape';
};

feature Wttr => sub {
    requires 'JSON';
    requires 'URI::Escape';
    requires 'Getopt::Long';
};

# modules
feature ago => sub {
    requires 'Time::Duration';
};

feature bashfaq => sub {
};

feature bashpf => sub {
};

feature c11std => sub {
};

feature c2english => sub {
    requires 'Text::Balanced';
    requires 'Parse::RecDescent';
    requires 'Getopt::Std';
    requires 'Data::Dumper';
};

feature c99std => sub {
};

feature cdecl => sub {
};

feature cjeopardy => sub {
    requires 'Exporter';
    requires 'DBI';
    requires 'Carp';
    requires 'Time::HiRes';
    requires 'Time::Duration';
    requires 'Fcntl';
    requires 'Text::Levenshtein';
    requires 'POSIX';
};

feature codepad => sub {
    requires 'LWP::UserAgent';
    requires 'URI::Escape';
    requires 'HTML::Entities';
    requires 'HTML::Parse';
    requires 'HTML::FormatText';
    requires 'IPC::Open2';
    requires 'Text::Balanced';
};

feature compiler_block => sub {
    requires 'IO::Socket::INET';
    requires 'JSON';
};

feature compiler_client => sub {
    requires 'IO::Socket';
    requires 'JSON';
};

feature compiler_vm => sub {
    requires 'HTML::Entities';
    requires 'IO::Socket';
    requires 'JSON';
    requires 'Net::hostent';
    requires 'IPC::Run';
    requires 'IPC::Open2';
    requires 'IPC::Shareable';
    requires 'Text::Balanced';
    requires 'Time::HiRes';
    requires 'File::Basename';
    requires 'English';
    requires 'LWP::UserAgent';
    requires 'Getopt::Long';
    requires 'Encode';
    requires 'Data::Dumper';
    requires 'Text::WordDiff';
};

feature compiler_vm_win32 => sub {
    requires 'IO::Socket';
    requires 'Net::hostent';
    requires 'Win32::MMF';
    requires 'Win32::MMF::Shareable';
};

feature define => sub {
    requires 'LWP::Simple';
};

feature dice_roll => sub {
    requires 'Games::Dice';
};

feature dict => sub {
    requires 'Net::Dict';
    requires 'AppConfig::Std';
};

feature expand_macros => sub {
    requires 'IPC::Open2';
    requires 'Text::Balanced';
    requires 'IO::Socket';
    requires 'LWP::UserAgent';
};

feature fnord => sub {
};

feature funnyish_quote => sub {
    requires 'LWP::UserAgent';
};

feature gdefine => sub {
    requires 'LWP::UserAgent';
};

feature gen_cfacts => sub {
    requires 'HTML::Entities';
};

feature gencstd => sub {
    requires 'HTML::Entities';
    requires 'Data::Dumper';
};

feature get_title => sub {
    requires 'LWP::UserAgent';
    requires 'HTML::Entities';
    requires 'Text::Levenshtein';
    requires 'Time::HiRes';
};

feature getcfact => sub {
};

feature headlines => sub {
    requires 'XML::RSS';
    requires 'LWP::Simple';
};

feature insult => sub {
    requires 'LWP::Simple';
};

feature lookupbot => sub {
    requires 'LWP::Simple';
    requires 'LWP::UserAgent';
    requires 'Encode';
    requires 'CGI';
    requires 'HTML::Entities';
};

feature love_quote => sub {
    requires 'LWP::UserAgent::WithCache';
};

feature man => sub {
    requires 'LWP::Simple';
};

feature map => sub {
    requires 'LWP::Simple';
};

feature math => sub {
    requires 'Math::Units';
};

feature nickometer => sub {
    requires 'Getopt::Std';
    requires 'Math::Trig';
};

feature prototype => sub {
    requires 'LWP::Simple';
};

feature qalc => sub {
};

feature random_quote => sub {
    requires 'URI::Escape';
    requires 'LWP::UserAgent::WithCache';
};

feature rpn => sub {
    requires 'List::Util';
};

feature trans => sub {
};

feature urban => sub {
    requires 'WebService::UrbanDictionary';
    requires 'Getopt::Long';
};

feature wikipedia => sub {
    requires 'WWW::Wikipedia';
    requires 'HTML::Parse';
    requires 'HTML::FormatText';
};

feature wiktionary => sub {
    requires 'Cache::FileCache';
    requires 'Encode';
    requires 'Getopt::Long';
    requires 'JSON';
};