The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strictures 1;

my $nickname = 'litebot';
my $username = 'clientlite';
my $server   = 'irc.cobaltirc.org';
my @channels = ( '#eris', '#botsex' );

use POE;
use IRC::Toolkit;
use POEx::IRC::Client::Lite;

POE::Session->create(
  package_states => [
    main => [ qw/
      _start
      cli_irc_public_msg
      cli_irc_ctcp_version
      cli_irc_001
    / ],
  ],
);
$poe_kernel->run;

sub _start {
  my ($kern, $heap) = @_[KERNEL, HEAP];
  $heap->{irc} = POEx::IRC::Client::Lite->new(
    event_prefix => 'cli_',
    server   => $server,
    nick     => $nickname,
    username => $username,
  )->connect()
}

sub cli_irc_001 {
  my ($kern, $heap, $ev) = @_[KERNEL, HEAP, ARG0];

  ## Chainable methods.
  my $irc = $heap->{irc};
  $irc->join(@channels)->privmsg(join(',', @channels), "hello there!");
}

sub cli_irc_public_msg {
  my ($kern, $heap, $ev) = @_[KERNEL, HEAP, ARG0];
  my ($target, $string)  = @{ $ev->params };

  if (lc($string || '') eq 'hello') {
    $heap->{irc}->privmsg($target, "hello, world!");
  }
}

sub cli_irc_ctcp_version {
  my ($kern, $heap, $ev) = @_[KERNEL, HEAP, ARG0];

  my $from = parse_user( $ev->prefix );

  $heap->{irc}->notice( $from,
    ctcp_quote("VERSION a silly POEx::IRC::Client::Lite example"),
  );
}