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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
use strict;
use vars qw($VERSION %IRSSI);
use Irssi;
$VERSION = '1.01';
%IRSSI = (
authors => 'Erik Fears',
contact => 'strtok@softhome.net',
name => 'whos',
description => 'This script allows ' .
'you to view all users ' .
'on a specific server.',
license => 'GPL',
);
Irssi::command_bind('whos', \&cmd_whos);
Irssi::command_bind('whoss', \&cmd_whoss);
Irssi::signal_add('redir whos', \&sig_whos);
Irssi::signal_add('redir whosend', \&sig_whosend);
Irssi::theme_register([
'whos' => '%#{channelhilight $[-10]0} %|{nick $[!9]1} $[!3]2 $[!2]3 $4@$5 {comment {hilight $6}}',
'whos_end' => 'End of /WHOS list',
'whos_hil' => '{hilight $0} $1'
]);
#results
my %res;
#WHOS <CHANNEL>
sub cmd_whos
{
my @parv;
my ($data, $server, $witem) = @_;
my $chan;
if (exists $res{$server->{tag}}) {
$res{$server->{tag}}=();
}
$res{$server->{tag}}->{result}=();
$res{$server->{tag}}->{server}=();
$res{$server->{tag}}->{regex}='';
if( !($witem && $witem->{type} eq "CHANNEL") )
{
return;
}
$chan = $witem->{name};
@parv = split(/\s+/,$data);
$server->redirect_event("who", 1, $chan, 0, undef, {
"event 352" => "redir whos",
"event 315" => "redir whosend",
"" => "event empty"}
);
if(length($parv[0]) <= 0)
{
$res{$server->{tag}}->{regex}='';
}
else
{
$res{$server->{tag}}->{regex}=$parv[0];
}
$server->send_raw("WHO " . $chan);
}
#strtok #ribena strtok not.deprecated irc.choopa.net strtok H@ :0 (char *, const char *);
sub sig_whos
{
my @who;
my ($server, $msg, $nick, $address, $target) = @_;
@who = split(/\s+/,$msg,9);
$res{$server->{tag}}->{result}->{$who[5]}=[@who];
}
sub sig_whosend
{
my ($server, $msg, $nick, $address, $target) = @_;
if ($res{$server->{tag}}->{regex} eq '') {
$res{$server->{tag}}->{regex}= $nick;
}
Irssi::printformat(MSGLEVEL_CRAP,'whos_hil','regex:',$res{$server->{tag}}->{regex});
foreach (sort keys %{$res{$server->{tag}}->{result}}) {
my @r=@{$res{$server->{tag}}->{result}->{$_}};
if ($r[4] =~ m/$res{$server->{tag}}->{regex}/ ) {
Irssi::printformat(MSGLEVEL_CRAP,'whos',@r[1,5,6,7,2,3,8]);
}
$res{$server->{tag}}->{server}->{$r[4]}=1;
}
Irssi::printformat(MSGLEVEL_CRAP, 'whos_end');
}
sub cmd_whoss {
my ($args, $server, $witem) = @_;
Irssi::printformat(MSGLEVEL_CRAP,'whos_hil','servers:');
foreach (sort keys %{$res{$server->{tag}}->{server}}) {
Irssi::print($_,MSGLEVEL_CRAP);
}
}
# vim:set ts=3 sw=3 expandtab:
|