html/aidle.pl


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