POE-Component-IRC
view release on metacpan or search on metacpan
lib/POE/Component/IRC.pm view on Meta::CPAN
remove
nickserv
shutdown
sl
sl_login
sl_high
sl_delayed
sl_prioritized
topic
userhost
)];
return;
}
# BINGOS: the component can now configure itself via _configure() from
# either spawn() or connect()
## no critic (Subroutines::ProhibitExcessComplexity)
sub _configure {
my ($self, $args) = @_;
my $spawned = 0;
if (ref $args eq 'HASH' && keys %{ $args }) {
$spawned = delete $args->{spawned};
$self->{use_localaddr} = delete $args->{localaddr};
@{ $self }{ keys %{ $args } } = values %{ $args };
}
if ($ENV{POCOIRC_DEBUG}) {
$self->{debug} = 1;
$self->{plugin_debug} = 1;
}
if ($self->{debug}) {
$self->{ircd_filter}->debug(1);
$self->{ircd_compat}->debug(1);
}
if ($self->{useipv6} && !$GOT_SOCKET6) {
warn "'useipv6' option specified, but Socket/Socket6 was not found\n";
}
if ($self->{usessl} && !$GOT_SSL) {
warn "'usessl' option specified, but POE::Component::SSLify was not found\n";
}
$self->{dcc}->nataddr($self->{nataddr}) if exists $self->{nataddr};
$self->{dcc}->dccports($self->{dccports}) if exists $self->{dccports};
$self->{port} = 6667 if !$self->{port};
$self->{msg_length} = 450 if !defined $self->{msg_length};
if ($self->{use_localaddr}) {
$self->{localaddr} = $self->{use_localaddr}
. ($self->{localport} ? (':'.$self->{localport}) : '');
}
# Make sure that we have reasonable defaults for all the attributes.
# The "IRC*" variables are ircII environment variables.
if (!defined $self->{nick}) {
$self->{nick} = $ENV{IRCNICK} || eval { scalar getpwuid($>) }
|| $ENV{USER} || $ENV{LOGNAME} || 'WankerBot';
}
if (!defined $self->{username}) {
$self->{username} = eval { scalar getpwuid($>) } || $ENV{USER}
|| $ENV{LOGNAME} || 'foolio';
}
if (!defined $self->{ircname}) {
$self->{ircname} = $ENV{IRCNAME} || eval { (getpwuid $>)[6] }
|| 'Just Another Perl Hacker';
}
if (!defined $self->{server} && !$spawned) {
die "No IRC server specified\n" if !$ENV{IRCSERVER};
$self->{server} = $ENV{IRCSERVER};
}
if (defined $self->{webirc}) {
if (!(ref $self->{webirc} ne 'HASH')) {
die "webirc param expects a hashref";
}
for my $expect_key (qw(pass user host ip)) {
if (!exists $self->{webirc}{$expect_key}) {
die "webirc value is missing key '$expect_key'";
}
}
}
return;
}
sub debug {
my ($self, $switch) = @_[OBJECT, ARG0];
$self->{debug} = $switch;
$self->{ircd_filter}->debug( $switch );
$self->{ircd_compat}->debug( $switch );
return;
}
# Parse a message from the IRC server and generate the appropriate
# event(s) for listening sessions.
sub _parseline {
my ($session, $self, $ev) = @_[SESSION, OBJECT, ARG0];
return if !$ev->{name};
$self->send_event(irc_raw => $ev->{raw_line} ) if $self->{raw};
# record our nickname
if ( $ev->{name} eq '001' ) {
$self->{INFO}{RealNick} = ( split / /, $ev->{raw_line} )[2];
}
$ev->{name} = 'irc_' . $ev->{name};
$self->send_event( $ev->{name}, @{$ev->{args}} );
if ($ev->{name} =~ /^irc_ctcp_(.+)$/) {
$self->send_event(irc_ctcp => $1 => @{$ev->{args}});
}
return;
}
# Internal function called when a socket is closed.
sub _sock_down {
my ($kernel, $self) = @_[KERNEL, OBJECT];
# Destroy the RW wheel for the socket.
delete $self->{socket};
( run in 0.636 second using v1.01-cache-2.11-cpan-6aa56a78535 )