The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

POE::Component::Client::Pastebot - Interact with Bot::Pastebot web services from POE.

VERSION

version 1.18

SYNOPSIS

  use strict;
  use POE qw(Component::Client::Pastebot);

  my $pastebot = 'http://sial.org/pbot/';

  my $pbobj = POE::Component::Client::Pastebot->spawn( alias => 'pococpb' );

  POE::Session->create(
        package_states => [
          'main' => [ qw(_start _got_paste _got_fetch) ],
        ],
  );

  $poe_kernel->run();
  exit 0;

  sub _start {

    seek( DATA, 0, 0 );
    local $/;
    my $source = <DATA>;

    $poe_kernel->post( 'pococpb', 'paste', 

        { event => '_got_paste', 
          url   => $pastebot, 
          paste => $source,
          channel => '#perl',
          nick => 'pococpb',
          summary => 'POE::Component::Client::Pastebot synopsis',
        },
    );
    undef;
  }

  sub _got_paste {
    my ($kernel,$ref) = @_[KERNEL,ARG0];
    if ( $ref->{pastelink} ) {
        print STDOUT $ref->{pastelink}, "\n";
        $kernel->post( 'pococpb', 'fetch', { event => '_got_fetch', url => $ref->{pastelink} } );
        return;
    }
    warn $ref->{error}, "\n";
    $kernel->post( 'pococpb', 'shutdown' );
    undef;
  }

  sub _got_fetch {
    my ($kernel,$ref) = @_[KERNEL,ARG0];
    if ( $ref->{content} ) {
        print STDOUT $ref->{content}, "\n";
    }
    else {
        warn $ref->{error}, "\n";
    }
    $kernel->post( 'pococpb', 'shutdown' );
    undef;
  }

DESCRIPTION

POE::Component::Client::Pastebot is a POE component that provides convenient mechanisms to paste and fetch pastes from Bot::Pastebot based web services.

It was inspired by http://sial.org/ pbotutil.

CONSTRUCTOR

spawn

Starts a new POE::Component::Client::Pastebot session and returns an object. Takes a number of arguments all are optional.

  'alias', specify a POE Kernel alias for the component;
  'options', a hashref of POE Session options to pass to the component's session;

METHODS

session_id

Takes no arguments. Returns the POE Session ID of the component.

shutdown

Takes no arguments, terminates the component.

INPUT EVENTS

What POE events our component will accept.

paste

Sends a paste request to a pastebot url. Accepts either a hashref of the following values or a list of the same:

  'event', the name of the event to send the reply to. ( Mandatory );
  'url', the URL of the pastebot to paste to. ( Mandatory );
  'paste', either a scalar or arrayref of data to paste, ( Mandatory );
  'channel', the channel to annouce to;
  'nick', the nickname to annouce from;
  'summary', brief description of the paste;

You may also pass arbitary key/values in the hashref ( as demonstrated in the SYNOPSIS ). Arbitary keys should have an underscore prefix '_'.

fetch

Retrieves the text from a given paste url. Accepts either a hashref of the following values or a list of the same:

  'event', the name of the event to send the reply to. ( Mandatory );
  'url', the paste URL to retrieve;

You may also pass arbitary key/values in the hashref ( as demonstrated in the SYNOPSIS ). Arbitary keys should have an underscore prefix '_'.

shutdown

Takes no arguments, terminates the component.

OUTPUT EVENTS

The component will send an event in response to 'paste' and 'fetch' requests. ARG0 of the event will be a hashref containing the key/values of the original request ( including any arbitary key/values passed ).

Both request types will have the following common keys:

  'error', if something went wrong with the request, this key will be defined
           with a brief description of the error encountered;
  'response', a HTTP::Response object as returned by LWP::UserAgent;

The following additional key/values will be present depending on the type of request made:

paste
  'pastelink', the URL of the paste that was made;
fetch
  'content', the contents of the paste URL that was retrieved;

SEE ALSO

POE

Bot::Pastebot

HTTP::Response

http://sial.org/code/perl/scripts/pbotutil.pl

AUTHOR

Chris Williams <chris@bingosnet.co.uk>

COPYRIGHT AND LICENSE

This software is copyright (c) 2017 by Chris Williams.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.