App-Pocoirc
view release on metacpan or search on metacpan
lib/App/Pocoirc/Status.pm view on Meta::CPAN
package App::Pocoirc::Status;
BEGIN {
$App::Pocoirc::Status::AUTHORITY = 'cpan:HINRIK';
}
{
$App::Pocoirc::Status::VERSION = '0.47';
}
use strict;
use warnings FATAL => 'all';
use Carp;
use IRC::Utils qw(decode_irc strip_color strip_formatting numeric_to_name);
use POE::Component::IRC::Plugin qw(PCI_EAT_NONE);
use Scalar::Util qw(looks_like_number);
sub new {
my ($package) = shift;
croak "$package requires an even number of arguments" if @_ & 1;
return bless { @_ }, $package;
}
sub PCI_register {
my ($self, $irc, %args) = @_;
$irc->raw_events(1);
$irc->plugin_register($self, 'SERVER', 'all');
$irc->plugin_register($self, 'USER', 'all');
return 1;
}
sub PCI_unregister {
return 1;
}
sub verbose {
my ($self, $value) = @_;
$self->{Verbose} = $value;
return;
}
sub trace {
my ($self, $value) = @_;
$self->{Trace} = $value;
return;
}
sub _normalize {
my ($line) = @_;
$line = decode_irc($line);
$line = strip_color($line);
$line = strip_formatting($line);
return $line;
}
sub _dump {
my ($arg) = @_;
if (ref $arg eq 'ARRAY') {
my @elems;
for my $elem (@$arg) {
push @elems, _dump($elem);
}
return '['. join(', ', @elems) .']';
}
elsif (ref $arg eq 'HASH') {
my @pairs;
for my $key (keys %$arg) {
push @pairs, [$key, _dump($arg->{$key})];
}
return '{'. join(', ', map { "$_->[0] => $_->[1]" } @pairs) .'}';
}
elsif (ref $arg) {
require overload;
return overload::StrVal($arg);
}
elsif (defined $arg) {
return $arg if looks_like_number($arg);
return "'".decode_irc($arg)."'";
}
else {
return 'undef';
}
}
sub _event_debug {
my ($self, $irc, $args, $event) = @_;
if (!defined $event) {
$event = (caller(1))[3];
$event =~ s/.*:://;
}
pop @$args;
my @output;
for my $i (0..$#{ $args }) {
push @output, "ARG$i: " . _dump(${ $args->[$i] });
}
$irc->send_event_next('irc_plugin_status', $self, 'debug', "$event: ".join(', ', @output));
return;
}
sub S_connected {
my ($self, $irc) = splice @_, 0, 2;
my $address = ${ $_[0] };
$self->_event_debug($irc, \@_) if $self->{Trace};
$irc->send_event_next('irc_plugin_status', $self, 'normal', "Connected to server $address");
return PCI_EAT_NONE;
}
sub S_disconnected {
my ($self, $irc) = splice @_, 0, 2;
my $server = ${ $_[0] };
$self->_event_debug($irc, \@_) if $self->{Trace};
$irc->send_event_next('irc_plugin_status', $self, 'normal', "Disconnected from server $server");
return PCI_EAT_NONE;
}
sub S_snotice {
my ($self, $irc) = splice @_, 0, 2;
my $notice = _normalize(${ $_[0] });
$self->_event_debug($irc, \@_) if $self->{Trace};
$irc->send_event_next('irc_plugin_status', $self, 'normal', "Server notice: $notice");
return PCI_EAT_NONE;
}
sub S_notice {
my ($self, $irc) = splice @_, 0, 2;
my $sender = _normalize(${ $_[0] });
my $notice = _normalize(${ $_[2] });
$self->_event_debug($irc, \@_) if $self->{Trace};
if (defined $irc->server_name() && $sender ne $irc->server_name()) {
return PCI_EAT_NONE;
}
$irc->send_event_next('irc_plugin_status', $self, 'normal', "Server notice: $notice");
( run in 0.906 second using v1.01-cache-2.11-cpan-39bf76dae61 )