summaryrefslogtreecommitdiff
path: root/scripts/autorejoin.pl
blob: a6dd4b587dead34ef765e373a76654ba4fb575cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# automatically rejoin to channel after kicked

# /SET autorejoin_channels #channel1 #channel2 ...

# NOTE: I personally don't like this feature, in most channels I'm in it
# will just result as ban. You've probably misunderstood the idea of /KICK
# if you kick/get kicked all the time "just for fun" ...

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

$VERSION = "1.00";
%IRSSI = (
    authors     => 'Timo Sirainen',
    name        => 'autorejoin',
    description => 'Automatically rejoin to channel after kicked',
    license     => 'Public Domain',
    changed	=> 'Sun Mar 10 23:18 EET 2002'
);

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

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

  # We have to use send_raw() because the channel record still
  # exists and irssi won't even try to join to it with command()
  $server->send_raw("JOIN $channel $password");
}

sub event_rejoin_kick {
  my ($server, $data) = @_;
  my ($channel, $nick) = split(/ +/, $data);

  return if ($server->{nick} ne $nick);

  # check if we want to autorejoin this channel
  my @chans = split(/ ,/, Irssi::settings_get_str('autorejoin_channels'));
  foreach my $chan (@chans) {
    if (lc($chan) eq lc($channel)) {
      channel_rejoin($server, $channel);
      last;
    }
  }
}

Irssi::settings_add_str('misc', 'autorejoin_channels', '');
Irssi::signal_add('event kick', 'event_rejoin_kick');