getawayreason.pl


# this script fixes the awaystatus in the statusbar when the server sets you away
use Irssi;
use Irssi::Irc;
use strict;
use vars qw($VERSION %IRSSI);

$VERSION = "1.02";
%IRSSI = (
    authors     => 'Valentin Batz',
    contact	=> 'senneth@irssi.org',
    name        => 'getawayreason',
    description => 'gets the awayreason when the server sets you away on connect',
    url		=> 'http://www.oberkommando.org/~senneth/irssi/scripts/',
    license     => 'GPLv2',
    revision    => '$LastChangedRevision: 448 $',
    changed     => '$LastChangedDate: 2007-12-12 22:11:56 +0100 (Mi, 12 Dez 2007) $',
    version     => $VERSION,
);

sub event_away {
	my ($server) = @_;
	# the server set us away, see if we have the away-reason
	if ($server->{away_reason} eq "") {
		#we don't have the away reason yet, so we /whois ourselfs
		Irssi::signal_stop();
		my $arg = $server->{nick};
		$server->redirect_event('whois', 1, $arg, -1, '', {
				  'event 301' => 'redir whois_away',
				  '' => 'event empty' });
		$server->send_raw("WHOIS :$arg");
	}
}

sub event_reason {
	my ($server, $data) = @_;
	my (undef, $awayreason) = split (/ :/, $data, 2);
	if (defined $awayreason && $awayreason ne "") {
		$server->command('^AWAY -one '.$awayreason);
		Irssi::signal_stop();
	}
}

Irssi::signal_add_first('event 306', 'event_away');
Irssi::signal_add_first('redir whois_away', 'event_reason');