---
name: "POE::Component::IRC::Plugin::FollowTail"
section: "3pm"
platform: "linux"
package: "libpoe-component-irc-perl"
version: "6.93+dfsg-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/POE::Component::IRC::Plugin::FollowTail"
---

# POE::Component::IRC::Plugin::FollowTail(3pm)

A PoCo-IRC plugin to follow the tail of an ever-growing file

## 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();
 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;
 }
```

## DESCRIPTION

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.

## AUTHOR

Chris 'BinGOs' Williams

## SEE ALSO

POE::Component::IRC

POE::Wheel::FollowTail
