Bot-IRC

 view release on metacpan or  search on metacpan

lib/Bot/IRC.pm  view on Meta::CPAN

    $self->hook(@$_) for (@_);
    return $self;
}

sub helps {
    my ( $self, @input ) = @_;

    try {
        $self->{helps} = { %{ $self->{helps} }, @input };
    }
    catch ($e) {
        $self->note('Plugin helps called but not properly implemented');
    }

    return $self;
}

sub tick {
    my ( $self, $timing, $code ) = @_;

    push( @{ $self->{ticks} }, {
        timing => ( $timing =~ /^\d+$/ ) ? $timing : Time::Crontab->new($timing),
        code   => $code,
    } );
    return $self;
}

sub ticks {
    my $self = shift;
    $self->tick(@$_) for (@_);
    return $self;
}

sub subs {
    my $self = shift;

    if ( @_ % 2 ) {
        $self->note('Plugin helps called but not properly implemented');
        return $self;
    }

    my $subs = {@_};

    for my $name ( keys %$subs ) {
        no strict 'refs';
        no warnings 'redefine';
        *{ __PACKAGE__ . '::' . $name } = $subs->{$name};
    }

    return $self;
}

sub register {
    my $self = shift;
    $self->{loaded}{$_} = time for (@_);
    return $self;
}

sub vars {
    my ( $self, $name ) = @_;
    ( $name = lc( substr( ( caller() )[0], length(__PACKAGE__) + 2 ) ) ) =~ s/::/\-/g unless ($name);
    return ( defined $self->{vars}{$name} ) ? $self->{vars}{$name} : {};
}

sub settings {
    my ( $self, $name ) = @_;
    return ( defined $name ) ? $self->{$name} : { %$self };
}

sub reply {
    my ( $self, $message ) = @_;

    if ( $self->{in}{forum} ) {
        $self->msg(
            ( ( $self->{in}{forum} eq $self->{nick} ) ? $self->{in}{nick} : $self->{in}{forum} ),
            $message,
        );
    }
    else {
        warn "Didn't have a target to send reply to.\n";
    }
    return $self;
}

sub reply_to {
    my ( $self, $message ) = @_;
    return $self->reply( ( ( not $self->{in}{private} ) ? "$self->{in}{nick}: " : '' ) . $message );
}

sub msg {
    my ( $self, $target, $message ) = @_;
    $self->say( "PRIVMSG $target :" . ( ( $message =~ s/^\/me\s+// ) ? "\001ACTION $message\001" : $message ) );
    return $self;
}

sub say {
    my $self   = shift;
    my $device = $self->{device};
    my $ppid   = ($device) ? $device->ppid : 0;

    for (@_) {
        my $string = $_;
        if ( $ppid == $$ ) {
            $self->{socket}->print( $string . "\r\n" );
        }
        else {
            $string = encode( $self->{encoding}, $string );
            $device->message( $ppid, $string ) if $device;
        }
        $self->note("<<< $string");
    }
    return $self;
}

sub nick {
    my ( $self, $nick ) = @_;

    if ($nick) {
        $self->{nick} = $nick;
        $self->{device}->message( $_, ">>> NICK $self->{nick}" )
            for ( grep { $_ != $$ } $self->{device}->ppid, @{ $self->{device}->children } );



( run in 1.823 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )