App::Twirc::Plugin::SecondaryAccount - Cross post updates to another account


POE-Component-Server-Twirc documentation Contained in the POE-Component-Server-Twirc distribution.

Index


Code Index:

NAME

Top

App::Twirc::Plugin::SecondaryAccount - Cross post updates to another account

SYNOPSIS

Top

  # in config (.yml in this example)
  plugins:
      - SecondaryAccount
          username: my_other_screen_name
          password: my_other_twitter_password
          option: fb
      - SecondaryAccount
          username: yet_another_screen_name
          password: yet_another_password
          net_twitter_options:
              apiurl: http://identi.ca/api

  # In your IRC client...
  # ...post to your primary account *and* yet_another_screen_name
  post Hello, world!

  # ...post to your primary account and both secondary accounts
  post -fb Hello, universe!

  # ... post to my_other_screen name, only
  post -fbonly Hello, alternate reality.

DESCRIPTION

Top

This plugin allows cross-posting messages to multiple accounts. In configuration, you can provide an option value. When used as an option to post, your message will be cross-posted to your primary account and the secondary account with that option value. If you do not provide an option value, all messages are cross-posted to the secondary account.

By appending only to the option value, your status will only be posted to the the account with that option value.

I use a configuration similar to the one in the synopsis to cross-post my Twitter status updates to Identi.ca, and optionally to Facebook. My Twitter screen name is semifor. I created an account with screen name semifor_fb and registered it with Twitter's Facebook application. In the twirc configuration file, I assigned option value fb to the account.

I created another secondary account with my Identi.ca screen name. In twirc configuration, I used the net_twitter_options to specify Identi.ca's apiurl.

Now, when I post a normal status update, it is posted to semifor on both Twitter and Identi.ca. If I include a -fb option to post, my status update is posted to Twitter, Identi.ca, and Facebook. If I add a -fbonly option to post, my status update is only posted to the Facebook account.

AUTHOR

Top

Marc Mims <marc@questright.com>

LICENSE

Top

Copyright (c) 2009 Marc Mims

You may distribute this code and/or modify it under the same terms as Perl itself.


POE-Component-Server-Twirc documentation Contained in the POE-Component-Server-Twirc distribution.

package App::Twirc::Plugin::SecondaryAccount;
use Moose;
use Net::Twitter;
use POE::Component::Server::Twirc;

has net_twitter_options => ( isa => 'HashRef', is => 'ro', default => sub { {} } );
has username => ( isa => 'Str', is => 'ro', required => 1 );
has password => ( isa => 'Str', is => 'ro', required => 1 );
has option   => ( isa => 'Str', is => 'ro' );
has _twitter => ( isa => 'Net::Twitter', is => 'rw' );
has _option_regex => ( isa => 'Maybe[RegexpRef]', is => 'rw', default => undef );
has _useragent_class => ( isa => 'Str', is => 'ro', default => 'LWP::UserAgent::POE' );

sub BUILD {
    my $self = shift;

    $self->_twitter(Net::Twitter->new(
        username  => $self->username,
        password  => $self->password,
        source    => 'twircgw',
        useragent => 'twirc/' . POE::Component::Server::Twirc->VERSION,
        useragent_class => $self->_useragent_class,
        %{$self->net_twitter_options},
    ));

    if ( $self->option ) {
        my $option = quotemeta $self->option;
        $self->_option_regex(qr/^-$option(only)?\s+/);
    }
}

sub cmd_post {
    my ($self, $server, $channel, $nick, $textref) = @_;

    my $only;
    if ( my $option_regex = $self->_option_regex ) {
        $$textref =~ s/$option_regex// || return;
        $only = $1;
    }

    $self->_twitter->update($$textref);
    return $only; # return a true value to stop the processing chain
}

no Moose;

__PACKAGE__->meta->make_immutable;

1;

__END__