1#!/usr/local/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 7use strict; 8use Irssi; 9 10use 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 26my %nicks; 27 28sub cmd_idle { 29 my ($nicks, $server) = @_; 30 foreach (split(/\s+/, $nicks)) { 31 push @{$nicks{$server->{chatnet}}}, $_; 32 $server->command("whois ".$_." ".$_); 33 } 34} 35 36sub 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 53sub has_item { 54 my ($item, @list) = @_; 55 foreach (@list) { 56 $item == $_ && return(1); 57 } 58 return(0) 59} 60 61sub 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 69Irssi::command_bind('idle', 'cmd_idle'); 70Irssi::signal_add('server event', 'event_server_event'); 71