App-KGB

 view release on metacpan or  search on metacpan

lib/App/KGB/Client/RelayMsg.pm  view on Meta::CPAN

# Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

=head1 NAME

App::KGB::Client::RelayMsg - Simple message relay KGB client

=head1 SYNOPSIS

    use App::KGB::Client::RelayMsg;
    my $client = App::KGB::Client::RelayMsg->new(
        # common App::KGB::Client parameters
        repo_id => 'my-repo',
        ...
        relay_message => "It's alive!",
    );
    $client->process;

=head1 DESCRIPTION

B<App::KGB::Client::RelayMsg> passes a simple text message to the bot to put
on IRC. It is useful for notifications not connected with a source
repository like bug submission etc.

See also L<kgb-client(1)>'s C<--relay-msg> option.

=head1 CONSTRUCTOR

=head2 B<new> ()

Standard constructor. Accepts no arguments.

=head1 FIELDS

=over

=item B<relay_message> I<message> (B<mandatory>)

The message to relay.

=back

=head1 METHODS

=over

=item process

Overrides L<App::KGB::Client>'s process method.

=back

=cut

require v5.10.0;
use base 'App::KGB::Client';
use Carp qw(confess);
__PACKAGE__->mk_accessors(qw( relay_message));

sub new {
    my $class = shift;
    my $self = $class->SUPER::new(@_);
    defined( $self->relay_message ) or confess "relay_message is mandatory";

    return $self;
}

sub process {
    my $self = shift;

    my @servers = $self->shuffle_servers;

    # try all servers in turn until someone succeeds
    my $failure;
    for my $srv (@servers) {
        $failure = eval {
            $srv->relay_message( $self, $self->relay_message,
                { use_irc_notices => $self->use_irc_notices } );
            $self->_last_server($srv);

            $self->note_last_server($srv);
            0;
        } // 1;

        warn $@ if $failure;

        last unless $failure;
    }

    die "Unable to complete notification. All servers failed\n"
        if $failure;
}

1;



( run in 0.536 second using v1.01-cache-2.11-cpan-5b529ec07f3 )