config/.irssi/scripts/auto_away.pl

91 lines
2.8 KiB
Perl

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');