diff options
Diffstat (limited to 'scripts/autocycle.pl')
| -rw-r--r-- | scripts/autocycle.pl | 47 | 
1 files changed, 47 insertions, 0 deletions
| diff --git a/scripts/autocycle.pl b/scripts/autocycle.pl new file mode 100644 index 0000000..3095470 --- /dev/null +++ b/scripts/autocycle.pl @@ -0,0 +1,47 @@ +# Usage: /SET auto_regain_ops [On/Off] +#        /autocycle + +use strict; +use vars qw($VERSION %IRSSI); + +use Irssi 20020313 qw( settings_add_bool settings_get_bool servers command_bind timeout_add ); +$VERSION = "0.4"; +%IRSSI = ( +   authors      => "Marcin Rozycki", +   contact      => "derwan\@irssi.pl", +   name         => "autocycle", +   description  => "Auto regain ops in empty opless channels", +   url          => "http://derwan.irssi.pl", +   license      => "GNU GPL v2", +   changed      => "Fri Jan  3 23:20:06 CET 2003" +); + +sub check_channels { +   foreach my $server (servers) { +      if ($server->{usermode} !~ m/r/ and my @channels = $server->channels) { +         CHANNEL: while (my $channel = shift @channels) { +            my $modes = $channel->{mode}; +            my $test = ($modes and $modes =~ m/a/) ? 1 : 0; +            if (!$test && $channel->{synced} && $channel->{name} !~ m/^[\+\!]/ && !$channel->{ownnick}->{op}) { +               foreach my $nick ($channel->nicks) { +                  ($nick->{nick} eq $server->{nick}) or goto CHANNEL; +               } +               $channel->print("Auto regain op in empty channel " . $channel->{name}); +               $channel->command("cycle"); +            } +         } +      } +   } +} + +sub autocycle { +   if (settings_get_bool("auto_regain_ops")) { +      check_channels(); +   } +} + +settings_add_bool "misc", "auto_regain_ops", 1; +command_bind "autocycle", "check_channels"; +timeout_add 60000, \&autocycle, undef; +autocycle; + | 
