1# Usage: /SET auto_regain_ops [On/Off] 2# /autocycle 3 4use strict; 5use vars qw($VERSION %IRSSI); 6 7use Irssi 20020313 qw( settings_add_bool settings_get_bool servers command_bind timeout_add ); 8$VERSION = "0.4"; 9%IRSSI = ( 10 authors => "Marcin Rozycki", 11 contact => "derwan\@irssi.pl", 12 name => "autocycle", 13 description => "Auto regain ops in empty opless channels", 14 url => "http://derwan.irssi.pl", 15 license => "GNU GPL v2", 16 changed => "Fri Jan 3 23:20:06 CET 2003" 17); 18 19sub check_channels { 20 foreach my $server (servers) { 21 if ($server->{usermode} !~ m/r/ and my @channels = $server->channels) { 22 CHANNEL: while (my $channel = shift @channels) { 23 my $modes = $channel->{mode}; 24 my $test = ($modes and $modes =~ m/a/) ? 1 : 0; 25 if (!$test && $channel->{synced} && $channel->{name} !~ m/^[\+\!]/ && !$channel->{ownnick}->{op}) { 26 foreach my $nick ($channel->nicks) { 27 ($nick->{nick} eq $server->{nick}) or goto CHANNEL; 28 } 29 $channel->print("Auto regain op in empty channel " . $channel->{name}); 30 $channel->command("cycle"); 31 } 32 } 33 } 34 } 35} 36 37sub autocycle { 38 if (settings_get_bool("auto_regain_ops")) { 39 check_channels(); 40 } 41} 42 43settings_add_bool "misc", "auto_regain_ops", 1; 44command_bind "autocycle", "check_channels"; 45timeout_add 60000, \&autocycle, undef; 46autocycle; 47 48