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 )