
# auto-rejoin

use Irssi;
use strict;
use warnings;
use vars qw($VERSION %IRSSI);

$VERSION = "1.0";
%IRSSI = (
    authors     => 'cj_',
    name        => 'autorejoin',
    description => 'Auto rejoin after kick/kill/quit',
    license     => 'BSD',
    changed    => 'Sun Oct 12 00:01:48 PDT 2008',
);

sub channel_rejoin {
    my ($server, $channel) = @_;

    # check if channel has password
    my $chanrec = $server->channel_find($channel);
    my $password = $chanrec->{key} if ($chanrec);

    # Now we join
    $server->send_raw("JOIN $channel $password");
}

sub event_punish {
    my ($server, $data, $kicker, $mask) = @_;
    my ($channel, $nick, $reason) = split(/ +/, $data);
    channel_rejoin($server, $channel);
}

sub event_banned {
    my ($server, $args, $cruft) = @_;
    my ($nick, $channel, @crap) = split(/ +/, $args);
    channel_rejoin($server, $channel);
}

sub event_killed {
    my ($server, $path, $oper, $address) = @_;
    $server->command("reconnect");
}

Irssi::signal_add('event kick', 'event_punish');
Irssi::signal_add('event 474', 'event_banned');
Irssi::signal_add('event kill', 'event_killed');
