package App::Twirc::Plugin::SecondaryAccount;
$App::Twirc::Plugin::SecondaryAccount::VERSION = '0.20';
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;

        username  => $self->username,
        password  => $self->password,
        source    => 'twircgw',
        useragent => 'twirc/' . POE::Component::Server::Twirc->VERSION,
        useragent_class => $self->_useragent_class,

    if ( $self->option ) {
        my $option = quotemeta $self->option;

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;

    return $only; # return a true value to stop the processing chain

no Moose;




=head1 NAME

App::Twirc::Plugin::SecondaryAccount - Cross post updates (DEPRECATED)


  # in config (.yml in this example)
      - SecondaryAccount
          username: my_other_screen_name
          password: my_other_twitter_password
          option: fb
      - SecondaryAccount
          username: yet_another_screen_name
          password: yet_another_password

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

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

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


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

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

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

I created another secondary account with my screen name.  In C<twirc>
configuration, I used the C<net_twitter_options> to specify's

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


This module relies on username/password authentication, which Twitter dropped
ages ago. The author isn't using this plugin, personally, and suspects no one
else is, either. So, if you are using it, file an issue, or better---a pull
request. Otherwise, it will get silently dropped in a future release.

=head1 AUTHOR

Marc Mims <>

=head1 LICENSE

Copyright (c) 2015 Marc Mims

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