NAME
POE::Component::IRC::Plugin::FollowTail - A PoCo-IRC plugin to follow the tail of an ever-growing file
SYNOPSIS
use POE qw(Component::IRC Component::IRC::Plugin::FollowTail);
my $nickname = 'Flibble' . $$;
my $ircname = 'Flibble the Sailor Bot';
my $ircserver = 'irc.blahblahblah.irc';
my $filename = '/some/such/file/here';
my @channels = ( '#Blah', '#Foo', '#Bar' );
my $irc = POE::Component::IRC->spawn(
nick => $nickname,
server => $ircserver,
port => $port,
ircname => $ircname,
) or die "Oh noooo! $!";
POE::Session->create(
package_states => [
'main' => [ qw(_start irc_001 irc_tail_input irc_tail_error irc_tail_reset) ],
],
);
$poe_kernel->run();
exit 0;
sub _start {
$irc->plugin_add( 'FollowTail' =>
POE::Component::IRC::Plugin::FollowTail->new(
filename => $filename,
) );
$irc->yield( register => 'all' );
$irc->yield( connect => { } );
undef;
}
sub irc_001 {
$irc->yield( join => $_ ) for @channels;
undef;
}
sub irc_tail_input {
my ($kernel,$sender,$filename,$input) = @_[KERNEL,SENDER,ARG0,ARG1];
$kernel->post( $sender, 'privmsg', $_, "$filename: $input" ) for @channels;
return;
}
sub irc_tail_error {
my ($kernel,$sender,$filename,$errnum,$errstring) = @_[KERNEL,SENDER,ARG0..ARG2];
$kernel->post( $sender, 'privmsg', $_, "$filename: ERROR: $errnum $errstring" ) for @channels;
$irc->plugin_del( 'FollowTail' );
return;
}
sub irc_tail_reset {
my ($kernel,$sender,$filename) = @_[KERNEL,SENDER,ARG0];
$kernel->post( $sender, 'privmsg', $_, "$filename: RESET EVENT" ) for @channels;
return;
}
DESCRIPTION
POE::Component::IRC::Plugin::FollowTail is a POE::Component::IRC plugin that uses POE::Wheel::FollowTail to follows the end of an ever-growing file. It generates 'irc_tail_' prefixed events for each new record that is appended to its file.
CONSTRUCTOR
- new
-
Takes two arguments:
'filename', the name of the file to tail, mandatory; 'filter', a POE::Filter object to pass to POE::Wheel::FollowTail, optional;
EVENTS
The plugin generates the following additional POE::Component::IRC events:
- irc_tail_input
-
Emitted for every complete record read. ARG0 will be the filename, ARG1 the record which was read.
- irc_tail_error
-
Emitted whenever an error occurs. ARG0 will be the filename, ARG1 and ARG2 hold numeric and string values for $!, respectively.
- irc_tail_reset
-
Emitted every time a file is reset. ARG0 will be the filename.
AUTHOR
Chris 'BinGOs' Williams