DOKK / manpages / debian 12 / libpoe-component-irc-perl / POE::Component::IRC::Plugin::FollowTail.3pm.en
POE::Component::IRC::Plugin::FollowTail(3pm) User Contributed Perl Documentation POE::Component::IRC::Plugin::FollowTail(3pm)

POE::Component::IRC::Plugin::FollowTail - A PoCo-IRC plugin to follow the tail of an ever-growing file

 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;
 }

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.

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.

The plugin generates the following additional POE::Component::IRC events:

Emitted for every complete record read. "ARG0" will be the filename, "ARG1" the record which was read.

Emitted whenever an error occurs. "ARG0" will be the filename, "ARG1" and "ARG2" hold numeric and string values for $!, respectively.

Emitted every time a file is reset. "ARG0" will be the filename.

Chris 'BinGOs' Williams

POE::Component::IRC

POE::Wheel::FollowTail

2021-09-30 perl v5.32.1