diff options
Diffstat (limited to 'scripts/auto_away.pl')
-rw-r--r-- | scripts/auto_away.pl | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/scripts/auto_away.pl b/scripts/auto_away.pl new file mode 100644 index 0000000..1c2980f --- /dev/null +++ b/scripts/auto_away.pl @@ -0,0 +1,90 @@ +use Irssi; +use Irssi::TextUI; +use strict; +use vars qw($VERSION %IRSSI); + +#Setting variables: + +#first_away_message - The first /away messsage +#second_away_message - The second /away message +#first_away_timeout - Number of seconds to activate the first away state +#second_away_timeout - Number of seconds to activate the second away state +#away_servers - list of servertags seperated by spaces where auto_away will work. +# If empty (/set -clear away_servers, it will work on every network +# +# CHANGELOG: +# 21 DEC 2004: +# the timer is only being reset when pressing enter. and the away timer starts counting after the last time you pressed enter. +# this is less CPU consuming :-D + +$VERSION = '0.2'; +%IRSSI = ( + authors => 'Tijmen Ruizendaal', + contact => 'tijmen@fokdat.nl', + name => 'auto_away.pl', + description => 'server specific autoaway with two different away states at different intervals', + license => 'GPLv2', + url => 'http://the-timing.nl/stuff/irssi-bitlbee', + changed => '2004-12-21', +); + + +my $timer; + +Irssi::settings_add_str('misc', 'first_away_message', undef); +Irssi::settings_add_str('misc', 'second_away_message', undef); +Irssi::settings_add_int('misc', 'first_away_timeout', undef); +Irssi::settings_add_int('misc', 'second_away_timeout', undef); +Irssi::settings_add_str('misc', 'away_servers', undef); + +sub reset_timer{ + my $key=shift; + if($key == 10){ + my (@servers) = Irssi::servers(); + foreach my $server (@servers) { + if($server->{usermode_away} == 1){ + $server->command("AWAY -one"); + } + } + Irssi::timeout_remove($timer); + my $timeout = Irssi::settings_get_int('first_away_timeout'); + if ($timeout){ + $timer = Irssi::timeout_add_once($timeout*1000, 'first_away', undef); ## activate first away state + } + } +} +sub first_away{ + away(1); + my $timeout = Irssi::settings_get_int('second_away_timeout'); + if ($timeout){ + Irssi::timeout_remove($timer); + $timer = Irssi::timeout_add_once($timeout*1000, 'away', 2); ## activate second away state + } +} +sub away{ + my $state = shift; + my $server_string = Irssi::settings_get_str('away_servers'); + my (@away_servers) = split (/ +/, $server_string); + my (@servers) = Irssi::servers(); + my $message; + + if($state == 1){ + $message = Irssi::settings_get_str('first_away_message'); + }elsif($state == 2){ + $message = Irssi::settings_get_str('second_away_message'); + } + if($server_string){ + foreach my $away_server (@away_servers) { + #print "|$away_server|"; + foreach my $server (@servers) { + if ($away_server eq $server->{tag} && ($server->{usermode_away} == 0 || $state == 2) ){ + $server->command("AWAY -one $message"); + } + } + } + }else{ + my $server=$servers[0]; + $server->command("AWAY -all $message"); + } +} +Irssi::signal_add_last('gui key pressed', 'reset_timer'); |