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 };