Bot::BasicBot::Pluggable::Module::Join - join and leave channels; remembers state


Bot-BasicBot-Pluggable documentation Contained in the Bot-BasicBot-Pluggable distribution.

Index


Code Index:

NAME

Top

Bot::BasicBot::Pluggable::Module::Join - join and leave channels; remembers state

VERSION

Top

version 0.93

IRC USAGE

Top

join <channel>
part <channel>
channels

List the channels the bot is in.

METHODS

Top

add_channel($channel)
remove_channel($channel)

AUTHOR

Top

Mario Domgoergen <mdom@cpan.org>

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


Bot-BasicBot-Pluggable documentation Contained in the Bot-BasicBot-Pluggable distribution.

package Bot::BasicBot::Pluggable::Module::Join;
BEGIN {
  $Bot::BasicBot::Pluggable::Module::Join::VERSION = '0.93';
}
use base qw(Bot::BasicBot::Pluggable::Module);
use warnings;
use strict;

sub connected {
    my $self = shift;
    my $channels = $self->get("channels") || [];

    ## If we are not a array reference, we are problably the old
    ## string format ... trying to convert
    if ( not ref($channels) eq 'ARRAY' ) {
        $channels = [ split( /\s+/, $channels ) ];
    }

    for ( @{$channels} ) {
        print "Joining $_.\n";
        $self->bot->join($_);
    }
}

sub help {
    return
"Join and leave channels. Usage: join <channel>, leave/part <channel>, channels. Requires direct addressing.";
}

sub told {
    my ( $self, $mess ) = @_;
    my $body = $mess->{body};
    return unless defined $body;
    return unless $mess->{address};

    my ( $command, $param ) = split( /\s+/, $body, 2 );
    $command = lc($command);
    return unless $command =~ /^(join|leave|part|channels)$/;

    if (!$self->authed($mess->{who})) {
        return "Sorry, you must be authenticated to do that.";
    }

    if ( $command eq "join" ) {
        $self->add_channel($param);
        return "Ok.";

    }
    elsif ( $command eq "leave" or $command eq "part" ) {
        $self->remove_channel( $param || $mess->{channel} );
        return "Ok.";

    }
    elsif ( $command eq "channels" ) {
        my @channels    = $self->bot->channels;
        my $channel_num = scalar @channels;
        if ( $channel_num == 0 ) {
            return "I'm not in any channel.";
        }
        elsif ( $channel_num == 1 ) {
            return "I'm in " . $channels[0] . ".";
        }
        elsif ( $channel_num == 2 ) {
            return "I'm in " . $channels[0] . " and " . $channels[1] . ".";
        }
        else {
            return
                "I'm in "
              . join( ', ', @channels[ 0 .. $#channels - 1 ] )
              . " and $channels[-1].";
        }
    }
}

sub chanjoin {
    my ( $self, $mess ) = @_;
    if ( $mess->{who} eq $self->bot->nick ) {
        $self->set( channels => $self->bot->channels );
    }
}

sub chanpart {
    my ( $self, $mess ) = @_;
    if ( $mess->{who} eq $self->bot->nick ) {
        $self->set( channels => $self->bot->channels );
    }
}

sub add_channel {
    my ( $self, $channel ) = @_;
    $self->bot->join($channel);
}

sub remove_channel {
    my ( $self, $channel ) = @_;
    $self->bot->part($channel);
}

1;

__END__