html/idletime.pl
1 #!/usr/bin/perl
2 #
3 # Do you feel tired of typing /wii ick nick?
4 # Just try idletime.pl :)
5 # By Stefan "tommie" Tomanek (stefan@kann-nix.org)
6
7 use strict;
8 use Irssi;
9
10 use vars qw($VERSION %IRSSI);
11
12 $VERSION = "20030208";
13 %IRSSI = (
14 authors => "Stefan 'tommie' Tomanek",
15 contact => "stefan\@pico.ruhr.de",
16 name => "idletime",
17 description => "Retrieves the idletime of any nick",
18 license => "GPLv2",
19 url => "",
20 changed => "$VERSION",
21 commands => "idle"
22 );
23
24
25
26 my %nicks;
27
28 sub cmd_idle {
29 my ($nicks, $server) = @_;
30 foreach (split(/\s+/, $nicks)) {
31 push @{$nicks{$server->{chatnet}}}, $_;
32 $server->command("whois ".$_." ".$_);
33 }
34 }
35
36 sub event_server_event {
37 my ($server, $text, $nick, $user) = @_;
38 my @items = split(/ /,$text);
39 my $type = $items[0];
40
41 if ( ($type eq 301) or ($type eq "311") or ($type eq "312") or ($type eq "317") or ($type eq "318") or ($type eq "319") ) {
42 my $name = $items[2];
43 my $i = 0;
44 if ( has_item($name,@{$nicks{$server->{chatnet}}}) ) {
45 Irssi::signal_stop();
46 print_idletime($name, $server, $items[3]) if ($type eq "317");
47 splice(@{$nicks{$server->{chatnet}}},$i,1) if ($type eq "318");
48 $i++;
49 }
50 }
51 }
52
53 sub has_item {
54 my ($item, @list) = @_;
55 foreach (@list) {
56 $item == $_ && return(1);
57 }
58 return(0)
59 }
60
61 sub print_idletime {
62 my ($name, $ircnet, $time) = @_;
63 my $hours = int($time / 3600);
64 my $minutes = int(($time % 3600)/60);
65 my $seconds = int(($time % 3600)%60);
66 $ircnet->print(undef,$name." is idle for ".$hours." hours, ".$minutes." minutes and ".$seconds." seconds.", MSGLEVEL_CRAP);
67 }
68
69 Irssi::command_bind('idle', 'cmd_idle');
70 Irssi::signal_add('server event', 'event_server_event');