91 lines
2.8 KiB
Perl
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');
|