use Irssi; use strict; use vars qw($VERSION %IRSSI); $VERSION = "0.1"; %IRSSI = ( authors => 'Daniel Wiberg ', name => 'daway', contact => 'danne@wiberg.nu', description => 'Automatically set away when no activity' . 'has been seen in ANY of the users ttys for n seconds', license => 'BSD', url => 'http://www.wiberg.nu/software/irssi/', changed => "2005-03-02" ); # Global Variables my $daway=0; my $activity_time=time(); my $ttypath=getOS(); # Settings Irssi::settings_add_int('daway', 'daway_timeout', "900"); Irssi::settings_add_str('daway', 'daway_reason', "Autoaway."); # Commands Irssi::command_bind("daway","daway_help"); # Timers Irssi::timeout_add(5000, "periodic", ""); # Stuff executed at loadtime print CLIENTCRAP '%B>>%n '.$IRSSI{name}.' '.$VERSION.' loaded: /daway help for help'; sub get_idle_time { my $daway_timeout=Irssi::settings_get_int('daway_timeout'); my @result; my $result; my @fields; my $atime; my $now; my $filename; my $idletime; my @result=`w 2>&1`; foreach $result(@result) { if($result=~$ENV{USER}) { @fields=split(/ +/,$result); $filename=$ttypath . @fields[1]; $atime = (stat($filename))[8]; if($atime gt $activity_time) { $activity_time = $atime; } } } $now=time(); $idletime=$now-$activity_time; return $idletime; } sub set_daway { if(!$daway) { my $daway_text=Irssi::settings_get_str('daway_reason'); my (@servers) = Irssi::servers(); my $server = $servers[0]; $server->command("/AWAY $daway_text"); $daway=1; } } sub unset_daway { if($daway) { my (@servers) = Irssi::servers(); my $server = $servers[0]; $server->command("/AWAY"); $daway=0; } } sub periodic { my $daway_timeout=Irssi::settings_get_int('daway_timeout'); my $idletime=get_idle_time(); if($idletime > $daway_timeout && !$daway) { set_daway(); } elsif($idletime < $daway_timeout && $daway) { unset_daway(); } } sub getOS { my $uname=`uname`; if($uname =~ "BSD") { return "/dev/tty" } else { return "/dev/" } } sub daway_help { print("/set daway_timeout n to set the autoaway timeout in seconds"); print("/set daway_reason to set the autoaway reason"); }