Added SILC Thread Queue API
[crypto.git] / apps / irssi / scripts / autorejoin.pl
index bbbb0ed8640a1e71fe195c06707a68feee2d289b..2d23449f879beac3045b85458631e89746fcade1 100644 (file)
@@ -1,5 +1,7 @@
 # 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" ...
@@ -7,20 +9,44 @@
 use Irssi;
 use Irssi::Irc;
 use strict;
+use vars qw($VERSION %IRSSI);
 
-sub event_rejoin_kick {
-       my ($server, $data) = @_;
-       my ($channel, $nick) = split(/ +/, $data);
+$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);
 
-       return if ($server->{nick} ne $nick);
+  # 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);
 
-       # check if channel has password
-       my $chanrec = $server->channel_find($channel);
-       my $password = $chanrec->{key} if ($chanrec);
+  return if ($server->{nick} ne $nick);
 
-       # 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");
+  # 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');