summaryrefslogtreecommitdiffstats
path: root/scripts/ircuwhois.pl
blob: 4a01de023ca11ee951dbb5f268508bda8f2655e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
use strict;
use Irssi;
use vars qw($VERSION %IRSSI);

$VERSION = '1.2';

%IRSSI = (
	authors		=> 'Valentin Batz',
	contact		=> 'vb\@g-23.org',
	name		=> 'ircuwhois',
	description	=> 'show the accountname (330) and real host on ircu',
	license		=> 'GPLv2',
	url		=> 'http://www.hurzelgnom.homepage.t-online.de/irssi/scripts/quakenet.pl'
);

# adapted by Nei

Irssi::theme_register([
	'whois_auth',	'{whois account %|$1}',
	'whois_ip',	'{whois actualip %|$1}',
	'whois_host',	'{whois act.host %|$1}',
	'whois_oper',	'{whois privile. %|$1}',
	'whois_ssl',	'{whois connect. %|$1}'
]);

sub event_whois_default_event {
	#'server event', SERVER_REC, char *data, char *sender_nick, char *sender_address
	my ($server, $data, $snick, $sender) = @_;
	my $numeric = $server->parse_special('$H');
	if ($numeric eq '313') { &event_whois_oper }
	if ($numeric eq '330') { &event_whois_auth }
	if ($numeric eq '337') { &event_whois_ssl }
	if ($numeric eq '338') { &event_whois_userip }
}

sub event_whois_oper {
	my ($server, $data) = @_;
	my ($num, $nick, $privileges) = split(/ /, $data, 3);
	$privileges =~ s/^:(?:is an? )?//;
	$server->printformat($nick, MSGLEVEL_CRAP, 'whois_oper', $nick, $privileges);
	Irssi::signal_stop();
}

sub event_whois_auth {
	my ($server, $data) = @_;
	my ($num, $nick, $auth_nick, $isircu) = split(/ /, $data, 4);
	return unless $isircu =~ / as/; #:is logged in as
	$server->printformat($nick, MSGLEVEL_CRAP, 'whois_auth', $nick, $auth_nick);
	Irssi::signal_stop();
}

sub event_whois_ssl {
	my ($server, $data) = @_;
	my ($num, $nick, $connection) = split(/ /, $data, 3);
	$connection =~ s/^:(?:is using an? )?//;
	$server->printformat($nick, MSGLEVEL_CRAP, 'whois_ssl', $nick, $connection);
	Irssi::signal_stop();
}

sub event_whois_userip {
	my ($server, $data) = @_;
	my ($num, $nick, $userhost, $ip, $isircu) = split(/ /, $data, 5);
	return unless $isircu =~ /ctual /; #:Actual user@host, Actual IP
	$server->printformat($nick, MSGLEVEL_CRAP, 'whois_ip', $nick, $ip);
	$server->printformat($nick, MSGLEVEL_CRAP, 'whois_host', $nick, $userhost);
	Irssi::signal_stop();
}

sub debug {
	use Data::Dumper;
	Irssi::print(Dumper(\@_));
}
Irssi::signal_register({
	'whois oper' => [ 'iobject', 'string', 'string', 'string' ],
}); # fixes oper display in 0.8.10
Irssi::signal_add({
	'whois oper' => 'event_whois_oper',
	'event 313' => 'event_whois_oper',
	'event 330' => 'event_whois_auth',
	'event 337' => 'event_whois_ssl',
	'event 338' => 'event_whois_userip',
	'whois default event' => 'event_whois_default_event',
});