POE::Component::IRC::Plugin::FollowTail3pm
A poco-irc plugin to follow the tail of an ever-growing file
Usage
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();sub _start {$irc->plugin_add( 'FollowTail' => POE::Component::IRC::Plugin::FollowTail->new(filename => $filename,));$irc->yield( register => 'all' );$irc->yield( connect => { } );return;}sub irc_001 {$irc->yield( join => $_ ) for @channels;return;}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;}
Overview
POE::Component::IRC::Plugin::FollowTail is a POE::Component::IRC plugin that uses POE::Wheel::FollowTail to follow the end of an ever-growing file. It generates "irc_tail_" prefixed events for each new record that is appended to its file.
Methods
"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;
Returns a plugin object suitable for feeding to POE::Component::IRC's "plugin_add" method.
Output 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.
Releases
9 releases since Debian 5.0 (Lenny); the text changed 5 times.