1use strict; 2use Irssi 20020300; 3use Irssi::Irc; 4 5# /SET aidle_max_idle_time <seconds> 6# - specifies max possible idle time 7# /SET aidle_ircnets IRCNet EFnet 8# - specifies IRCNets where anty idler will be on 9# SET -clear aidle_ircnets makes aidle work on every network; 10# /SET aidle_only_when_away - makes aidler work only when you're away 11 12use vars qw($VERSION %IRSSI); 13$VERSION = "1.1b"; 14%IRSSI = ( 15 authors => "Maciek \'fahren\' Freudenheim", 16 contact => "fahren\@bochnia.pl", 17 name => "Antyidler", 18 description => "Antyidler with random time", 19 license => "GNU GPLv2 or later", 20 changed => "Thu Jan 2 02:58:34 CET 2003" 21); 22 23# Changelog: 24# 1.1b 25# - removed "hoho, <chatnet>" message :) 26# 1.1 27# - added /set'tings 28# 1.0 29# - fixed that annoying "your_nick: is away blah blah" message 30 31my %aidle; 32 33Irssi::settings_add_int 'aidle', 'aidle_max_idle_time', '180'; 34$aidle{'max'} = Irssi::settings_get_int 'aidle_max_idle_time'; 35 36Irssi::settings_add_str 'aidle', 'aidle_ircnets', ''; 37@{$aidle{'ircnets'}} = (split(/ +/, Irssi::settings_get_str('aidle_ircnets'))); 38 39Irssi::settings_add_bool 'aidle', 'aidle_only_when_away', 0; 40$aidle{'away'} = Irssi::settings_get_bool 'aidle_only_when_away'; 41 42$aidle{'timer'} = Irssi::timeout_add $aidle{'max'} * 1000, 'antyidlesend', ''; 43 44sub antyidlesend { 45 for my $server (Irssi::servers()) { 46 next if (not $server->{'connected'} or ($aidle{'away'} and not $server->{'usermode_away'}) 47 or (@{$aidle{'ircnets'}} and not grep {lc $server->{'chatnet'} eq lc $_} @{$aidle{'ircnets'}})); 48 $server->send_raw("PRIVMSG " . $server->{nick} . " IDLE"); 49 Irssi::timeout_remove $aidle{'timer'}; 50 $aidle{'timer'} = Irssi::timeout_add int(rand($aidle{'max'})+1) * 1000, 'antyidlesend', ''; 51 } 52} 53 54Irssi::signal_add 'setup changed' => sub { 55 $aidle{'away'} = Irssi::settings_get_bool 'aidle_only_when_away'; 56 my $max_idle_time = Irssi::settings_get_int 'aidle_max_idle_time'; 57 if ($max_idle_time < $aidle{'max'}) { 58 Irssi::timeout_remove $aidle{'timer'}; 59 $aidle{'timer'} = Irssi::timeout_add int(rand($max_idle_time)+1) * 1000, 'antyidlesend', ''; 60 } 61 $aidle{'max'} = $max_idle_time; 62 @{$aidle{'ircnets'}} = (split(/[\s,|-]+/, Irssi::settings_get_str('aidle_ircnets'))); 63 foreach my $ircnet (@{$aidle{'ircnets'}}) { 64 Irssi::print("%RWarning%n - no such chatnet \'$ircnet\' !", MSGLEVEL_CLIENTERROR) unless (Irssi::chatnet_find($ircnet)); 65 } 66}; 67 68Irssi::signal_add "event 301" => sub { 69 my ($server, $data) = @_; 70 71 my ($fnick, $snick, undef) = split(' ', $data); 72 73 Irssi::signal_stop() if $fnick eq $snick; 74}; 75 76Irssi::signal_add "default ctcp msg" => sub { 77 my ($server, $data, $sender, $addr, $target) = @_; 78 79 Irssi::signal_stop() if ($sender eq $target && $data eq "IDLE"); 80}; 81